diff options
Diffstat (limited to 'sysdeps/unix')
-rw-r--r-- | sysdeps/unix/alpha/sysdep.S | 3 | ||||
-rw-r--r-- | sysdeps/unix/i386/sysdep.S | 6 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/i386/sysdep.h | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc64/brk.S | 6 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc64/clone.S | 3 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h | 19 |
6 files changed, 12 insertions, 27 deletions
diff --git a/sysdeps/unix/alpha/sysdep.S b/sysdeps/unix/alpha/sysdep.S index d79c48a9bf..53fc454eb6 100644 --- a/sysdeps/unix/alpha/sysdep.S +++ b/sysdeps/unix/alpha/sysdep.S @@ -48,9 +48,6 @@ __syscall_error: .mask 0x4000001, -16 .prologue 1 - /* Store into the "real" variable. */ - stl v0, errno - /* Find our per-thread errno address */ jsr ra, __errno_location diff --git a/sysdeps/unix/i386/sysdep.S b/sysdeps/unix/i386/sysdep.S index b296bb707a..ff1fc0f431 100644 --- a/sysdeps/unix/i386/sysdep.S +++ b/sysdeps/unix/i386/sysdep.S @@ -39,8 +39,9 @@ syscall_error: notb: #endif #ifndef PIC +#ifndef _LIBC_REENTRANT movl %eax, C_SYMBOL_NAME(errno) -#ifdef _LIBC_REENTRANT +#else pushl %eax call __errno_location popl %ecx @@ -49,14 +50,13 @@ notb: #else /* The caller has pushed %ebx and then set it up to point to the GOT before calling us through the PLT. */ +#ifndef _LIBC_REENTRANT movl C_SYMBOL_NAME(errno@GOT)(%ebx), %ecx -#ifndef _LIBC_REENTRANT /* Pop %ebx value saved before jumping here. */ popl %ebx movl %eax, (%ecx) #else - movl %eax, (%ecx) pushl %eax call C_SYMBOL_NAME(__errno_location@PLT) popl %ecx diff --git a/sysdeps/unix/sysv/linux/i386/sysdep.h b/sysdeps/unix/sysv/linux/i386/sysdep.h index 4ebcc6c852..713bd44524 100644 --- a/sysdeps/unix/sysv/linux/i386/sysdep.h +++ b/sysdeps/unix/sysv/linux/i386/sysdep.h @@ -74,8 +74,6 @@ syscall_error: \ xorl %edx, %edx; \ addl $_GLOBAL_OFFSET_TABLE_+[.-0b], %ebx; \ subl %eax, %edx; \ - movl errno@GOT(%ebx), %ecx; \ - movl %edx, (%ecx); \ pushl %edx; \ call __errno_location@PLT; \ popl %ecx; \ diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S b/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S index abdd7e6604..333f9916f8 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S @@ -75,7 +75,9 @@ ENTRY(__brk) /* What a horrible way to die. */ .Lerr0: set ENOMEM, %o0 -.Lerr1: sethi %hi(errno), %g1 +.Lerr1: +#ifndef _LIBC_REENTRANT + sethi %hi(errno), %g1 or %g1, %lo(errno), %g1 #ifdef PIC ldx [%l7+%g1], %g1 @@ -83,7 +85,7 @@ ENTRY(__brk) #else st %o0, [%g4+%g1] #endif -#ifdef _LIBC_REENTRANT +#else call __errno_location mov %o0,%l1 st %l1, [%o0] diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S b/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S index a5cb1a4c4a..a16f9b7c9b 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S @@ -53,6 +53,7 @@ __libc_clone: ret restore 99: +#ifndef _LIBC_REENTRANT #ifdef PIC call 1f sethi %hi(_GLOBAL_OFFSET_TABLE_-(99b-.)), %l7 @@ -68,7 +69,7 @@ __libc_clone: set EINVAL, %i0 st %i0, [%g2+%lo(errno)] #endif -#ifdef _LIBC_REENTRANT +#else call __errno_location nop st %i0, [%o0] diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h index c880e4a2dc..1a3736201c 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h @@ -46,17 +46,7 @@ #ifdef PIC # ifdef _LIBC_REENTRANT # define SYSCALL_ERROR_HANDLER \ - .global C_SYMBOL_NAME(errno); \ - .type C_SYMBOL_NAME(errno),@object; \ save %sp,-160,%sp; \ - 101: call 102f; \ - sethi %hi(_GLOBAL_OFFSET_TABLE_-(101b-.)),%g2; \ - 102: or %g2,%lo(_GLOBAL_OFFSET_TABLE_-(101b-.)),%g2; \ - sethi %hi(errno),%i1; \ - add %g2,%o7,%l7; \ - or %i1,%lo(errno),%i1; \ - ldx [%l7+%i1],%g2; \ - st %i0,[%g2]; \ call __errno_location; \ nop; \ st %i0,[%o0]; \ @@ -76,17 +66,14 @@ or %o1,%lo(errno),%o1; \ mov %g3,%o7; \ ldx [%l7+%o1],%g2; \ - st %o0,[%g2] + st %o0,[%g2]; \ + retl; \ + sub %g0,1,%i0 # endif #else # ifdef _LIBC_REENTRANT # define SYSCALL_ERROR_HANDLER \ - .global C_SYMBOL_NAME(errno); \ - .type C_SYMBOL_NAME(errno),@object; \ save %sp,-160,%sp; \ - sethi %hi(errno),%g1; \ - or %g1,%lo(errno),%g1; \ - st %i0,[%g1+%g4]; \ call __errno_location; \ nop; \ st %i0,[%o0]; \ |