mirror of
https://git.openafs.org/openafs.git
synced 2025-02-01 05:57:43 +00:00
STABLE14-shlibafssetpag-20051015
FIXES 18745 implement {sh,}libafssetpag
This commit is contained in:
parent
d7886b0ba2
commit
77fc484e85
@ -393,6 +393,7 @@ case $AFS_SYSNAME in
|
||||
LEX="lex -l"
|
||||
REGEX_OBJ="regex.o"
|
||||
XCFLAGS="-traditional-cpp"
|
||||
SHLIB_LINKER="${MT_CC} -dynamiclib"
|
||||
;;
|
||||
|
||||
ppc_darwin_13)
|
||||
@ -401,6 +402,7 @@ case $AFS_SYSNAME in
|
||||
LWP_OPTMZ="-O2"
|
||||
REGEX_OBJ="regex.o"
|
||||
XCFLAGS="-no-cpp-precomp"
|
||||
SHLIB_LINKER="${MT_CC} -dynamiclib"
|
||||
;;
|
||||
|
||||
ppc_darwin_14)
|
||||
@ -409,6 +411,7 @@ case $AFS_SYSNAME in
|
||||
LWP_OPTMZ="-O2"
|
||||
REGEX_OBJ="regex.o"
|
||||
XCFLAGS="-no-cpp-precomp"
|
||||
SHLIB_LINKER="${MT_CC} -dynamiclib"
|
||||
;;
|
||||
|
||||
ppc_darwin_60)
|
||||
@ -418,6 +421,7 @@ case $AFS_SYSNAME in
|
||||
REGEX_OBJ="regex.o"
|
||||
XCFLAGS="-no-cpp-precomp"
|
||||
TXLIBS="-lncurses"
|
||||
SHLIB_LINKER="${MT_CC} -dynamiclib"
|
||||
;;
|
||||
|
||||
ppc_darwin_70)
|
||||
@ -444,6 +448,8 @@ case $AFS_SYSNAME in
|
||||
XCFLAGS="-no-cpp-precomp"
|
||||
TXLIBS="-lncurses"
|
||||
EXTRA_VLIBOBJS="fstab.o"
|
||||
SHLIB_LINKER="${MT_CC} -dynamiclib"
|
||||
SHLIB_LINKER="${MT_CC} -dynamiclib"
|
||||
;;
|
||||
|
||||
ppc_linux*)
|
||||
|
@ -70,7 +70,9 @@ SYSOBJS = \
|
||||
rmtsys.xdr.o \
|
||||
rmtsys.cs.o \
|
||||
afssyscalls.o \
|
||||
rmtsysnet.o
|
||||
rmtsysnet.o \
|
||||
glue.o \
|
||||
setpag.o
|
||||
|
||||
PTSERVEROBJS = \
|
||||
ptclient.o \
|
||||
@ -244,6 +246,12 @@ afssyscalls.o: ${SYS}/afssyscalls.c
|
||||
rmtsysnet.o: ${SYS}/rmtsysnet.c
|
||||
${CCRULE}
|
||||
|
||||
glue.o: ${SYS}/glue.c
|
||||
${CCRULE}
|
||||
|
||||
setpag.o: ${SYS}/setpag.c
|
||||
${CCRULE}
|
||||
|
||||
clean:
|
||||
$(RM) -f *.o *.a libafsauthent*
|
||||
|
||||
|
@ -75,7 +75,9 @@ SYSOBJS = \
|
||||
rmtsys.xdr.o \
|
||||
rmtsys.cs.o \
|
||||
afssyscalls.o \
|
||||
rmtsysnet.o
|
||||
rmtsysnet.o \
|
||||
glue.o \
|
||||
setpag.o
|
||||
|
||||
PTSERVEROBJS = \
|
||||
ptclient.o \
|
||||
@ -260,6 +262,12 @@ afssyscalls.o: ${SYS}/afssyscalls.c
|
||||
rmtsysnet.o: ${SYS}/rmtsysnet.c
|
||||
${CCRULE}
|
||||
|
||||
glue.o: ${SYS}/glue.c
|
||||
${CCRULE}
|
||||
|
||||
setpag.o: ${SYS}/setpag.c
|
||||
${CCRULE}
|
||||
|
||||
clean:
|
||||
$(RM) -f *.o *.a libafsauthent*
|
||||
|
||||
|
@ -1,7 +1,9 @@
|
||||
AFS_component_version_number.c
|
||||
Makefile
|
||||
libafssetpag.*
|
||||
pagsh
|
||||
pagsh.krb
|
||||
picobj
|
||||
rmtsys.cs.c
|
||||
rmtsys.h
|
||||
rmtsys.ss.c
|
||||
|
@ -1,3 +1,8 @@
|
||||
# API version. When something changes, increment as appropriate.
|
||||
# Ignore at your own risk.
|
||||
LIBAFSSETPAGMAJOR=1
|
||||
LIBAFSSETPAGMINOR=0
|
||||
|
||||
# Copyright 2000, International Business Machines Corporation and others.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
@ -14,9 +19,12 @@ CFLAGS=-I. -I${srcdir} ${DBUG} -I${TOP_OBJDIR}/src/config -I${TOP_INCDIR} ${XCF
|
||||
SFLAGS=-P -I${TOP_INCDIR}
|
||||
LIBS=libsys.a ${TOP_LIBDIR}/librx.a libsys.a ${TOP_LIBDIR}/liblwp.a ${TOP_LIBDIR}/util.a ${XLIBS}
|
||||
|
||||
OBJECTS= afssyscalls.o syscall.o
|
||||
OBJECTS= afssyscalls.o setpag.o glue.o syscall.o
|
||||
SHLIBOBJS = picobj/setpag.o picobj/glue.o syscall.o
|
||||
RMTOBJS=rmtsysnet.o rmtsysc.o rmtsys.cs.o rmtsys.xdr.o rmtsys.ss.o rmtsyss.o
|
||||
|
||||
LIBAFSSETPAG = libafssetpag.${SHLIB_SUFFIX}.${LIBAFSSETPAGMAJOR}.${LIBAFSSETPAGMINOR}
|
||||
|
||||
all: \
|
||||
rmtsysd \
|
||||
pagsh \
|
||||
@ -26,6 +34,7 @@ all: \
|
||||
${TOP_INCDIR}/afs/xfsattrs.h \
|
||||
${TOP_LIBDIR}/afs.exp \
|
||||
${TOP_LIBDIR}/libsys.a \
|
||||
${TOP_LIBDIR}/${LIBAFSSETPAG} \
|
||||
${KERNELDIR}/afs \
|
||||
${KERNELDIR}/afs/xfsattrs.h \
|
||||
${UKERNELDIR}/afs \
|
||||
@ -41,6 +50,22 @@ libsys.a: ${OBJECTS} ${RMTOBJS} afsl.exp AFS_component_version_number.o
|
||||
$(AR) crv $@ afsl.exp;; \
|
||||
esac
|
||||
|
||||
${LIBAFSSETPAG}: ${SHLIBOBJS}
|
||||
case ${SYS_NAME} in \
|
||||
*_linux*) \
|
||||
${SHLIB_LINKER} -Wl,-h,libafssetpag.so.${LIBAFSSETPAGMAJOR} \
|
||||
-o ${LIBAFSSETPAG} -Wl,--version-script=afssetpag.map \
|
||||
${SHLIBOBJS};; \
|
||||
rs_aix4*) \
|
||||
${SHLIB_LINKER} -o ${LIBAFSSETPAG} ${SHLIBOBJS} \
|
||||
-bE:afssetpag.exp;; \
|
||||
sun*_5*) \
|
||||
${SHLIB_LINKER} -h libafssetpag.so.${LIBAFSSETPAGMAJOR} \
|
||||
-Wl,-M afssetpag.map -o ${LIBAFSSETPAG} ${SHLIBOBJS};; \
|
||||
*) \
|
||||
${SHLIB_LINKER} -o ${LIBAFSSETPAG} ${SHLIBOBJS};; \
|
||||
esac
|
||||
|
||||
tests: pagsh pagsh.krb fixit iinc idec icreate iopen istat rmtsysd
|
||||
|
||||
syscall.o: syscall.s
|
||||
@ -68,6 +93,26 @@ syscall.o: syscall.s
|
||||
afssyscalls.o: afssyscalls.c afssyscalls.h
|
||||
${CCOBJ} ${CFLAGS} -c ${srcdir}/afssyscalls.c
|
||||
|
||||
glue.o: glue.c afssyscalls.h
|
||||
${CCOBJ} ${CFLAGS} -c ${srcdir}/glue.c
|
||||
|
||||
setpag.o: setpag.c afssyscalls.h
|
||||
${CCOBJ} ${CFLAGS} -c ${srcdir}/setpag.c
|
||||
|
||||
picobj: afssyscalls.h
|
||||
mkdir -p picobj
|
||||
cp ${srcdir}/afssyscalls.h picobj/afssyscalls.h
|
||||
|
||||
picobj/glue.o: picobj glue.c afssyscalls.h
|
||||
rm -f picobj/glue.c
|
||||
cp ${srcdir}/glue.c picobj/glue.c
|
||||
cd picobj && ${CCOBJ} ${CFLAGS} ${SHLIB_CFLAGS} -c glue.c
|
||||
|
||||
picobj/setpag.o: picobj setpag.c afssyscalls.h
|
||||
rm -f picobj/setpag.c
|
||||
cp ${srcdir}/setpag.c picobj/setpag.c
|
||||
cd picobj && ${CCOBJ} ${CFLAGS} ${SHLIB_CFLAGS} -c setpag.c
|
||||
|
||||
rmtsysnet.o rmtsysc.o rmtsyss.o rmtsysd.o: rmtsys.h
|
||||
rmtsysd: AFS_component_version_number.o afs.exp afsl.exp
|
||||
|
||||
@ -129,6 +174,12 @@ xfsinode: xfsinode.c AFS_component_version_number.c
|
||||
$(CC) -o xfsinode ${CFLAGS} ${srcdir}/xfsinode.c ${LIBS}
|
||||
esac
|
||||
|
||||
${TOP_LIBDIR}/${LIBAFSSETPAG}: ${LIBAFSSETPAG}
|
||||
${INSTALL} ${LIBAFSSETPAG} ${TOP_LIBDIR}/${LIBAFSSETPAG}
|
||||
-ln -f -s ${LIBAFSSETPAG} ${TOP_LIBDIR}/libafssetpag.${SHLIB_SUFFIX}
|
||||
-ln -f -s ${LIBAFSSETPAG} ${TOP_LIBDIR}/libafssetpag.${SHLIB_SUFFIX}.${LIBAFSSETPAGMAJOR}
|
||||
|
||||
|
||||
afs.exp: ${srcdir}/afs4.exp ${srcdir}/afs5.exp
|
||||
case ${SYS_NAME} in \
|
||||
rs_aix5* ) \
|
||||
@ -198,6 +249,7 @@ depinstall: \
|
||||
|
||||
install: \
|
||||
${DESTDIR}${libdir}/afs/libsys.a \
|
||||
${DESTDIR}${libdir}/${LIBAFSSETPAG} \
|
||||
${DESTDIR}${sbindir}/rmtsysd \
|
||||
${DESTDIR}${includedir}/afs/afssyscalls.h \
|
||||
${DESTDIR}${bindir}/pagsh \
|
||||
@ -208,6 +260,13 @@ install: \
|
||||
${DESTDIR}${libdir}/afs/libsys.a: libsys.a
|
||||
${INSTALL} $? $@
|
||||
|
||||
${DESTDIR}${libdir}/${LIBAFSSETPAG}: ${LIBAFSSETPAG}
|
||||
${INSTALL} ${LIBAFSSETPAG} ${DESTDIR}${libdir}/${LIBAFSSETPAG}
|
||||
-ln -f -s ${LIBAFSSETPAG} \
|
||||
${DESTDIR}${libdir}/libafssetpag.${SHLIB_SUFFIX}
|
||||
-ln -f -s ${LIBAFSSETPAG} \
|
||||
${DESTDIR}${libdir}/libafssetpag.${SHLIB_SUFFIX}.${LIBAFSSETPAGMAJOR}
|
||||
|
||||
${DESTDIR}${sbindir}/rmtsysd: rmtsysd
|
||||
${INSTALL} -s $? $@
|
||||
|
||||
@ -231,6 +290,7 @@ ${DESTDIR}${includedir}/afs/xfsattrs.h: xfsattrs.h
|
||||
|
||||
dest: \
|
||||
${DEST}/lib/afs/libsys.a \
|
||||
${TOP_LIBDIR}/${LIBAFSSETPAG} \
|
||||
${DEST}/etc/rmtsysd \
|
||||
${DEST}/bin/pagsh \
|
||||
${DEST}/bin/pagsh.krb \
|
||||
@ -271,4 +331,5 @@ clean:
|
||||
$(RM) -f *.o libsys.a xfsinode iinc idec icreate iopen istat core \
|
||||
rmtsysc rmtsyss *.o rmtsys.ss.c rmtsys.cs.c rmtsys.xdr.c rmtsys.h \
|
||||
rmtsysd AFS_component_version_number.c pagsh pagsh.krb \
|
||||
afs.exp afsl.exp
|
||||
afs.exp afsl.exp libafssetpag.*
|
||||
$(RM) -rf picobj
|
||||
|
1
src/sys/afssetpag.exp
Normal file
1
src/sys/afssetpag.exp
Normal file
@ -0,0 +1 @@
|
||||
lsetpag
|
10
src/sys/afssetpag.map
Normal file
10
src/sys/afssetpag.map
Normal file
@ -0,0 +1,10 @@
|
||||
# Export map for libafssetpag, used on Linux and Solaris to restrict
|
||||
# exports from the shared libraries to just the public ABI. Add symbol
|
||||
# versioning while we're at it, just in case.
|
||||
|
||||
AFSSETPAG_1.0 {
|
||||
global:
|
||||
lsetpag;
|
||||
local:
|
||||
*;
|
||||
};
|
@ -59,7 +59,6 @@ static void check_iops(int index, char *fun, char *file, int line);
|
||||
#pragma weak xiinc = iinc
|
||||
#pragma weak xidec = idec
|
||||
#pragma weak xiopen = iopen
|
||||
#pragma weak xlsetpag = lsetpag
|
||||
#pragma weak xlpioctl = lpioctl
|
||||
#ifdef notdef
|
||||
#pragma weak xiread = iread
|
||||
@ -205,12 +204,6 @@ iwrite(int dev, int inode, int inode_p1, unsigned int offset, char *cbuf,
|
||||
}
|
||||
#endif /* notdef */
|
||||
|
||||
int
|
||||
lsetpag(void)
|
||||
{
|
||||
return (syscall(AFS_SETPAG));
|
||||
}
|
||||
|
||||
int
|
||||
lpioctl(char *path, int cmd, char *cmarg, int follow)
|
||||
{
|
||||
@ -340,49 +333,6 @@ int ioctl_afs_syscall(long syscall, long param1, long param2, long param3,
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
#if defined(AFS_LINUX20_ENV)
|
||||
int proc_afs_syscall(long syscall, long param1, long param2, long param3,
|
||||
long param4, int *rval) {
|
||||
struct afsprocdata syscall_data;
|
||||
int fd = open(PROC_SYSCALL_FNAME, O_RDWR);
|
||||
if(fd < 0)
|
||||
fd = open(PROC_SYSCALL_ARLA_FNAME, O_RDWR);
|
||||
if(fd < 0)
|
||||
return -1;
|
||||
|
||||
syscall_data.syscall = syscall;
|
||||
syscall_data.param1 = param1;
|
||||
syscall_data.param2 = param2;
|
||||
syscall_data.param3 = param3;
|
||||
syscall_data.param4 = param4;
|
||||
|
||||
*rval = ioctl(fd, VIOC_SYSCALL, &syscall_data);
|
||||
|
||||
close(fd);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
int
|
||||
lsetpag(void)
|
||||
{
|
||||
int errcode, rval;
|
||||
|
||||
#if defined(AFS_LINUX20_ENV)
|
||||
rval = proc_afs_syscall(AFSCALL_SETPAG,0,0,0,0,&errcode);
|
||||
|
||||
if(rval)
|
||||
errcode = syscall(AFS_SYSCALL, AFSCALL_SETPAG);
|
||||
#elif defined(AFS_DARWIN80_ENV)
|
||||
if (ioctl_afs_syscall(AFSCALL_SETPAG,0,0,0,0,0,0,&errcode))
|
||||
errcode=ENOSYS;
|
||||
#else
|
||||
errcode = syscall(AFS_SYSCALL, AFSCALL_SETPAG);
|
||||
#endif
|
||||
|
||||
return (errcode);
|
||||
}
|
||||
|
||||
int
|
||||
lpioctl(char *path, int cmd, char *cmarg, int follow)
|
||||
|
@ -39,6 +39,12 @@ extern FILE *inode_debug_log;
|
||||
#define AFS_DEBUG_IOPS_LOG(F)
|
||||
#endif
|
||||
|
||||
/* Glue layer. */
|
||||
#ifdef AFS_LINUX20_ENV
|
||||
int proc_afs_syscall(long syscall, long param1, long param2, long param3,
|
||||
long param4, int *rval);
|
||||
#endif
|
||||
|
||||
/* Declarations for inode system calls. */
|
||||
#ifdef AFS_SGI_XFS_IOPS_ENV
|
||||
extern uint64_t icreatename64(int dev, char *partname, int p0, int p1, int p2,
|
||||
|
55
src/sys/glue.c
Normal file
55
src/sys/glue.c
Normal file
@ -0,0 +1,55 @@
|
||||
/*
|
||||
* Copyright 2000, International Business Machines Corporation and others.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* This software has been released under the terms of the IBM Public
|
||||
* License. For details, see the LICENSE file in the top-level source
|
||||
* directory or online at http://www.openafs.org/dl/license10.html
|
||||
*
|
||||
* This file contains any necessary C glue to allow programs to communicate
|
||||
* with the AFS kernel module. The necessary lower-level glue is defined in
|
||||
* syscall.s.
|
||||
*/
|
||||
|
||||
#include <afsconfig.h>
|
||||
#include <afs/param.h>
|
||||
|
||||
RCSID
|
||||
("$Header$");
|
||||
|
||||
#include <afs/afs_args.h>
|
||||
#include <sys/file.h>
|
||||
#include <sys/ioctl.h>
|
||||
#if defined(AFS_SUN_ENV) && !defined(AFS_SUN5_ENV)
|
||||
#include <unistd.h>
|
||||
#else
|
||||
#include <stdio.h>
|
||||
#endif
|
||||
#ifdef AFS_SUN5_ENV
|
||||
#include <fcntl.h>
|
||||
#endif
|
||||
#include "afssyscalls.h"
|
||||
|
||||
#ifdef AFS_LINUX20_ENV
|
||||
int proc_afs_syscall(long syscall, long param1, long param2, long param3,
|
||||
long param4, int *rval) {
|
||||
struct afsprocdata syscall_data;
|
||||
int fd = open(PROC_SYSCALL_FNAME, O_RDWR);
|
||||
if(fd < 0)
|
||||
fd = open(PROC_SYSCALL_ARLA_FNAME, O_RDWR);
|
||||
if(fd < 0)
|
||||
return -1;
|
||||
|
||||
syscall_data.syscall = syscall;
|
||||
syscall_data.param1 = param1;
|
||||
syscall_data.param2 = param2;
|
||||
syscall_data.param3 = param3;
|
||||
syscall_data.param4 = param4;
|
||||
|
||||
*rval = ioctl(fd, VIOC_SYSCALL, &syscall_data);
|
||||
|
||||
close(fd);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
66
src/sys/setpag.c
Normal file
66
src/sys/setpag.c
Normal file
@ -0,0 +1,66 @@
|
||||
/*
|
||||
* Copyright 2000, International Business Machines Corporation and others.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* This software has been released under the terms of the IBM Public
|
||||
* License. For details, see the LICENSE file in the top-level source
|
||||
* directory or online at http://www.openafs.org/dl/license10.html
|
||||
*
|
||||
* This file contains the lsetpag system call. (setpag is handled by the
|
||||
* rmtsys layer and turned into either setpag or a remote call as is
|
||||
* appropriate.) It is kept separate to allow for the creation of a simple
|
||||
* shared library containing only setpag.
|
||||
*/
|
||||
|
||||
#include <afsconfig.h>
|
||||
#include <afs/param.h>
|
||||
|
||||
RCSID
|
||||
("$Header$");
|
||||
|
||||
#include <afs/afs_args.h>
|
||||
#if defined(AFS_SUN_ENV) && !defined(AFS_SUN5_ENV)
|
||||
#include <unistd.h>
|
||||
#else
|
||||
#include <stdio.h>
|
||||
#endif
|
||||
#include "afssyscalls.h"
|
||||
|
||||
#ifdef AFS_AIX32_ENV
|
||||
/*
|
||||
* in VRMIX, system calls look just like function calls, so we don't
|
||||
* need to do anything!
|
||||
*/
|
||||
|
||||
#else
|
||||
#if defined(AFS_SGI_ENV)
|
||||
|
||||
#pragma weak xlsetpag = lsetpag
|
||||
|
||||
int
|
||||
lsetpag(void)
|
||||
{
|
||||
return (syscall(AFS_SETPAG));
|
||||
}
|
||||
|
||||
#else /* AFS_SGI_ENV */
|
||||
|
||||
int
|
||||
lsetpag(void)
|
||||
{
|
||||
int errcode, rval;
|
||||
|
||||
#ifdef AFS_LINUX20_ENV
|
||||
rval = proc_afs_syscall(AFSCALL_SETPAG,0,0,0,0,&errcode);
|
||||
|
||||
if(rval)
|
||||
errcode = syscall(AFS_SYSCALL, AFSCALL_SETPAG);
|
||||
#else
|
||||
errcode = syscall(AFS_SYSCALL, AFSCALL_SETPAG);
|
||||
#endif
|
||||
|
||||
return (errcode);
|
||||
}
|
||||
|
||||
#endif /* !AFS_SGI_ENV */
|
||||
#endif /* !AFS_AIX32_ENV */
|
Loading…
x
Reference in New Issue
Block a user