--- boost_1_53_0/libs/context/src/asm/make_ppc32_sysv_elf_gas.S.orig 2013-02-11 14:03:46.631005713 -0600
+++ boost_1_53_0/libs/context/src/asm/make_ppc32_sysv_elf_gas.S 2013-02-11 14:06:52.704815403 -0600
@@ -78,7 +78,7 @@
# call align_stack, R3 contains address at 16 byte boundary after return
# == pointer to fcontext_t and address of context stack
- rlwinm %r3, %r3, 0, 0, 27
+ clrrwi %r3, %r3, 4
stw %r0, 92(%r3) # save address of context stack (base) in fcontext_t
stw %r4, 96(%r3) # save context stack size in fcontext_t
@@ -87,12 +87,10 @@
subi %r0, %r3, 64 # reserve 64 bytes (linkage + parameter area), R4 % 16 == 0
stw %r0, 76(%r3) # save address in R3 as stack pointer for context function
- mflr %r0 # load LR
bl 1f # jump to label 1
1:
mflr %r4 # load LR into R4
addi %r4, %r4, finish - 1b # compute abs address of label finish
- mtlr %r0 # restore LR
stw %r4, 84(%r3) # save address of finish as return address for context function
# entered after context function returns
@@ -108,4 +106,5 @@
li %r3, 0 # exit code is zero
bl _exit@plt # exit application
+ .long 0 # We should never get here, so SIGILL if we do
.size make_fcontext, .-make_fcontext
--- boost_1_53_0/libs/context/src/asm/make_ppc64_sysv_elf_gas.S.orig 2013-02-11 14:03:43.726849715 -0600
+++ boost_1_53_0/libs/context/src/asm/make_ppc64_sysv_elf_gas.S 2013-02-11 14:22:48.202839078 -0600
@@ -99,21 +99,19 @@
# call align_stack, R3 contains address at 16 byte boundary after return
# == pointer to fcontext_t and address of context stack
- rlwinm %r3, %r3, 0, 0, 59
+ clrrdi %r3, %r3, 4
std %r0, 184(%r3) # save address of context stack (base) in fcontext_t
std %r4, 192(%r3) # save context stack size in fcontext_t
std %r5, 176(%r3) # save address of context function in fcontext_t
- subf %r0, %r3, 64 # 64 bytes on stack for parameter area (== 8 registers)
+ subi %r0, %r3, 64 # 64 bytes on stack for parameter area (== 8 registers)
std %r0, 152(%r3) # save the stack base
- mflr %r0 # load LR
bl 1f # jump to label 1
1:
mflr %r4 # load LR into R4
addi %r4, %r4, finish - 1b # compute abs address of label finish
- mtlr %r0 # restore LR
std %r4, 168(%r3) # save address of finish as return address for context function
# entered after context function returns
@@ -128,5 +126,7 @@
stwu %r1, -32(%r1) # allocate stack space, SP % 16 == 0
li %r3, 0 # set return value to zero
- bl _exit@plt # exit application
+ bl _exit # exit application
+ nop # nop is required by the linker
+ .long 0 # We should never get here, so SIGILL if we do
.size .make_fcontext, .-.make_fcontext