Blob Blame History Raw
--- 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
@@ -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