Skip to content

Commit

Permalink
Bug fixes for ____longjmp_chk on sparc.
Browse files Browse the repository at this point in the history
  • Loading branch information
David S. Miller committed Aug 22, 2011
1 parent 304c6e0 commit 25ad0df
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 5 deletions.
7 changes: 7 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
2011-08-22 David S. Miller <davem@davemloft.net>

* sysdeps/unix/sysv/linux/sparc/sparc32/____longjmp_chk.S: Fix
sigaltstack check, add missing cfi directives.
* sysdeps/unix/sysv/linux/sparc/sparc64/____longjmp_chk.S: Add
missing cfi directives, and sigaltstack handling.

2011-08-16 Andreas Schwab <schwab@redhat.com>

[BZ #11724]
Expand Down
11 changes: 8 additions & 3 deletions sysdeps/unix/sysv/linux/sparc/sparc32/____longjmp_chk.S
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,14 @@ ENTRY (____longjmp_chk)
nop

save %sp, -80, %sp
cfi_remember_state
cfi_def_cfa_register(%fp)
cfi_window_save
cfi_register(%o7, %i7)

clr %o0
add %sp, 64, %o1
set __NR_sigaltstack, %g1
LOADSYSCALL(sigaltstack)
ta 0x10
bcs .Lok
ld [%sp + 64 + 4], %o2
Expand All @@ -54,8 +58,8 @@ ENTRY (____longjmp_chk)

ld [%sp + 64 + 8], %o1
add %o0, %o1, %o0
sub %o0, %g3, %o0
cmp %o1, %o0
sub %o0, %g5, %o0
cmp %o0, %o1
bgeu .Lok
nop

Expand All @@ -76,6 +80,7 @@ ENTRY (____longjmp_chk)

.Lok:
restore
cfi_restore_state

.Lok_norestore:
ld ENV(o0,JB_FP), %g3 /* Cache target FP in register %g3. */
Expand Down
26 changes: 24 additions & 2 deletions sysdeps/unix/sysv/linux/sparc/sparc64/____longjmp_chk.S
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,29 @@ ENTRY (____longjmp_chk)
bleu,pt %xcc, .Lok
nop

save %sp, -128, %sp
save %sp, -208, %sp
cfi_remember_state
cfi_def_cfa_register(%fp)
cfi_window_save
cfi_register(%o7, %i7)
add %fp, 2023, %o1
clr %o0
LOADSYSCALL(sigaltstack)
ta 0x6d
bcs,pn %xcc, .Lok2
lduw [%fp + 2031], %l2
andcc %l2, 0x1, %g0
be,pn %xcc, .Lfail
ldx [%fp + 2023], %l0
ldx [%fp + 2039], %l1
sub %l0, STACK_BIAS, %l0
add %l0, %l1, %l0
sub %l0, %i2, %l0
cmp %l0, %l1
bgeu,pt %xcc, .Lok2
nop

.Lfail:
#ifdef PIC
1: call 2f
sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
Expand All @@ -56,7 +77,8 @@ ENTRY (____longjmp_chk)
call HIDDEN_JUMPTARGET(__fortify_fail)
nop

restore
.Lok2: restore
cfi_restore_state

.Lok:
/* Modify the context with the value we want to return. */
Expand Down

0 comments on commit 25ad0df

Please sign in to comment.