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