Browse Source

Bring sh and i386 longjmp implementations into sync

Eric Andersen 24 years ago
parent
commit
0adaa60b86

+ 2 - 0
libc/sysdeps/linux/i386/longjmp.c

@@ -21,7 +21,9 @@
 #include <signal.h>
 #include <signal.h>
 
 
 
 
+#if 0
 extern void _longjmp_unwind (jmp_buf env, int val);
 extern void _longjmp_unwind (jmp_buf env, int val);
+#endif
 extern void __longjmp(__jmp_buf __env, int __val) 
 extern void __longjmp(__jmp_buf __env, int __val) 
 	 __attribute__ ((__noreturn__));
 	 __attribute__ ((__noreturn__));
 
 

+ 0 - 29
libc/sysdeps/linux/sh/jmp-unwind.c

@@ -1,29 +0,0 @@
-/* _longjmp_unwind -- Clean up stack frames unwound by longjmp.  Stub version.
-   Copyright (C) 1995, 1997 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 Library General Public License as
-   published by the Free Software Foundation; either version 2 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with the GNU C Library; see the file COPYING.LIB.  If not,
-   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
-
-#include <setjmp.h>
-
-void
-_longjmp_unwind (jmp_buf env, int val)
-{
-
-  /* This function can perform any cleanups necessary to safely unwind the
-     stack frames around the current context which ENV unwinds past.  */
-
-}

+ 12 - 17
libc/sysdeps/linux/sh/longjmp.c

@@ -21,14 +21,22 @@
 #include <signal.h>
 #include <signal.h>
 
 
 
 
+#if 0
+extern void _longjmp_unwind (jmp_buf env, int val);
+#endif
+extern void __longjmp(__jmp_buf __env, int __val) 
+	 __attribute__ ((__noreturn__));
+
 /* Set the signal mask to the one specified in ENV, and jump
 /* Set the signal mask to the one specified in ENV, and jump
    to the position specified in ENV, causing the setjmp
    to the position specified in ENV, causing the setjmp
    call there to return VAL, or 1 if VAL is 0.  */
    call there to return VAL, or 1 if VAL is 0.  */
 void
 void
 __uClibc_siglongjmp (sigjmp_buf env, int val)
 __uClibc_siglongjmp (sigjmp_buf env, int val)
 {
 {
+#if 0
   /* Perform any cleanups needed by the frames being unwound.  */
   /* Perform any cleanups needed by the frames being unwound.  */
   _longjmp_unwind (env, val);
   _longjmp_unwind (env, val);
+#endif
 
 
   if (env[0].__mask_was_saved)
   if (env[0].__mask_was_saved)
     /* Restore the saved signal mask.  */
     /* Restore the saved signal mask.  */
@@ -39,20 +47,7 @@ __uClibc_siglongjmp (sigjmp_buf env, int val)
   __longjmp (env[0].__jmpbuf, val ?: 1);
   __longjmp (env[0].__jmpbuf, val ?: 1);
 }
 }
 
 
-//strong_alias (__uClibc_siglongjmp, __uClibc_longjmp)
+__asm__(".weak longjmp; longjmp = __uClibc_siglongjmp");
-
+__asm__(".weak _longjmp; _longjmp = __uClibc_siglongjmp");
-//_weak_alias (__uClibc_siglongjmp, _longjmp)
+__asm__(".weak siglongjmp; siglongjmp = __uClibc_siglongjmp");
-asm(".weak _longjmp");
+__asm__(".weak __sigprocmask; __sigprocmask = sigprocmask");
-asm("_longjmp = __uClibc_siglongjmp");
-
-//weak_alias (__uClibc_siglongjmp, longjmp)
-asm(".weak longjmp");
-asm("longjmp = __uClibc_siglongjmp");
-
-//weak_alias (__uClibc_siglongjmp, siglongjmp)
-asm(".weak siglongjmp");
-asm("siglongjmp = __uClibc_siglongjmp");
-
-asm(".weak __sigprocmask");
-asm("__sigprocmask = sigprocmask");
-