From ba877e780500e5182b7d2122e2ee3c10b5513ea7 Mon Sep 17 00:00:00 2001 From: Petr Machata Date: Feb 11 2013 22:01:15 +0000 Subject: Update the context patch with fixes from Peter Bergner --- diff --git a/boost-1.53.0-context.patch b/boost-1.53.0-context.patch index c7ba24c..2f80f07 100644 --- a/boost-1.53.0-context.patch +++ b/boost-1.53.0-context.patch @@ -1,38 +1,66 @@ -diff -up boost_1_53_0/libs/context/src/asm/make_ppc64_sysv_elf_gas.S\~ boost_1_53_0/libs/context/src/asm/make_ppc64_sysv_elf_gas.S ---- boost_1_53_0/libs/context/src/asm/make_ppc64_sysv_elf_gas.S~ 2012-11-30 08:38:52.000000000 +0100 -+++ boost_1_53_0/libs/context/src/asm/make_ppc64_sysv_elf_gas.S 2013-02-11 19:14:45.179845740 +0100 -@@ -89,7 +89,7 @@ make_fcontext: - .quad .make_fcontext,.TOC.@tocbase,0 - .previous - .size make_fcontext,24 --.type .make_fcontext,@function -+.type make_fcontext,@function - .globl .make_fcontext - .make_fcontext: - mflr %r6 # save return address into R6 -@@ -99,13 +99,13 @@ make_fcontext: +--- 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 -+ rldicr %r3, %r3, 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) -+ addi %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 -@@ -128,5 +128,6 @@ finish: +- 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 # padding for R_PPC64_REL24 ++ nop # nop is required by the linker ++ .long 0 # We should never get here, so SIGILL if we do .size .make_fcontext, .-.make_fcontext - -Diff finished. Mon Feb 11 19:15:05 2013