diff --git a/CMakeModules/download_boost.cmake b/CMakeModules/download_boost.cmake index 9d87d5cb1b..dd72e7c565 100644 --- a/CMakeModules/download_boost.cmake +++ b/CMakeModules/download_boost.cmake @@ -201,6 +201,16 @@ ExternalProject_Add( boost COMMAND bzr add libs/context/src/asm/make_x86_64_ms_pe_gas.S COMMAND bzr add libs/context/src/asm/jump_x86_64_ms_pe_gas.S + COMMAND bzr patch -p0 "${PROJECT_SOURCE_DIR}/patches/patch_macosx_context_ppc_v2.patch" #https://svn.boost.org/trac/boost/ticket/8266 + COMMAND bzr add libs/context/build/Jamfile.v2 + COMMAND bzr add libs/context/build/architecture.jam + COMMAND bzr add libs/context/src/asm/jump_combined_sysv_macho_gas.S + COMMAND bzr add libs/context/src/asm/jump_ppc32_sysv_macho_gas.S + COMMAND bzr add libs/context/src/asm/jump_ppc64_sysv_macho_gas.S + COMMAND bzr add libs/context/src/asm/make_combined_sysv_macho_gas.S + COMMAND bzr add libs/context/src/asm/make_ppc32_sysv_macho_gas.S + COMMAND bzr add libs/context/src/asm/make_ppc64_sysv_macho_gas.S + # [Mis-]use this step to erase all the boost headers and libraries before # replacing them below. UPDATE_COMMAND ${CMAKE_COMMAND} -E remove_directory "${BOOST_ROOT}" diff --git a/patches/patch_macosx_context_ppc_v2.patch b/patches/patch_macosx_context_ppc_v2.patch new file mode 100644 index 0000000000..e4e795608a --- /dev/null +++ b/patches/patch_macosx_context_ppc_v2.patch @@ -0,0 +1,782 @@ +=== modified file 'libs/context/build/Jamfile.v2' +--- libs/context/build/Jamfile.v2 2013-12-30 19:16:18 +0000 ++++ libs/context/build/Jamfile.v2 2014-01-03 18:10:41 +0000 +@@ -188,6 +188,15 @@ + elf + ; + ++alias asm_context_sources ++ : [ make asm/make_ppc32_sysv_macho_gas.o : asm/make_ppc32_sysv_macho_gas.S : @gas ] ++ [ make asm/jump_ppc32_sysv_macho_gas.o : asm/jump_ppc32_sysv_macho_gas.S : @gas ] ++ : 32 ++ power ++ mach-o ++ darwin ++ ; ++ + # POWERPC_64 + alias asm_context_sources + : asm/make_ppc64_sysv_elf_gas.S +@@ -215,6 +224,15 @@ + elf + ; + ++alias asm_context_sources ++ : [ make asm/make_ppc64_sysv_macho_gas.o : asm/make_ppc64_sysv_macho_gas.S : @gas ] ++ [ make asm/jump_ppc64_sysv_macho_gas.o : asm/jump_ppc64_sysv_macho_gas.S : @gas ] ++ : 64 ++ power ++ mach-o ++ darwin ++ ; ++ + # SPARC + alias asm_context_sources + : asm/make_sparc_sysv_elf_gas.S +@@ -414,6 +432,25 @@ + ; + + alias asm_context_sources ++ : asm/make_i386_x86_64_sysv_macho_gas.S ++ asm/jump_i386_x86_64_sysv_macho_gas.S ++ : 32_64 ++ x86 ++ mach-o ++ darwin ++ darwin ++ ; ++ ++alias asm_context_sources ++ : [ make asm/make_i386_x86_64_sysv_macho_gas.o : asm/make_i386_x86_64_sysv_macho_gas.S : @gas ] ++ [ make asm/jump_i386_x86_64_sysv_macho_gas.o : asm/jump_i386_x86_64_sysv_macho_gas.S : @gas ] ++ : 32_64 ++ x86 ++ mach-o ++ darwin ++ ; ++ ++alias asm_context_sources + : asm/make_x86_64_ms_pe_masm.asm + asm/jump_x86_64_ms_pe_masm.asm + dummy.cpp +@@ -424,6 +461,25 @@ + intel + ; + ++#COMBINED ++ ++alias asm_context_sources ++ : asm/make_combined_sysv_macho_gas.S ++ asm/jump_combined_sysv_macho_gas.S ++ : combined ++ mach-o ++ darwin ++ darwin ++ ; ++ ++alias asm_context_sources ++ : [ make asm/make_combined_sysv_macho_gas.o : asm/make_combined_sysv_macho_gas.S : @gas ] ++ [ make asm/jump_combined_sysv_macho_gas.o : asm/jump_combined_sysv_macho_gas.S : @gas ] ++ : combined ++ mach-o ++ darwin ++ ; ++ + alias asm_context_sources + : asm/make_x86_64_ms_pe_masm.asm + asm/jump_x86_64_ms_pe_masm.asm + +=== modified file 'libs/context/build/architecture.jam' +--- libs/context/build/architecture.jam 2013-12-30 19:16:18 +0000 ++++ libs/context/build/architecture.jam 2014-01-02 10:47:09 +0000 +@@ -71,6 +71,14 @@ + { + return x86 ; + } ++ else if [ configure.builds /boost/architecture//ppc : $(properties) : ppc ] ++ { ++ return ppc ; ++ } ++ else if [ configure.builds /boost/architecture//combined : $(properties) : combined ] ++ { ++ return combined ; ++ } + } + } + + +=== added file 'libs/context/src/asm/jump_combined_sysv_macho_gas.S' +--- libs/context/src/asm/jump_combined_sysv_macho_gas.S 1970-01-01 00:00:00 +0000 ++++ libs/context/src/asm/jump_combined_sysv_macho_gas.S 2014-01-03 17:46:02 +0000 +@@ -0,0 +1,20 @@ ++/* ++ Copyright Sergue E. Leontiev 2013. ++ Distributed under the Boost Software License, Version 1.0. ++ (See accompanying file LICENSE_1_0.txt or copy at ++ http://www.boost.org/LICENSE_1_0.txt) ++*/ ++ ++// Stub file for universal binary ++ ++#if defined(__i386__) ++ #include "jump_i386_sysv_macho_gas.S" ++#elif defined(__x86_64__) ++ #include "jump_x86_64_sysv_macho_gas.S" ++#elif defined(__ppc__) ++ #include "jump_ppc32_sysv_macho_gas.S" ++#elif defined(__ppc64__) ++ #include "jump_ppc64_sysv_macho_gas.S" ++#else ++ #error "No arch's" ++#endif + +=== added file 'libs/context/src/asm/jump_ppc32_sysv_macho_gas.S' +--- libs/context/src/asm/jump_ppc32_sysv_macho_gas.S 1970-01-01 00:00:00 +0000 ++++ libs/context/src/asm/jump_ppc32_sysv_macho_gas.S 2014-01-03 15:18:19 +0000 +@@ -0,0 +1,180 @@ ++/* ++ Copyright Oliver Kowalke 2009. ++ Distributed under the Boost Software License, Version 1.0. ++ (See accompanying file LICENSE_1_0.txt or copy at ++ http://www.boost.org/LICENSE_1_0.txt) ++*/ ++ ++/******************************************************************* ++ * * ++ * ------------------------------------------------------------- * ++ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | * ++ * ------------------------------------------------------------- * ++ * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | 32 | 36 | * ++ * ------------------------------------------------------------- * ++ * | R13 | R14 | R15 | R16 | R17 | R18 | R19 | R20 | R21 | R22 | * ++ * ------------------------------------------------------------- * ++ * ------------------------------------------------------------- * ++ * | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | * ++ * ------------------------------------------------------------- * ++ * | 40 | 44 | 48 | 52 | 56 | 60 | 64 | 68 | 72 | 76 | * ++ * ------------------------------------------------------------- * ++ * | R23 | R24 | R25 | R26 | R27 | R28 | R29 | R30 | R31 | SP | * ++ * ------------------------------------------------------------- * ++ * ------------------------------------------------------------- * ++ * | 20 | 21 | 22 | | * ++ * ------------------------------------------------------------- * ++ * | 80 | 84 | 88 | | * ++ * ------------------------------------------------------------- * ++ * | CR | LR | PC | | * ++ * ------------------------------------------------------------- * ++ * ------------------------------------------------------------- * ++ * | 23 | 24 | 25 | | * ++ * ------------------------------------------------------------- * ++ * | 92 | 96 | 100 | | * ++ * ------------------------------------------------------------- * ++ * | sp | size|| | * ++ * ------------------------------------------------------------- * ++ * ------------------------------------------------------------- * ++ * | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | * ++ * ------------------------------------------------------------- * ++ * | 104 | 108 | 112 | 116 | 120 | 124 | 128 | 132 | 136 | 140 | * ++ * ------------------------------------------------------------- * ++ * | F14 | F15 | F16 | F17 | F18 | * ++ * ------------------------------------------------------------- * ++ * ------------------------------------------------------------- * ++ * | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | * ++ * ------------------------------------------------------------- * ++ * | 144 | 148 | 152 | 156 | 160 | 164 | 168 | 172 | 176 | 180 | * ++ * ------------------------------------------------------------- * ++ * | F19 | F20 | F21 | F22 | F23 | * ++ * ------------------------------------------------------------- * ++ * ------------------------------------------------------------- * ++ * | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | * ++ * ------------------------------------------------------------- * ++ * | 184 | 188 | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | * ++ * ------------------------------------------------------------- * ++ * | F24 | F25 | F26 | F27 | F28 | * ++ * ------------------------------------------------------------- * ++ * ------------------------------------------------------------- * ++ * | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | | * ++ * ------------------------------------------------------------- * ++ * | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | | * ++ * ------------------------------------------------------------- * ++ * | F29 | F30 | F31 | fpscr | | * ++ * ------------------------------------------------------------- * ++ * * ++ * *****************************************************************/ ++ ++.machine ppc ++ ++.text ++.globl _jump_fcontext ++.align 2 ++_jump_fcontext: ++ stw r13, 0(r3) ; save R13 ++ stw r14, 4(r3) ; save R14 ++ stw r15, 8(r3) ; save R15 ++ stw r16, 12(r3) ; save R16 ++ stw r17, 16(r3) ; save R17 ++ stw r18, 20(r3) ; save R18 ++ stw r19, 24(r3) ; save R19 ++ stw r20, 28(r3) ; save R20 ++ stw r21, 32(r3) ; save R21 ++ stw r22, 36(r3) ; save R22 ++ stw r23, 40(r3) ; save R23 ++ stw r24, 44(r3) ; save R24 ++ stw r25, 48(r3) ; save R25 ++ stw r26, 52(r3) ; save R26 ++ stw r27, 56(r3) ; save R27 ++ stw r28, 60(r3) ; save R28 ++ stw r29, 64(r3) ; save R29 ++ stw r30, 68(r3) ; save R30 ++ stw r31, 72(r3) ; save R31 ++ stw r1, 76(r3) ; save SP ++ ++ mfcr r0 ; load CR ++ stw r0, 80(r3) ; save CR ++ mflr r0 ; load LR ++ stw r0, 84(r3) ; save LR ++ stw r0, 88(r3) ; save LR as PC ++ ++ cmpwi cr7, r6, 0 ; test if fpu env should be preserved ++ beq cr7, l1 ++ ++ stfd f14, 104(r3) ; save F14 ++ stfd f15, 112(r3) ; save F15 ++ stfd f16, 120(r3) ; save F16 ++ stfd f17, 128(r3) ; save F17 ++ stfd f18, 136(r3) ; save F18 ++ stfd f19, 144(r3) ; save F19 ++ stfd f20, 152(r3) ; save F20 ++ stfd f21, 160(r3) ; save F21 ++ stfd f22, 168(r3) ; save F22 ++ stfd f23, 176(r3) ; save F23 ++ stfd f24, 184(r3) ; save F24 ++ stfd f25, 192(r3) ; save F25 ++ stfd f26, 200(r3) ; save F26 ++ stfd f27, 208(r3) ; save F27 ++ stfd f28, 216(r3) ; save F28 ++ stfd f29, 224(r3) ; save F29 ++ stfd f30, 232(r3) ; save F30 ++ stfd f31, 240(r3) ; save F31 ++ mffs f0 ; load FPSCR ++ stfd f0, 248(r3) ; save FPSCR ++ ++ lfd f14, 104(r4) ; restore F14 ++ lfd f15, 112(r4) ; restore F15 ++ lfd f16, 120(r4) ; restore F16 ++ lfd f17, 128(r4) ; restore F17 ++ lfd f18, 136(r4) ; restore F18 ++ lfd f19, 144(r4) ; restore F19 ++ lfd f20, 152(r4) ; restore F20 ++ lfd f21, 160(r4) ; restore F21 ++ lfd f22, 168(r4) ; restore F22 ++ lfd f23, 176(r4) ; restore F23 ++ lfd f24, 184(r4) ; restore F24 ++ lfd f25, 192(r4) ; restore F25 ++ lfd f26, 200(r4) ; restore F26 ++ lfd f27, 208(r4) ; restore F27 ++ lfd f28, 216(r4) ; restore F28 ++ lfd f29, 224(r4) ; restore F29 ++ lfd f30, 232(r4) ; restore F30 ++ lfd f31, 240(r4) ; restore F31 ++ lfd f0, 248(r4) ; load FPSCR ++ mtfsf 0xff, f0 ; restore FPSCR ++l1: ++ ++ lwz r13, 0(r4) ; restore R13 ++ lwz r14, 4(r4) ; restore R14 ++ lwz r15, 8(r4) ; restore R15 ++ lwz r16, 12(r4) ; restore R16 ++ lwz r17, 16(r4) ; restore R17 ++ lwz r18, 20(r4) ; restore R18 ++ lwz r19, 24(r4) ; restore R19 ++ lwz r20, 28(r4) ; restore R20 ++ lwz r21, 32(r4) ; restore R21 ++ lwz r22, 36(r4) ; restore R22 ++ lwz r23, 40(r4) ; restore R23 ++ lwz r24, 44(r4) ; restore R24 ++ lwz r25, 48(r4) ; restore R25 ++ lwz r26, 52(r4) ; restore R26 ++ lwz r27, 56(r4) ; restore R27 ++ lwz r28, 60(r4) ; restore R28 ++ lwz r29, 64(r4) ; restore R29 ++ lwz r30, 68(r4) ; restore R30 ++ lwz r31, 72(r4) ; restore R31 ++ lwz r1, 76(r4) ; restore SP ++ ++ lwz r0, 80(r4) ; load CR ++ mtcr r0 ; restore CR ++ lwz r0, 84(r4) ; load LR ++ mtlr r0 ; restore LR ++ ++ mr r3, r5 ; use third arg as return value after jump ++ ; and as first arg in context function ++ ++ lwz r0, 88(r4) ; load PC ++ mtctr r0 ; restore CTR ++ ++ bctr ; jump to context + +=== added file 'libs/context/src/asm/jump_ppc64_sysv_macho_gas.S' +--- libs/context/src/asm/jump_ppc64_sysv_macho_gas.S 1970-01-01 00:00:00 +0000 ++++ libs/context/src/asm/jump_ppc64_sysv_macho_gas.S 2014-01-03 17:54:53 +0000 +@@ -0,0 +1,193 @@ ++/* ++ Copyright Oliver Kowalke 2009. ++ Distributed under the Boost Software License, Version 1.0. ++ (See accompanying file LICENSE_1_0.txt or copy at ++ http://www.boost.org/LICENSE_1_0.txt) ++*/ ++ ++/******************************************************************* ++ * * ++ * ------------------------------------------------------------- * ++ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | * ++ * ------------------------------------------------------------- * ++ * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | 32 | 36 | * ++ * ------------------------------------------------------------- * ++ * | R13 | R14 | R15 | R16 | R17 | * ++ * ------------------------------------------------------------- * ++ * ------------------------------------------------------------- * ++ * | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | * ++ * ------------------------------------------------------------- * ++ * | 40 | 44 | 48 | 52 | 56 | 60 | 64 | 68 | 72 | 76 | * ++ * ------------------------------------------------------------- * ++ * | R18 | R19 | R20 | R21 | R22 | * ++ * ------------------------------------------------------------- * ++ * ------------------------------------------------------------- * ++ * | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | * ++ * ------------------------------------------------------------- * ++ * | 80 | 84 | 88 | 92 | 96 | 100 | 104 | 108 | 112 | 116 | * ++ * ------------------------------------------------------------- * ++ * | R23 | R24 | R25 | R26 | R27 | * ++ * ------------------------------------------------------------- * ++ * ------------------------------------------------------------- * ++ * | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | * ++ * ------------------------------------------------------------- * ++ * | 120 | 124 | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | * ++ * ------------------------------------------------------------- * ++ * | R28 | R29 | R30 | R31 | SP | * ++ * ------------------------------------------------------------- * ++ * ------------------------------------------------------------- * ++ * | 40 | 41 | 42 | 43 | 44 | 45 | | * ++ * ------------------------------------------------------------- * ++ * | 160 | 164 | 168 | 172 | 176 | 180 | | * ++ * ------------------------------------------------------------- * ++ * | CR | LR | PC | | * ++ * ------------------------------------------------------------- * ++ * ------------------------------------------------------------- * ++ * | 46 | 47 | 48 | 49 | | * ++ * ------------------------------------------------------------- * ++ * | 184 | 188 | 192 | 196 | | * ++ * ------------------------------------------------------------- * ++ * | sp | size | | * ++ * ------------------------------------------------------------- * ++ * ------------------------------------------------------------- * ++ * | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | * ++ * ------------------------------------------------------------- * ++ * | 200 | 204 | 208 | 212 | 216 | 220 | 224 | 228 | 232 | 236 | * ++ * ------------------------------------------------------------- * ++ * | F14 | F15 | F16 | F17 | F18 | * ++ * ------------------------------------------------------------- * ++ * ------------------------------------------------------------- * ++ * | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | * ++ * ------------------------------------------------------------- * ++ * | 240 | 244 | 248 | 252 | 256 | 260 | 264 | 268 | 272 | 276 | * ++ * ------------------------------------------------------------- * ++ * | F19 | F20 | F21 | F22 | F23 | * ++ * ------------------------------------------------------------- * ++ * ------------------------------------------------------------- * ++ * | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | * ++ * ------------------------------------------------------------- * ++ * | 280 | 284 | 288 | 292 | 296 | 300 | 304 | 308 | 312 | 316 | * ++ * ------------------------------------------------------------- * ++ * | F24 | F25 | F26 | F27 | F28 | * ++ * ------------------------------------------------------------- * ++ * ------------------------------------------------------------- * ++ * | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | | * ++ * ------------------------------------------------------------- * ++ * | 320 | 324 | 328 | 332 | 336 | 340 | 344 | 348 | | * ++ * ------------------------------------------------------------- * ++ * | F29 | F30 | F31 | fpscr | | * ++ * ------------------------------------------------------------- * ++ * * ++ * *****************************************************************/ ++ ++.text ++.align 2 ++.globl jump_fcontext ++ ++_jump_fcontext: ++ std r13, 0(r3) ; save R13 ++ std r14, 8(r3) ; save R14 ++ std r15, 16(r3) ; save R15 ++ std r16, 24(r3) ; save R16 ++ std r17, 32(r3) ; save R17 ++ std r18, 40(r3) ; save R18 ++ std r19, 48(r3) ; save R19 ++ std r20, 56(r3) ; save R20 ++ std r21, 64(r3) ; save R21 ++ std r22, 72(r3) ; save R22 ++ std r23, 80(r3) ; save R23 ++ std r24, 88(r3) ; save R24 ++ std r25, 96(r3) ; save R25 ++ std r26, 104(r3) ; save R26 ++ std r27, 112(r3) ; save R27 ++ std r28, 120(r3) ; save R28 ++ std r29, 128(r3) ; save R29 ++ std r30, 136(r3) ; save R30 ++ std r31, 144(r3) ; save R31 ++ std r1, 152(r3) ; save SP ++ ++ mfcr r0 ; load CR ++ std r0, 160(r3) ; save CR ++ mflr r0 ; load LR ++ std r0, 168(r3) ; save LR ++ std r0, 176(r3) ; save LR as PC ++ ++ cmpwi cr7, r6, 0 ; test if fpu env should be preserved ++ beq cr7, l1 ++ ++ stfd f14, 200(r3) ; save F14 ++ stfd f15, 208(r3) ; save F15 ++ stfd f16, 216(r3) ; save F16 ++ stfd f17, 224(r3) ; save F17 ++ stfd f18, 232(r3) ; save F18 ++ stfd f19, 240(r3) ; save F19 ++ stfd f20, 248(r3) ; save F20 ++ stfd f21, 256(r3) ; save F21 ++ stfd f22, 264(r3) ; save F22 ++ stfd f23, 272(r3) ; save F23 ++ stfd f24, 280(r3) ; save F24 ++ stfd f25, 288(r3) ; save F25 ++ stfd f26, 296(r3) ; save F26 ++ stfd f27, 304(r3) ; save F27 ++ stfd f28, 312(r3) ; save F28 ++ stfd f29, 320(r3) ; save F29 ++ stfd f30, 328(r3) ; save F30 ++ stfd f31, 336(r3) ; save F31 ++ mffs f0 ; load FPSCR ++ stfd f0, 344(r3) ; save FPSCR ++ ++ lfd f14, 200(r4) ; restore F14 ++ lfd f15, 208(r4) ; restore F15 ++ lfd f16, 216(r4) ; restore F16 ++ lfd f17, 224(r4) ; restore F17 ++ lfd f18, 232(r4) ; restore F18 ++ lfd f19, 240(r4) ; restore F19 ++ lfd f20, 248(r4) ; restore F20 ++ lfd f21, 256(r4) ; restore F21 ++ lfd f22, 264(r4) ; restore F22 ++ lfd f23, 272(r4) ; restore F23 ++ lfd f24, 280(r4) ; restore F24 ++ lfd f25, 288(r4) ; restore F25 ++ lfd f26, 296(r4) ; restore F26 ++ lfd f27, 304(r4) ; restore F27 ++ lfd f28, 312(r4) ; restore F28 ++ lfd f29, 320(r4) ; restore F29 ++ lfd f30, 328(r4) ; restore F30 ++ lfd f31, 336(r4) ; restore F31 ++ lfd f0, 344(r4) ; load FPSCR ++ mtfsf 0xff, f0 ; restore FPSCR ++l1: ++ ++ ld r13, 0(r4) ; restore R13 ++ ld r14, 8(r4) ; restore R14 ++ ld r15, 16(r4) ; restore R15 ++ ld r16, 24(r4) ; restore R16 ++ ld r17, 32(r4) ; restore R17 ++ ld r18, 40(r4) ; restore R18 ++ ld r19, 48(r4) ; restore R19 ++ ld r20, 56(r4) ; restore R20 ++ ld r21, 64(r4) ; restore R21 ++ ld r22, 72(r4) ; restore R22 ++ ld r23, 80(r4) ; restore R23 ++ ld r24, 88(r4) ; restore R24 ++ ld r25, 96(r4) ; restore R25 ++ ld r26, 104(r4) ; restore R26 ++ ld r27, 112(r4) ; restore R27 ++ ld r28, 120(r4) ; restore R28 ++ ld r29, 128(r4) ; restore R29 ++ ld r30, 136(r4) ; restore r30 ++ ld r31, 144(r4) ; restore r31 ++ ld r1, 152(r4) ; restore SP ++ ++ ld r0, 160(r4) ; load CR ++ mtcr r0 ; restore CR ++ ld r0, 168(r4) ; load LR ++ mtlr r0 ; restore LR ++ ++ mr r3, r5 ; use third arg as return value after jump ++ ; and as first arg in context function ++ ++ ld r0, 176(r4) ; load PC ++ mtctr r0 ; restore CTR ++ ++ bctr ; jump to context + +=== added file 'libs/context/src/asm/make_combined_sysv_macho_gas.S' +--- libs/context/src/asm/make_combined_sysv_macho_gas.S 1970-01-01 00:00:00 +0000 ++++ libs/context/src/asm/make_combined_sysv_macho_gas.S 2014-01-03 17:50:32 +0000 +@@ -0,0 +1,20 @@ ++/* ++ Copyright Sergue E. Leontiev 2013. ++ Distributed under the Boost Software License, Version 1.0. ++ (See accompanying file LICENSE_1_0.txt or copy at ++ http://www.boost.org/LICENSE_1_0.txt) ++*/ ++ ++// Stub file for universal binary ++ ++#if defined(__i386__) ++ #include "make_i386_sysv_macho_gas.S" ++#elif defined(__x86_64__) ++ #include "make_x86_64_sysv_macho_gas.S" ++#elif defined(__ppc__) ++ #include "make_ppc32_sysv_macho_gas.S" ++#elif defined(__ppc64__) ++ #include "make_ppc64_sysv_macho_gas.S" ++#else ++ #error "No arch's" ++#endif + +=== added file 'libs/context/src/asm/make_ppc32_sysv_macho_gas.S' +--- libs/context/src/asm/make_ppc32_sysv_macho_gas.S 1970-01-01 00:00:00 +0000 ++++ libs/context/src/asm/make_ppc32_sysv_macho_gas.S 2014-01-02 21:27:23 +0000 +@@ -0,0 +1,109 @@ ++/* ++ Copyright Oliver Kowalke 2009. ++ Distributed under the Boost Software License, Version 1.0. ++ (See accompanying file LICENSE_1_0.txt or copy at ++ http://www.boost.org/LICENSE_1_0.txt) ++*/ ++ ++/******************************************************************* ++ * * ++ * ------------------------------------------------------------- * ++ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | * ++ * ------------------------------------------------------------- * ++ * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | 32 | 36 | * ++ * ------------------------------------------------------------- * ++ * | R13 | R14 | R15 | R16 | R17 | R18 | R19 | R20 | R21 | R22 | * ++ * ------------------------------------------------------------- * ++ * ------------------------------------------------------------- * ++ * | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | * ++ * ------------------------------------------------------------- * ++ * | 40 | 44 | 48 | 52 | 56 | 60 | 64 | 68 | 72 | 76 | * ++ * ------------------------------------------------------------- * ++ * | R23 | R24 | R25 | R26 | R27 | R28 | R29 | R30 | R31 | SP | * ++ * ------------------------------------------------------------- * ++ * ------------------------------------------------------------- * ++ * | 20 | 21 | 22 | | * ++ * ------------------------------------------------------------- * ++ * | 80 | 84 | 88 | | * ++ * ------------------------------------------------------------- * ++ * | CR | LR | PC | | * ++ * ------------------------------------------------------------- * ++ * ------------------------------------------------------------- * ++ * | 23 | 24 | 25 | | * ++ * ------------------------------------------------------------- * ++ * | 92 | 96 | 100 | | * ++ * ------------------------------------------------------------- * ++ * | sp | size|| | * ++ * ------------------------------------------------------------- * ++ * ------------------------------------------------------------- * ++ * | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | * ++ * ------------------------------------------------------------- * ++ * | 104 | 108 | 112 | 116 | 120 | 124 | 128 | 132 | 136 | 140 | * ++ * ------------------------------------------------------------- * ++ * | F14 | F15 | F16 | F17 | F18 | * ++ * ------------------------------------------------------------- * ++ * ------------------------------------------------------------- * ++ * | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | * ++ * ------------------------------------------------------------- * ++ * | 144 | 148 | 152 | 156 | 160 | 164 | 168 | 172 | 176 | 180 | * ++ * ------------------------------------------------------------- * ++ * | F19 | F20 | F21 | F22 | F23 | * ++ * ------------------------------------------------------------- * ++ * ------------------------------------------------------------- * ++ * | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | * ++ * ------------------------------------------------------------- * ++ * | 184 | 188 | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | * ++ * ------------------------------------------------------------- * ++ * | F24 | F25 | F26 | F27 | F28 | * ++ * ------------------------------------------------------------- * ++ * ------------------------------------------------------------- * ++ * | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | | * ++ * ------------------------------------------------------------- * ++ * | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | | * ++ * ------------------------------------------------------------- * ++ * | F29 | F30 | F31 | fpscr | | * ++ * ------------------------------------------------------------- * ++ * * ++ * *****************************************************************/ ++ ++.text ++.globl _make_fcontext ++.align 2 ++_make_fcontext: ++ mflr r6 ; save return address into R6 ++ ++ mr r0, r3 ++ subi r3, r3, 256 ; reserve space for fcontext_t at top of context stack ++ ++ ; call align_stack, R3 contains address at 16 byte boundary after return ++ ; == pointer to fcontext_t and address of context stack ++ 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 ++ stw r5, 88(r3) ; save address of context function in fcontext_t ++ ++ 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 l1 ; jump to label 1 ++l1: ++ mflr r4 ; load LR into R4 ++ addi r4, r4, lo16((finish - .)+4) ; 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 ++ ++ mtlr r6 ; restore return address from R6 ++ ++ blr ++ ++finish: ++ ; SP points to same address as SP on entry of context function ++ mflr r0 ; save return address into R0 ++ stw r0, 4(r1) ; save return address on stack, set up stack frame ++ stwu r1, -16(r1) ; allocate stack space, SP % 16 == 0 ++ ++ li r3, 0 ; exit code is zero ++ bl __exit ; exit application + +=== added file 'libs/context/src/asm/make_ppc64_sysv_macho_gas.S' +--- libs/context/src/asm/make_ppc64_sysv_macho_gas.S 1970-01-01 00:00:00 +0000 ++++ libs/context/src/asm/make_ppc64_sysv_macho_gas.S 2014-01-03 18:04:45 +0000 +@@ -0,0 +1,123 @@ ++/* ++ Copyright Oliver Kowalke 2009. ++ Distributed under the Boost Software License, Version 1.0. ++ (See accompanying file LICENSE_1_0.txt or copy at ++ http://www.boost.org/LICENSE_1_0.txt) ++*/ ++ ++/******************************************************************* ++ * * ++ * ------------------------------------------------------------- * ++ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | * ++ * ------------------------------------------------------------- * ++ * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | 32 | 36 | * ++ * ------------------------------------------------------------- * ++ * | R13 | R14 | R15 | R16 | R17 | * ++ * ------------------------------------------------------------- * ++ * ------------------------------------------------------------- * ++ * | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | * ++ * ------------------------------------------------------------- * ++ * | 40 | 44 | 48 | 52 | 56 | 60 | 64 | 68 | 72 | 76 | * ++ * ------------------------------------------------------------- * ++ * | R18 | R19 | R20 | R21 | R22 | * ++ * ------------------------------------------------------------- * ++ * ------------------------------------------------------------- * ++ * | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | * ++ * ------------------------------------------------------------- * ++ * | 80 | 84 | 88 | 92 | 96 | 100 | 104 | 108 | 112 | 116 | * ++ * ------------------------------------------------------------- * ++ * | R23 | R24 | R25 | R26 | R27 | * ++ * ------------------------------------------------------------- * ++ * ------------------------------------------------------------- * ++ * | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | * ++ * ------------------------------------------------------------- * ++ * | 120 | 124 | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | * ++ * ------------------------------------------------------------- * ++ * | R28 | R29 | R30 | R31 | SP | * ++ * ------------------------------------------------------------- * ++ * ------------------------------------------------------------- * ++ * | 40 | 41 | 42 | 43 | 44 | 45 | | * ++ * ------------------------------------------------------------- * ++ * | 160 | 164 | 168 | 172 | 176 | 180 | | * ++ * ------------------------------------------------------------- * ++ * | CR | LR | PC | | * ++ * ------------------------------------------------------------- * ++ * ------------------------------------------------------------- * ++ * | 46 | 47 | 48 | 49 | | * ++ * ------------------------------------------------------------- * ++ * | 184 | 188 | 192 | 196 | | * ++ * ------------------------------------------------------------- * ++ * | sp | size | | * ++ * ------------------------------------------------------------- * ++ * ------------------------------------------------------------- * ++ * | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | * ++ * ------------------------------------------------------------- * ++ * | 200 | 204 | 208 | 212 | 216 | 220 | 224 | 228 | 232 | 236 | * ++ * ------------------------------------------------------------- * ++ * | F14 | F15 | F16 | F17 | F18 | * ++ * ------------------------------------------------------------- * ++ * ------------------------------------------------------------- * ++ * | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | * ++ * ------------------------------------------------------------- * ++ * | 240 | 244 | 248 | 252 | 256 | 260 | 264 | 268 | 272 | 276 | * ++ * ------------------------------------------------------------- * ++ * | F19 | F20 | F21 | F22 | F23 | * ++ * ------------------------------------------------------------- * ++ * ------------------------------------------------------------- * ++ * | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | * ++ * ------------------------------------------------------------- * ++ * | 280 | 284 | 288 | 292 | 296 | 300 | 304 | 308 | 312 | 316 | * ++ * ------------------------------------------------------------- * ++ * | F24 | F25 | F26 | F27 | F28 | * ++ * ------------------------------------------------------------- * ++ * ------------------------------------------------------------- * ++ * | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | | * ++ * ------------------------------------------------------------- * ++ * | 320 | 324 | 328 | 332 | 336 | 340 | 344 | 348 | | * ++ * ------------------------------------------------------------- * ++ * | F29 | F30 | F31 | fpscr | | * ++ * ------------------------------------------------------------- * ++ * * ++ * *****************************************************************/ ++ ++.text ++.globl _make_fcontext ++_make_fcontext: ++ mflr r6 ; save return address into R6 ++ ++ mr r0, r3 ++ subi r3, r3, 352 ; reserve space for fcontext_t at top of context stack ++ ++ ; call align_stack, R3 contains address at 16 byte boundary after return ++ ; == pointer to fcontext_t and address of context stack ++ 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 ++ ++ 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 l1 ; jump to label 1 ++l1: ++ mflr r4 ; load LR into R4 ++ addi r4, r4, lo16((finish - .) + 4) ; 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 ++ ++ mtlr r6 ; restore return address from R6 ++ ++ blr ++ ++finish: ++ ; SP points to same address as SP on entry of context function ++ mflr r0 ; save return address into R0 ++ stw r0, 8(r1) ; save return address on stack, set up stack frame ++ stwu r1, -32(r1) ; allocate stack space, SP % 16 == 0 ++ ++ li r3, 0 ; set return value to zero ++ bl __exit ; exit application ++ nop +