OSDN Git Service

2004-06-09 Jeff Johnston <jjohnstn@redhat.com>
authorjjohnstn <jjohnstn>
Wed, 9 Jun 2004 20:43:42 +0000 (20:43 +0000)
committerjjohnstn <jjohnstn>
Wed, 9 Jun 2004 20:43:42 +0000 (20:43 +0000)
        * libc/sys/linux/Makefile.am: Change siglist.inc to be generated
        from /usr/include/asm/signal.h instead of kernel sources.  Also
        default max to 32 if not found in header file.
        * libc/sys/linux/Makefile.in: Regenerated.
        * libc/sys/linux/machine/i386/socketcall.h: Fix for Fedora Core 2
        systems where __syscall_return is not defined.
        * libc/sys/linux/machine/i386/syscall.h: Change for Fedora Core 2
        systems to use syscall() function instead of assembler interrupt.

newlib/ChangeLog
newlib/libc/sys/linux/Makefile.am
newlib/libc/sys/linux/Makefile.in
newlib/libc/sys/linux/machine/i386/socketcall.h
newlib/libc/sys/linux/machine/i386/syscall.h

index 5377f63..c23c73e 100644 (file)
@@ -1,3 +1,14 @@
+2004-06-09  Jeff Johnston  <jjohnstn@redhat.com>
+
+       * libc/sys/linux/Makefile.am: Change siglist.inc to be generated
+       from /usr/include/asm/signal.h instead of kernel sources.  Also
+       default max to 32 if not found in header file.
+       * libc/sys/linux/Makefile.in: Regenerated.
+       * libc/sys/linux/machine/i386/socketcall.h: Fix for Fedora Core 2
+       systems where __syscall_return is not defined.
+       * libc/sys/linux/machine/i386/syscall.h: Change for Fedora Core 2
+       systems to use syscall() function instead of assembler interrupt.
+
 2004-06-09  Toralf Lund  <toralf@procaptura.com>
 
        * libc/sys/arm/setjmp.S, libc/sys/arm/access.c: Move
index 1579368..56842ce 100644 (file)
@@ -166,7 +166,7 @@ endif
 
 # This will handle both /usr/src/linux-2.4/include/asm/signal.h (in Red Hat Linux 7.1)
 # and also /usr/src/linux/include/asm/signal.h in older versions of Red Hat Linux
-SIGNAL_H = /usr/src/$(shell ls /usr/src/ | grep ^linux | head -n 1)/include/asm/signal.h
+SIGNAL_H = /usr/include/asm/signal.h
 
 liblinux_la_LDFLAGS = -Xcompiler -nostdlib
 
@@ -230,7 +230,8 @@ machine/crt0.o: ; @true
 sig.$(oext):   siglist.inc
 
 siglist.inc:
-               $(AWK) '/#define.SIG.*[1-9][0-9]*/ { n[$$3] = $$2 } \
+               $(AWK) '{ max = 32 } \
+                 /#define.SIG.*[1-9][0-9]*/ { n[$$3] = $$2 } \
                  /#define.NSIG.*[1-9][0-9]*/ { max = $$3 } \
                  /#define.SIGUNUSED/ \
                    { for (i = 0; i <= max; i++) print "\"" n[i] "\"," }' \
index 5b548c7..3f110fa 100644 (file)
@@ -127,7 +127,7 @@ ELIX_4_OBJS =       getlogin.$(oext)        getpwnam.$(oext)        getpwuid.$(oext)        stack.$(oe
 
 # This will handle both /usr/src/linux-2.4/include/asm/signal.h (in Red Hat Linux 7.1)
 # and also /usr/src/linux/include/asm/signal.h in older versions of Red Hat Linux
-SIGNAL_H = /usr/src/$(shell ls /usr/src/ | grep ^linux | head -n 1)/include/asm/signal.h
+SIGNAL_H = /usr/include/asm/signal.h
 
 liblinux_la_LDFLAGS = -Xcompiler -nostdlib
 
@@ -590,7 +590,8 @@ machine/crt0.o: ; @true
 sig.$(oext):   siglist.inc
 
 siglist.inc:
-               $(AWK) '/#define.SIG.*[1-9][0-9]*/ { n[$$3] = $$2 } \
+               $(AWK) '{ max = 32 } \
+                 /#define.SIG.*[1-9][0-9]*/ { n[$$3] = $$2 } \
                  /#define.NSIG.*[1-9][0-9]*/ { max = $$3 } \
                  /#define.SIGUNUSED/ \
                    { for (i = 0; i <= max; i++) print "\"" n[i] "\"," }' \
index 0790876..afb1e58 100644 (file)
  * PIC uses %ebx, so we need to save it during system calls
  */
 
+#ifdef __syscall_return
+
+#define __sockcall_base(type, name) \
+{ \
+long __res; \
+__asm__ volatile ("push %%ebx; movl %2,%%ebx; lea 8(%%ebp),%%ecx; int $0x80; pop %%ebx" \
+       : "=a" (__res) \
+       : "0" (__NR_socketcall),"r" (SOCK_##name)); \
+__syscall_return(type,__res); \
+}
+
+#else /* !defined(__syscall_return) */
+
+/* FIXME: we need to rewrite this for a vsyscall system.  */
+
+#define __syscall_return(type, res) \
+do { \ 
+  if ((unsigned long)(res) >= (unsigned long)(-125)) { \
+    errno = -(res); \
+    res = -1; \
+  } \
+  return (type) (res); \
+} while (0)
+
 #define __sockcall_base(type, name) \
 { \
 long __res; \
@@ -24,6 +48,8 @@ __asm__ volatile ("push %%ebx; movl %2,%%ebx; lea 8(%%ebp),%%ecx; int $0x80; pop
 __syscall_return(type,__res); \
 }
 
+#endif /* !defined(__syscall_return) */
+
 #undef _sockcall1
 #define _sockcall1(type,name,type1,arg1) \
 type __libc_##name(type1 arg1) \
index 380f1bc..2dbb84f 100644 (file)
@@ -8,6 +8,7 @@
 #include <machine/weakalias.h>
 #include <sys/errno.h>
 #include <asm/unistd.h>
+#include <unistd.h>
 
 
 /*
@@ -23,6 +24,8 @@
  * PIC uses %ebx, so we need to save it during system calls
  */
 
+#ifdef __syscall_return
+
 #undef __inline_syscall0
 #define __inline_syscall0(name,ret) \
 __asm__ volatile ("int $0x80" \
@@ -77,11 +80,6 @@ __inline_syscall0(name,__res) \
 __syscall_return(type,__res); \
 }
 
-#undef _syscall0
-#define _syscall0(type,name) \
-_syscall0_base(type,name) \
-weak_alias(__libc_##name,name);
-
 #undef _syscall1_base
 #define _syscall1_base(type,name,type1,arg1) \
 type __libc_##name (type1 arg1) \
@@ -91,11 +89,6 @@ __inline_syscall1(name,__res,arg1) \
 __syscall_return(type,__res); \
 }
 
-#undef _syscall1
-#define _syscall1(type,name,type1,arg1) \
-_syscall1_base(type,name,type1,arg1) \
-weak_alias(__libc_##name,name);
-
 #undef _syscall2_base
 #define _syscall2_base(type,name,type1,arg1,type2,arg2) \
 type __libc_##name (type1 arg1,type2 arg2) \
@@ -105,11 +98,6 @@ __inline_syscall2(name,__res,arg1,arg2) \
 __syscall_return(type,__res); \
 }
 
-#undef _syscall2
-#define _syscall2(type,name,type1,arg1,type2,arg2) \
-_syscall2_base(type,name,type1,arg1,type2,arg2) \
-weak_alias(__libc_##name,name);
-
 #undef _syscall3_base
 #define _syscall3_base(type,name,type1,arg1,type2,arg2,type3,arg3) \
 type __libc_##name (type1 arg1,type2 arg2,type3 arg3) \
@@ -119,11 +107,6 @@ __inline_syscall3(name,__res,arg1,arg2,arg3) \
 __syscall_return(type,__res); \
 }
 
-#undef _syscall3
-#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
-_syscall3_base(type,name,type1,arg1,type2,arg2,type3,arg3) \
-weak_alias(__libc_##name,name);
-
 #undef _syscall4_base
 #define _syscall4_base(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
 type __libc_##name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \
@@ -133,11 +116,6 @@ __inline_syscall4(name,__res,arg1,arg2,arg3,arg4) \
 __syscall_return(type,__res); \
 }
 
-#undef _syscall4
-#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
-_syscall4_base(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
-weak_alias(__libc_##name,name);
-
 #undef _syscall5_base
 #define _syscall5_base(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
           type5,arg5) \
@@ -148,12 +126,6 @@ __inline_syscall5(name,__res,arg1,arg2,arg3,arg4,arg5) \
 __syscall_return(type,__res); \
 } \
 
-#undef _syscall5
-#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
-          type5,arg5) \
-_syscall5_base(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \
-weak_alias(__libc_##name,name);
-
 #undef _syscall6_base
 #define _syscall6_base(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
           type5,arg5,type6,arg6) \
@@ -164,6 +136,90 @@ __inline_syscall6(name,__res,arg1,arg2,arg3,arg4,arg5,arg6) \
 __syscall_return(type,__res); \
 }
 
+#else /* !__syscall_return */
+
+#undef _syscall0_base
+#define _syscall0_base(type,name) \
+type __libc_##name (void) \
+{ \
+  return (type)syscall (__NR_##name); \
+}
+
+#undef _syscall1_base
+#define _syscall1_base(type,name,type1,arg1) \
+type __libc_##name (type1 arg1) \
+{ \
+  return (type)syscall (__NR_##name, arg1); \
+}
+
+#undef _syscall2_base
+#define _syscall2_base(type,name,type1,arg1,type2,arg2) \
+type __libc_##name (type1 arg1, type2 arg2) \
+{ \
+  return (type)syscall (__NR_##name, arg1, arg2); \
+}
+
+#undef _syscall3_base
+#define _syscall3_base(type,name,type1,arg1,type2,arg2,type3,arg3) \
+type __libc_##name (type1 arg1, type2 arg2, type3 arg3) \
+{ \
+  return (type)syscall (__NR_##name, arg1, arg2, arg3); \
+}
+
+#undef _syscall4_base
+#define _syscall4_base(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
+type __libc_##name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \
+{ \
+  return (type)syscall (__NR_##name, arg1, arg2, arg3, arg4); \
+}
+
+#undef _syscall5_base
+#define _syscall5_base(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \
+type __libc_##name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \
+{ \
+  return (type)syscall (__NR_##name, arg1, arg2, arg3, arg4, arg5); \
+}
+
+#undef _syscall6_base
+#define _syscall6_base(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5,type6,arg6) \
+type __libc_##name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5,type6 arg6) \
+{ \
+  return (type)syscall (__NR_##name, arg1, arg2, arg3, arg4, arg5, arg6); \
+}
+
+#endif /* !__syscall_return */
+
+#undef _syscall0
+#define _syscall0(type,name) \
+_syscall0_base(type,name) \
+weak_alias(__libc_##name,name);
+
+#undef _syscall1
+#define _syscall1(type,name,type1,arg1) \
+_syscall1_base(type,name,type1,arg1) \
+weak_alias(__libc_##name,name);
+
+#undef _syscall2
+#define _syscall2(type,name,type1,arg1,type2,arg2) \
+_syscall2_base(type,name,type1,arg1,type2,arg2) \
+weak_alias(__libc_##name,name);
+
+#undef _syscall3
+#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
+_syscall3_base(type,name,type1,arg1,type2,arg2,type3,arg3) \
+weak_alias(__libc_##name,name);
+
+#undef _syscall4
+#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
+_syscall4_base(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
+weak_alias(__libc_##name,name);
+
+#undef _syscall5
+#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
+          type5,arg5) \
+_syscall5_base(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \
+weak_alias(__libc_##name,name);
+
 #undef _syscall6
 #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
           type5,arg5,type6,arg6) \