LEX="lex -l"
REGEX_OBJ="regex.o"
XCFLAGS="-traditional-cpp"
+ SHLIB_LINKER="${MT_CC} -dynamiclib"
;;
ppc_darwin_13)
LWP_OPTMZ="-O2"
REGEX_OBJ="regex.o"
XCFLAGS="-no-cpp-precomp"
+ SHLIB_LINKER="${MT_CC} -dynamiclib"
;;
ppc_darwin_14)
LWP_OPTMZ="-O2"
REGEX_OBJ="regex.o"
XCFLAGS="-no-cpp-precomp"
+ SHLIB_LINKER="${MT_CC} -dynamiclib"
;;
ppc_darwin_60)
REGEX_OBJ="regex.o"
XCFLAGS="-no-cpp-precomp"
TXLIBS="-lncurses"
+ SHLIB_LINKER="${MT_CC} -dynamiclib"
;;
ppc_darwin_70)
XCFLAGS="-no-cpp-precomp"
TXLIBS="-lncurses"
EXTRA_VLIBOBJS="fstab.o"
+ SHLIB_LINKER="${MT_CC} -dynamiclib"
;;
*_darwin_80)
XCFLAGS="-no-cpp-precomp"
TXLIBS="-lncurses"
EXTRA_VLIBOBJS="fstab.o"
+ SHLIB_LINKER="${MT_CC} -dynamiclib"
;;
ppc_linux*)
rmtsys.xdr.o \
rmtsys.cs.o \
afssyscalls.o \
- rmtsysnet.o
+ rmtsysnet.o \
+ glue.o \
+ setpag.o
PTSERVEROBJS = \
ptclient.o \
rmtsysnet.o: ${SYS}/rmtsysnet.c
${CCRULE}
+glue.o: ${SYS}/glue.c
+ ${CCRULE}
+
+setpag.o: ${SYS}/setpag.c
+ ${CCRULE}
+
clean:
$(RM) -f *.o *.a libafsauthent*
rmtsys.xdr.o \
rmtsys.cs.o \
afssyscalls.o \
- rmtsysnet.o
+ rmtsysnet.o \
+ glue.o \
+ setpag.o
PTSERVEROBJS = \
ptclient.o \
rmtsysnet.o: ${SYS}/rmtsysnet.c
${CCRULE}
+glue.o: ${SYS}/glue.c
+ ${CCRULE}
+
+setpag.o: ${SYS}/setpag.c
+ ${CCRULE}
+
clean:
$(RM) -f *.o *.a libafsauthent*
AFS_component_version_number.c
Makefile
+libafssetpag.*
pagsh
pagsh.krb
+picobj
rmtsys.cs.c
rmtsys.h
rmtsys.ss.c
+# 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.
#
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 \
${TOP_INCDIR}/afs/xfsattrs.h \
${TOP_LIBDIR}/afs.exp \
${TOP_LIBDIR}/libsys.a \
+ ${TOP_LIBDIR}/${LIBAFSSETPAG} \
${KERNELDIR}/afs \
${KERNELDIR}/afs/xfsattrs.h \
${UKERNELDIR}/afs \
$(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
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
$(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* ) \
install: \
${DESTDIR}${libdir}/afs/libsys.a \
+ ${DESTDIR}${libdir}/${LIBAFSSETPAG} \
${DESTDIR}${sbindir}/rmtsysd \
${DESTDIR}${includedir}/afs/afssyscalls.h \
${DESTDIR}${bindir}/pagsh \
${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 $? $@
dest: \
${DEST}/lib/afs/libsys.a \
+ ${TOP_LIBDIR}/${LIBAFSSETPAG} \
${DEST}/etc/rmtsysd \
${DEST}/bin/pagsh \
${DEST}/bin/pagsh.krb \
$(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
--- /dev/null
+# 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:
+ *;
+};
#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
#endif /* notdef */
int
-lsetpag(void)
-{
- return (syscall(AFS_SETPAG));
-}
-
-int
lpioctl(char *path, int cmd, char *cmarg, int follow)
{
return (syscall(AFS_PIOCTL, path, cmd, cmarg, follow));
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)
#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,
--- /dev/null
+/*
+ * 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
--- /dev/null
+/*
+ * 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 */