PATCH: Add sys/personality (Re: Personality)
H. J. Lu
hjl@lucon.org
Tue Jul 16 09:07:00 GMT 2002
On Tue, Jul 16, 2002 at 12:36:32PM +0200, Ralf Baechle wrote:
> On Tue, Jul 16, 2002 at 10:34:58AM +0200, Carsten Langgaard wrote:
>
> > The include/linux/personality.h file has changed between the 2.4.3 and
> > the 2.4.18 kernel.
> > Now there is a define of personality (#define personality(pers) (pers &
> > PER_MASK), but that breaks things for the users, if they include this
> > file.
> > The user wishes to call the glibc personality function (which do the
> > syscall), and not use the above definition.
> >
> > So I guess we need a "#ifdef __KERNEL__" around some of the code in
> > include/linux/personality.h (at least around the define of personality),
> > which then has to go into the glibc kernel header files.
>
> The general policy about such problems is to not use kernel include files
> from user applications directly. Hjl - maybe time for <sys/personality.h>?
>
Here is a patch.
H.J.
-------------- next part --------------
2002-07-16 H.J. Lu <hjl@gnu.org>
* sysdeps/unix/sysv/linux/Makefile (sysdep_headers): Add
sys/personality.h.
* sysdeps/unix/sysv/linux/sys/personality.h: New.
--- sysdeps/unix/sysv/linux/Makefile.per Mon Jun 10 11:02:09 2002
+++ sysdeps/unix/sysv/linux/Makefile Tue Jul 16 08:54:45 2002
@@ -20,7 +20,7 @@ sysdep_headers += sys/mount.h sys/acct.h
sys/kd.h sys/soundcard.h sys/vt.h \
sys/quota.h sys/fsuid.h \
scsi/sg.h scsi/scsi.h scsi/scsi_ioctl.h sys/pci.h \
- sys/ultrasound.h sys/raw.h
+ sys/ultrasound.h sys/raw.h sys/personality.h
install-others += $(inst_includedir)/bits/syscall.h
--- sysdeps/unix/sysv/linux/sys/personality.h.per Tue Jul 16 08:57:17 2002
+++ sysdeps/unix/sysv/linux/sys/personality.h Tue Jul 16 09:03:28 2002
@@ -0,0 +1,75 @@
+/* Copyright (C) 2002 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#ifndef _SYS_PERSONALITY_H
+#define _SYS_PERSONALITY_H 1
+
+#include <features.h>
+
+/*
+ * Flags for bug emulation.
+ *
+ * These occupy the top three bytes.
+ */
+enum
+ {
+ MMAP_PAGE_ZERO = 0x0100000,
+ ADDR_LIMIT_32BIT = 0x0800000,
+ SHORT_INODE = 0x1000000,
+ WHOLE_SECONDS = 0x2000000,
+ STICKY_TIMEOUTS = 0x4000000,
+ };
+
+/*
+ * Personality types.
+ *
+ * These go in the low byte. Avoid using the top bit, it will
+ * conflict with error returns.
+ */
+enum
+ {
+ PER_LINUX = 0x0000,
+ PER_LINUX_32BIT = 0x0000 | ADDR_LIMIT_32BIT,
+ PER_SVR4 = 0x0001 | STICKY_TIMEOUTS | MMAP_PAGE_ZERO,
+ PER_SVR3 = 0x0002 | STICKY_TIMEOUTS | SHORT_INODE,
+ PER_SCOSVR3 = 0x0003 | STICKY_TIMEOUTS |
+ WHOLE_SECONDS | SHORT_INODE,
+ PER_OSR5 = 0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS,
+ PER_WYSEV386 = 0x0004 | STICKY_TIMEOUTS | SHORT_INODE,
+ PER_ISCR4 = 0x0005 | STICKY_TIMEOUTS,
+ PER_BSD = 0x0006,
+ PER_SUNOS = 0x0006 | STICKY_TIMEOUTS,
+ PER_XENIX = 0x0007 | STICKY_TIMEOUTS | SHORT_INODE,
+ PER_LINUX32 = 0x0008,
+ PER_IRIX32 = 0x0009 | STICKY_TIMEOUTS,/* IRIX5 32-bit */
+ PER_IRIXN32 = 0x000a | STICKY_TIMEOUTS,/* IRIX6 new 32-bit */
+ PER_IRIX64 = 0x000b | STICKY_TIMEOUTS,/* IRIX6 64-bit */
+ PER_RISCOS = 0x000c,
+ PER_SOLARIS = 0x000d | STICKY_TIMEOUTS,
+ PER_UW7 = 0x000e | STICKY_TIMEOUTS | MMAP_PAGE_ZERO,
+ PER_MASK = 0x00ff,
+ };
+
+__BEGIN_DECLS
+
+/* Set different ABIs (personalities). */
+extern int personality (int);
+
+__END_DECLS
+
+#endif /* sys/personality.h */
More information about the Libc-alpha
mailing list