diff options
Diffstat (limited to 'sysdeps/unix/sysv/linux/sparc/sparc32/__sigtrampoline.S')
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc32/__sigtrampoline.S | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/__sigtrampoline.S b/sysdeps/unix/sysv/linux/sparc/sparc32/__sigtrampoline.S index a639511f3e..8e88a3ff04 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/__sigtrampoline.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/__sigtrampoline.S @@ -74,24 +74,19 @@ ENTRY(____sparc_signal_trampoline) 1: #ifdef PIC /* Save return address */ - mov %o7,%o4 -___sxx: - call ___syy - nop -___syy: - sethi %hi(_GLOBAL_OFFSET_TABLE_-(___sxx-.)),%o5 - or %o5,%lo(_GLOBAL_OFFSET_TABLE_-(___sxx-.)),%o5 - add %o7,%o5,%o5 + mov %o7,%o5 +11: call 12f + sethi %hi(_GLOBAL_OFFSET_TABLE_-(11b-.)),%o4 +12: or %o5,%lo(_GLOBAL_OFFSET_TABLE_-(11b-.)),%o4 + add %o7,%o4,%o4 /* restore return address */ - mov %o4,%o7 - mov %o5,%o4 + mov %o5,%o7 /* o4 has the GOT pointer */ #endif sethi %hi(C_SYMBOL_NAME(____sig_table)),%o5 or %o5,%lo(C_SYMBOL_NAME(____sig_table)),%o5 #ifdef PIC - add %o5,%o4,%o4 - ld [%o4],%o5 + ld [%o4+%o5], %o5 #endif sll %o0,2,%o4 add %o5,%o4,%o4 @@ -141,3 +136,5 @@ ___syy: /* if we return, sysreturn failed */ mov SYS_ify(exit),%g1 t 0x10 + +END(____sparc_signal_trampoline) |