Update the context patch with fixes from Peter Bergner
This commit is contained in:
parent
91de02f8db
commit
ba877e7805
@ -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_ppc32_sysv_elf_gas.S.orig 2013-02-11 14:03:46.631005713 -0600
|
||||||
--- 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_ppc32_sysv_elf_gas.S 2013-02-11 14:06:52.704815403 -0600
|
||||||
+++ boost_1_53_0/libs/context/src/asm/make_ppc64_sysv_elf_gas.S 2013-02-11 19:14:45.179845740 +0100
|
@@ -78,7 +78,7 @@
|
||||||
@@ -89,7 +89,7 @@ make_fcontext:
|
|
||||||
.quad .make_fcontext,.TOC.@tocbase,0
|
# call align_stack, R3 contains address at 16 byte boundary after return
|
||||||
.previous
|
# == pointer to fcontext_t and address of context stack
|
||||||
.size make_fcontext,24
|
- rlwinm %r3, %r3, 0, 0, 27
|
||||||
-.type .make_fcontext,@function
|
+ clrrwi %r3, %r3, 4
|
||||||
+.type make_fcontext,@function
|
|
||||||
.globl .make_fcontext
|
stw %r0, 92(%r3) # save address of context stack (base) in fcontext_t
|
||||||
.make_fcontext:
|
stw %r4, 96(%r3) # save context stack size in fcontext_t
|
||||||
mflr %r6 # save return address into R6
|
@@ -87,12 +87,10 @@
|
||||||
@@ -99,13 +99,13 @@ make_fcontext:
|
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
|
# call align_stack, R3 contains address at 16 byte boundary after return
|
||||||
# == pointer to fcontext_t and address of context stack
|
# == pointer to fcontext_t and address of context stack
|
||||||
- rlwinm %r3, %r3, 0, 0, 59
|
- 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 %r0, 184(%r3) # save address of context stack (base) in fcontext_t
|
||||||
std %r4, 192(%r3) # save context stack size 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
|
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)
|
- 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
|
std %r0, 152(%r3) # save the stack base
|
||||||
|
|
||||||
mflr %r0 # load LR
|
- mflr %r0 # load LR
|
||||||
@@ -128,5 +128,6 @@ finish:
|
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
|
stwu %r1, -32(%r1) # allocate stack space, SP % 16 == 0
|
||||||
|
|
||||||
li %r3, 0 # set return value to zero
|
li %r3, 0 # set return value to zero
|
||||||
- bl _exit@plt # exit application
|
- bl _exit@plt # exit application
|
||||||
+ bl _exit # 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
|
.size .make_fcontext, .-.make_fcontext
|
||||||
|
|
||||||
Diff finished. Mon Feb 11 19:15:05 2013
|
|
||||||
|
Loading…
Reference in New Issue
Block a user