diff options
Diffstat (limited to 'sysdeps/unix/sysv/linux/sparc')
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc32/setcontext.S | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h | 16 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc64/brk.S | 6 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h | 15 |
4 files changed, 29 insertions, 10 deletions
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/setcontext.S b/sysdeps/unix/sysv/linux/sparc/sparc32/setcontext.S index 33e40ac65a..a38cd30c02 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/setcontext.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/setcontext.S @@ -111,7 +111,7 @@ ENTRY(__start_context) mov %g1, %o0 /* If this returns (which can happen if the syscall fails) we'll exit the program with the return error value (-1). */ -1: call exit +1: call HIDDEN_JUMPTARGET(exit) nop /* The 'exit' call should never return. In case it does cause the process to terminate. */ diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h index c808a97fc5..3cb0a48c95 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h @@ -1,4 +1,5 @@ -/* Copyright (C) 1997, 2002, 2003, 2004, 2006 Free Software Foundation, Inc. +/* Copyright (C) 1997, 2002, 2003, 2004, 2006, 2008 + Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Miguel de Icaza <miguel@gnu.ai.mit.edu>, January 1997. @@ -89,6 +90,13 @@ ENTRY(name); \ #else /* __ASSEMBLER__ */ +#if defined SHARED && defined DO_VERSIONING && defined PIC \ + && !defined NO_HIDDEN && !defined NOT_IN_libc +# define CALL_ERRNO_LOCATION "call __GI___errno_location;" +#else +# define CALL_ERRNO_LOCATION "call __errno_location;" +#endif + #define __SYSCALL_STRING \ "ta 0x10;" \ "bcs 2f;" \ @@ -97,7 +105,7 @@ ENTRY(name); \ ".subsection 2;" \ "2:" \ "save %%sp, -192, %%sp;" \ - "call __errno_location;" \ + CALL_ERRNO_LOCATION \ " nop;" \ "st %%i0,[%%o0];" \ "ba 1b;" \ @@ -113,7 +121,7 @@ ENTRY(name); \ ".subsection 2;" \ "2:" \ "save %%sp, -192, %%sp;" \ - "call __errno_location;" \ + CALL_ERRNO_LOCATION \ " nop;" \ "st %%i0, [%%o0];" \ "ba 1b;" \ @@ -126,7 +134,7 @@ ENTRY(name); \ " sub %%g0, %%o0, %%o0;" \ "1:" -#define __SYSCALL_CLOBBERS "g2", "g3", "g4", "g5", "g6", \ +#define __SYSCALL_CLOBBERS \ "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", \ "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", \ "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23", \ diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S b/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S index 134ce789f7..ccc5589927 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S @@ -1,4 +1,4 @@ -/* Copyright (C) 1997 Free Software Foundation, Inc. +/* Copyright (C) 1997, 2008 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson <richard@gnu.ai.mit.edu>, 1997. @@ -86,7 +86,11 @@ ENTRY (__brk) #endif st %o0, [%g1] #else +#ifndef NOT_IN_libc + call HIDDEN_JUMPTARGET(__errno_location) +#else call __errno_location +#endif mov %o0,%l1 st %l1, [%o0] #endif diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h index f156f9241a..79fa13de75 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1997, 2000, 2002, 2003, 2004, 2006 +/* Copyright (C) 1997, 2000, 2002, 2003, 2004, 2006, 2008 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson <richard@gnu.ai.mit.edu>, 1997. @@ -106,12 +106,19 @@ ENTRY(name); \ #else /* __ASSEMBLER__ */ +#if defined SHARED && defined DO_VERSIONING && defined PIC \ + && !defined NO_HIDDEN && !defined NOT_IN_libc +# define CALL_ERRNO_LOCATION "call __GI___errno_location;" +#else +# define CALL_ERRNO_LOCATION "call __errno_location;" +#endif + #define __SYSCALL_STRING \ "ta 0x6d;" \ "bcc,pt %%xcc, 1f;" \ " nop;" \ "save %%sp, -192, %%sp;" \ - "call __errno_location;" \ + CALL_ERRNO_LOCATION \ " nop;" \ "st %%i0,[%%o0];" \ "restore %%g0, -1, %%o0;" \ @@ -122,7 +129,7 @@ ENTRY(name); \ "bcc,pt %%xcc, 1f;" \ " sub %%o1, 1, %%o1;" \ "save %%sp, -192, %%sp;" \ - "call __errno_location;" \ + CALL_ERRNO_LOCATION \ " mov -1, %%i1;" \ "st %%i0,[%%o0];" \ "restore %%g0, -1, %%o0;" \ @@ -135,7 +142,7 @@ ENTRY(name); \ " sub %%g0, %%o0, %%o0;" \ "1:" -#define __SYSCALL_CLOBBERS "g2", "g3", "g4", "g5", "g6", \ +#define __SYSCALL_CLOBBERS \ "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", \ "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", \ "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23", \ |