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