--- 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