Add AArch64 support for boost::context.
This commit is contained in:
		
							parent
							
								
									bf768ffd04
								
							
						
					
					
						commit
						b30dad1db5
					
				
							
								
								
									
										281
									
								
								boost-context-0001-add-support-for-ARM64-MACH-O.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										281
									
								
								boost-context-0001-add-support-for-ARM64-MACH-O.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,281 @@ | |||||||
|  | From cbcd605a24352521d769cff7008d92f15f08bfe6 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Oliver Kowalke <oliver.kowalke@gmx.de> | ||||||
|  | Date: Wed, 12 Nov 2014 19:46:42 +0100 | ||||||
|  | Subject: [PATCH 01/54] add support fro ARM64/MACH-O | ||||||
|  | 
 | ||||||
|  | ---
 | ||||||
|  |  build/Jamfile.v2                     |  31 +++++++++ | ||||||
|  |  src/asm/jump_arm64_aapcs_macho_gas.S | 124 +++++++++++++++++++++++++++++++++++ | ||||||
|  |  src/asm/make_arm64_aapcs_macho_gas.S |  87 ++++++++++++++++++++++++ | ||||||
|  |  3 files changed, 242 insertions(+) | ||||||
|  |  create mode 100644 src/asm/jump_arm64_aapcs_macho_gas.S | ||||||
|  |  create mode 100644 src/asm/make_arm64_aapcs_macho_gas.S | ||||||
|  | 
 | ||||||
|  | diff --git a/libs/context/build/Jamfile.v2 b/libs/context/build/Jamfile.v2
 | ||||||
|  | index 7cc8a07..32d5222 100644
 | ||||||
|  | --- a/libs/context/build/Jamfile.v2
 | ||||||
|  | +++ b/libs/context/build/Jamfile.v2
 | ||||||
|  | @@ -209,6 +209,37 @@ alias asm_context_sources
 | ||||||
|  |       <toolset>msvc | ||||||
|  |     ; | ||||||
|  |   | ||||||
|  | +# ARM64
 | ||||||
|  | +# ARM64/AAPCS/MACH-O
 | ||||||
|  | +alias asm_context_sources
 | ||||||
|  | +   : [ make asm/make_arm64_aapcs_macho_gas.o : asm/make_arm64_aapcs_macho_gas.S : @gas64 ]
 | ||||||
|  | +     [ make asm/jump_arm64_aapcs_macho_gas.o : asm/jump_arm64_aapcs_macho_gas.S : @gas64 ]
 | ||||||
|  | +   : <abi>aapcs
 | ||||||
|  | +     <address-model>64
 | ||||||
|  | +     <architecture>arm
 | ||||||
|  | +     <binary-format>mach-o
 | ||||||
|  | +   ;
 | ||||||
|  | +
 | ||||||
|  | +alias asm_context_sources
 | ||||||
|  | +   : asm/make_arm64_aapcs_macho_gas.S
 | ||||||
|  | +     asm/jump_arm64_aapcs_macho_gas.S
 | ||||||
|  | +   : <abi>aapcs
 | ||||||
|  | +     <address-model>64
 | ||||||
|  | +     <architecture>arm
 | ||||||
|  | +     <binary-format>mach-o
 | ||||||
|  | +     <toolset>clang
 | ||||||
|  | +   ;
 | ||||||
|  | +
 | ||||||
|  | +alias asm_context_sources
 | ||||||
|  | +   : asm/make_arm64_aapcs_macho_gas.S
 | ||||||
|  | +     asm/jump_arm64_aapcs_macho_gas.S
 | ||||||
|  | +   : <abi>aapcs
 | ||||||
|  | +     <address-model>64
 | ||||||
|  | +     <architecture>arm
 | ||||||
|  | +     <binary-format>mach-o
 | ||||||
|  | +     <toolset>darwin
 | ||||||
|  | +   ;
 | ||||||
|  | +
 | ||||||
|  |  # MIPS | ||||||
|  |  # MIPS/O32/ELF | ||||||
|  |  alias asm_context_sources | ||||||
|  | diff --git a/libs/context/src/asm/jump_arm64_aapcs_macho_gas.S b/libs/context/src/asm/jump_arm64_aapcs_macho_gas.S
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..6ad5b38
 | ||||||
|  | --- /dev/null
 | ||||||
|  | +++ b/libs/context/src/asm/jump_arm64_aapcs_macho_gas.S
 | ||||||
|  | @@ -0,0 +1,124 @@
 | ||||||
|  | +/*
 | ||||||
|  | +            Copyright Oliver Kowalke 2014.
 | ||||||
|  | +   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  |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c|  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |    s16    |    s17    |    s18    |    s19    |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |  8  |  9  |  10 |  11 |  12 |  13 |  14 |  15 |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c|  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |    s20    |    s21    |    s22    |    s23    |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |  16 |  17 |  18 |  19 |  20 |  21 |  22 |  23 |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  | 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58| 0x5c|  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |    s24    |    s25    |    s26    |    s27    |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |  24 |  25 |  26 |  27 |  28 |  29 |  30 |  31 |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  | 0x60| 0x64| 0x68| 0x6c| 0x70| 0x74| 0x78| 0x7c|  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |    s28    |    s29    |    s30    |    s31    |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |  32 |  33 |  34 |  35 |  36 |  37 |  38 |  39 |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  | 0x80| 0x84| 0x88| 0x8c| 0x90| 0x94| 0x98| 0x9c|  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |   sjlj    |     v1    |     v2    |     v3    |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |  40 |  41 |  42 |  43 |  44 |  45 |  46 |  47 |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  | 0xa0| 0xa4| 0xa8| 0xac| 0xb0| 0xb4| 0xb8| 0xbc|  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |    v4     |     v5    |     v6    |     v7    |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |  48 |  49 |  50 |  51 |  52 |  53 |           |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  | 0xc0| 0xc4| 0xc8| 0xcc| 0xd0| 0xd4|           |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |    v8     |     lr    |     pc    |           |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *                                                     *
 | ||||||
|  | + *******************************************************/
 | ||||||
|  | +
 | ||||||
|  | +.text
 | ||||||
|  | +.globl _jump_fcontext
 | ||||||
|  | +.align 2
 | ||||||
|  | +_jump_fcontext:
 | ||||||
|  | +    @ save LR as PC
 | ||||||
|  | +    push {lr}
 | ||||||
|  | +    @ save V1-V8,LR
 | ||||||
|  | +    push {v1-v8,lr}
 | ||||||
|  | +
 | ||||||
|  | +    @ locate TLS to save/restore SjLj handler
 | ||||||
|  | +    mrc  p15, 0, v2, c13, c0, #3
 | ||||||
|  | +    bic  v2, v2, #3
 | ||||||
|  | +
 | ||||||
|  | +    @ load TLS[__PTK_LIBC_DYLD_Unwind_SjLj_Key]
 | ||||||
|  | +    ldr  v1, [v2, #72]
 | ||||||
|  | +    @ save SjLj handler
 | ||||||
|  | +    push  {v1}
 | ||||||
|  | +
 | ||||||
|  | +    @ prepare stack for FPU
 | ||||||
|  | +    sub  sp, sp, #128
 | ||||||
|  | +
 | ||||||
|  | +#if (defined(__VFP_FP__) && !defined(__SOFTFP__))
 | ||||||
|  | +    @ test if fpu env should be preserved
 | ||||||
|  | +    cmp  a4, #0
 | ||||||
|  | +    beq  1f
 | ||||||
|  | +
 | ||||||
|  | +    @ save S16-S31
 | ||||||
|  | +    vstmia  sp, {d8-d15}
 | ||||||
|  | +
 | ||||||
|  | +1:
 | ||||||
|  | +#endif
 | ||||||
|  | +
 | ||||||
|  | +    @ store RSP (pointing to context-data) in A1
 | ||||||
|  | +    str  sp, [a1]
 | ||||||
|  | +
 | ||||||
|  | +    @ restore RSP (pointing to context-data) from A2
 | ||||||
|  | +    mov  sp, a2
 | ||||||
|  | +
 | ||||||
|  | +#if (defined(__VFP_FP__) && !defined(__SOFTFP__))
 | ||||||
|  | +    @ test if fpu env should be preserved
 | ||||||
|  | +    cmp  a4, #0
 | ||||||
|  | +    beq  2f
 | ||||||
|  | +
 | ||||||
|  | +    @ restore S16-S31
 | ||||||
|  | +    vldmia  sp, {d8-d15}
 | ||||||
|  | +
 | ||||||
|  | +2:
 | ||||||
|  | +#endif
 | ||||||
|  | +
 | ||||||
|  | +    @ prepare stack for FPU
 | ||||||
|  | +    add  sp, sp, #128
 | ||||||
|  | +
 | ||||||
|  | +    @ restore SjLj handler
 | ||||||
|  | +    pop  {v1}
 | ||||||
|  | +    @ store SjLj handler in TLS
 | ||||||
|  | +    str  v1, [v2, #72]
 | ||||||
|  | +
 | ||||||
|  | +    @ use third arg as return value after jump
 | ||||||
|  | +    @ and as first arg in context function
 | ||||||
|  | +    mov  a1, a3
 | ||||||
|  | +    
 | ||||||
|  | +    @ restore v1-V8,LR,PC
 | ||||||
|  | +    pop {v1-v8,lr,pc}
 | ||||||
|  | diff --git a/libs/context/src/asm/make_arm64_aapcs_macho_gas.S b/libs/context/src/asm/make_arm64_aapcs_macho_gas.S
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..67d2f89
 | ||||||
|  | --- /dev/null
 | ||||||
|  | +++ b/libs/context/src/asm/make_arm64_aapcs_macho_gas.S
 | ||||||
|  | @@ -0,0 +1,87 @@
 | ||||||
|  | +/*
 | ||||||
|  | +            Copyright Oliver Kowalke 2014.
 | ||||||
|  | +   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  |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c|  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |    s16    |    s17    |    s18    |    s19    |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |  8  |  9  |  10 |  11 |  12 |  13 |  14 |  15 |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c|  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |    s20    |    s21    |    s22    |    s23    |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |  16 |  17 |  18 |  19 |  20 |  21 |  22 |  23 |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  | 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58| 0x5c|  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |    s24    |    s25    |    s26    |    s27    |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |  24 |  25 |  26 |  27 |  28 |  29 |  30 |  31 |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  | 0x60| 0x64| 0x68| 0x6c| 0x70| 0x74| 0x78| 0x7c|  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |    s28    |    s29    |    s30    |    s31    |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |  32 |  33 |  34 |  35 |  36 |  37 |  38 |  39 |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  | 0x80| 0x84| 0x88| 0x8c| 0x90| 0x94| 0x98| 0x9c|  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |   sjlj    |     v1    |     v2    |     v3    |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |  40 |  41 |  42 |  43 |  44 |  45 |  46 |  47 |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  | 0xa0| 0xa4| 0xa8| 0xac| 0xb0| 0xb4| 0xb8| 0xbc|  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |    v4     |     v5    |     v6    |     v7    |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |  48 |  49 |  50 |  51 |  52 |  53 |           |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  | 0xc0| 0xc4| 0xc8| 0xcc| 0xd0| 0xd4|           |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |    v8     |     lr    |     pc    |           |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *                                                     *
 | ||||||
|  | + *******************************************************/
 | ||||||
|  | +
 | ||||||
|  | +.text
 | ||||||
|  | +.globl _make_fcontext
 | ||||||
|  | +.align 2
 | ||||||
|  | +_make_fcontext:
 | ||||||
|  | +    @ shift address in A1 to lower 16 byte boundary
 | ||||||
|  | +    bic  a1, a1, #15
 | ||||||
|  | +
 | ||||||
|  | +    @ reserve space for context-data on context-stack
 | ||||||
|  | +    sub  a1, a1, #216
 | ||||||
|  | +
 | ||||||
|  | +    @ third arg of make_fcontext() == address of context-function
 | ||||||
|  | +    str  a3, [a1,#208]
 | ||||||
|  | +
 | ||||||
|  | +    @ compute abs address of label finish
 | ||||||
|  | +    adr  a2, finish
 | ||||||
|  | +    @ save address of finish as return-address for context-function
 | ||||||
|  | +    @ will be entered after context-function returns
 | ||||||
|  | +    str  a2, [a1,#200]
 | ||||||
|  | +
 | ||||||
|  | +    bx  lr @ return pointer to context-data
 | ||||||
|  | +
 | ||||||
|  | +finish:
 | ||||||
|  | +    @ exit code is zero
 | ||||||
|  | +    mov  a1, #0
 | ||||||
|  | +    @ exit application
 | ||||||
|  | +    bl  __exit
 | ||||||
|  | -- 
 | ||||||
|  | 2.3.5 | ||||||
|  | 
 | ||||||
							
								
								
									
										86
									
								
								boost-context-0002-make-ARM64-unsupported.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								boost-context-0002-make-ARM64-unsupported.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,86 @@ | |||||||
|  | From c5292fea24c003c3279e0f0770a93cae829e75e3 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Oliver Kowalke <oliver.kowalke@gmx.de> | ||||||
|  | Date: Fri, 21 Nov 2014 20:21:22 +0100 | ||||||
|  | Subject: [PATCH 02/54] make ARM64 unsupported | ||||||
|  | 
 | ||||||
|  | ---
 | ||||||
|  |  build/Jamfile.v2 | 30 ++++++++++++++++++++++++++++++ | ||||||
|  |  1 file changed, 30 insertions(+) | ||||||
|  | 
 | ||||||
|  | diff --git a/libs/context/build/Jamfile.v2 b/libs/context/build/Jamfile.v2
 | ||||||
|  | index 32d5222..112e979 100644
 | ||||||
|  | --- a/libs/context/build/Jamfile.v2
 | ||||||
|  | +++ b/libs/context/build/Jamfile.v2
 | ||||||
|  | @@ -14,9 +14,22 @@ import os ;
 | ||||||
|  |  import toolset ; | ||||||
|  |  import architecture ; | ||||||
|  |   | ||||||
|  | +feature.feature segmented-stacks : on : optional propagated composite ;
 | ||||||
|  | +feature.compose <segmented-stacks>on : <define>BOOST_USE_SEGMENTED_STACKS ;
 | ||||||
|  | +
 | ||||||
|  |  project boost/context | ||||||
|  |      : requirements | ||||||
|  | +      <library>/boost/system//boost_system
 | ||||||
|  | +      <library>/boost/thread//boost_thread
 | ||||||
|  |        <os>SOLARIS:<define>_XOPEN_SOURCE=600 | ||||||
|  | +      <toolset>gcc-4.7,<segmented-stacks>on:<cxxflags>-fsplit-stack
 | ||||||
|  | +      <toolset>gcc-4.7,<segmented-stacks>on:<linkflags>"-static-libgcc"
 | ||||||
|  | +      <toolset>gcc-4.8,<segmented-stacks>on:<cxxflags>-fsplit-stack
 | ||||||
|  | +      <toolset>gcc-4.8,<segmented-stacks>on:<linkflags>"-static-libgcc"
 | ||||||
|  | +      <toolset>gcc-4.9,<segmented-stacks>on:<cxxflags>-fsplit-stack
 | ||||||
|  | +      <toolset>gcc-4.9,<segmented-stacks>on:<linkflags>"-static-libgcc"
 | ||||||
|  | +      <toolset>clang-3.4,<segmented-stacks>on:<cxxflags>-fsplit-stack
 | ||||||
|  | +      <toolset>clang-3.4,<segmented-stacks>on:<linkflags>"-static-libgcc"
 | ||||||
|  |        <link>shared:<define>BOOST_CONTEXT_DYN_LINK=1 | ||||||
|  |        <define>BOOST_CONTEXT_SOURCE | ||||||
|  |      : usage-requirements | ||||||
|  | @@ -214,6 +227,7 @@ alias asm_context_sources
 | ||||||
|  |  alias asm_context_sources | ||||||
|  |     : [ make asm/make_arm64_aapcs_macho_gas.o : asm/make_arm64_aapcs_macho_gas.S : @gas64 ] | ||||||
|  |       [ make asm/jump_arm64_aapcs_macho_gas.o : asm/jump_arm64_aapcs_macho_gas.S : @gas64 ] | ||||||
|  | +     untested.cpp
 | ||||||
|  |     : <abi>aapcs | ||||||
|  |       <address-model>64 | ||||||
|  |       <architecture>arm | ||||||
|  | @@ -223,6 +237,7 @@ alias asm_context_sources
 | ||||||
|  |  alias asm_context_sources | ||||||
|  |     : asm/make_arm64_aapcs_macho_gas.S | ||||||
|  |       asm/jump_arm64_aapcs_macho_gas.S | ||||||
|  | +     untested.cpp
 | ||||||
|  |     : <abi>aapcs | ||||||
|  |       <address-model>64 | ||||||
|  |       <architecture>arm | ||||||
|  | @@ -233,6 +248,7 @@ alias asm_context_sources
 | ||||||
|  |  alias asm_context_sources | ||||||
|  |     : asm/make_arm64_aapcs_macho_gas.S | ||||||
|  |       asm/jump_arm64_aapcs_macho_gas.S | ||||||
|  | +     untested.cpp
 | ||||||
|  |     : <abi>aapcs | ||||||
|  |       <address-model>64 | ||||||
|  |       <architecture>arm | ||||||
|  | @@ -799,8 +815,22 @@ alias select_asm_context_sources
 | ||||||
|  |      [ architecture.address-model ] | ||||||
|  |    ; | ||||||
|  |   | ||||||
|  | +
 | ||||||
|  | +alias stack_traits_sources
 | ||||||
|  | +    : windows/stack_traits.cpp
 | ||||||
|  | +    : <target-os>windows
 | ||||||
|  | +    ;
 | ||||||
|  | +
 | ||||||
|  | +alias stack_traits_sources
 | ||||||
|  | +    : posix/stack_traits.cpp
 | ||||||
|  | +    ;
 | ||||||
|  | +
 | ||||||
|  | +explicit stack_traits_sources ;
 | ||||||
|  | +
 | ||||||
|  | +
 | ||||||
|  |  lib boost_context | ||||||
|  |     : select_asm_context_sources | ||||||
|  | +     stack_traits_sources
 | ||||||
|  |     ; | ||||||
|  |   | ||||||
|  |  boost-install boost_context ; | ||||||
|  | -- 
 | ||||||
|  | 2.3.5 | ||||||
|  | 
 | ||||||
| @ -0,0 +1,329 @@ | |||||||
|  | From efcdb6aae82d2ade5b81183e961e9ef282eaca31 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Evgeny Shapovalov <johncapful@yandex-team.ru> | ||||||
|  | Date: Tue, 30 Dec 2014 17:14:49 +0300 | ||||||
|  | Subject: [PATCH 15/54] jump and make stubs for arm64 (aarch64) for iOS ABI | ||||||
|  | 
 | ||||||
|  | ---
 | ||||||
|  |  src/asm/jump_arm64_aapcs_macho_gas.S | 126 +++++++++++++++++------------------ | ||||||
|  |  src/asm/make_arm64_aapcs_macho_gas.S |  72 ++++++++++---------- | ||||||
|  |  2 files changed, 95 insertions(+), 103 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/libs/context/src/asm/jump_arm64_aapcs_macho_gas.S b/libs/context/src/asm/jump_arm64_aapcs_macho_gas.S
 | ||||||
|  | index 6ad5b38..29df555 100644
 | ||||||
|  | --- a/libs/context/src/asm/jump_arm64_aapcs_macho_gas.S
 | ||||||
|  | +++ b/libs/context/src/asm/jump_arm64_aapcs_macho_gas.S
 | ||||||
|  | @@ -1,10 +1,3 @@
 | ||||||
|  | -/*
 | ||||||
|  | -            Copyright Oliver Kowalke 2014.
 | ||||||
|  | -   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)
 | ||||||
|  | -*/
 | ||||||
|  | -
 | ||||||
|  |  /******************************************************* | ||||||
|  |   *                                                     * | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  | @@ -12,113 +5,116 @@
 | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  |   *  | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c|  * | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  | - *  |    s16    |    s17    |    s18    |    s19    |  *
 | ||||||
|  | + *  |    d8     |    d9     |    d10    |    d11    |  *
 | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  |   *  |  8  |  9  |  10 |  11 |  12 |  13 |  14 |  15 |  * | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  |   *  | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c|  * | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  | - *  |    s20    |    s21    |    s22    |    s23    |  *
 | ||||||
|  | + *  |    d12    |    d13    |    d14    |    d15    |  *
 | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  |   *  |  16 |  17 |  18 |  19 |  20 |  21 |  22 |  23 |  * | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  |   *  | 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58| 0x5c|  * | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  | - *  |    s24    |    s25    |    s26    |    s27    |  *
 | ||||||
|  | + *  |    x19    |    x20    |    x21    |    x22    |  *
 | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  |   *  |  24 |  25 |  26 |  27 |  28 |  29 |  30 |  31 |  * | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  |   *  | 0x60| 0x64| 0x68| 0x6c| 0x70| 0x74| 0x78| 0x7c|  * | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  | - *  |    s28    |    s29    |    s30    |    s31    |  *
 | ||||||
|  | + *  |    x23    |    x24    |    x25    |    x26    |  *
 | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  |   *  |  32 |  33 |  34 |  35 |  36 |  37 |  38 |  39 |  * | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  |   *  | 0x80| 0x84| 0x88| 0x8c| 0x90| 0x94| 0x98| 0x9c|  * | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  | - *  |   sjlj    |     v1    |     v2    |     v3    |  *
 | ||||||
|  | - *  -------------------------------------------------  *
 | ||||||
|  | - *  -------------------------------------------------  *
 | ||||||
|  | - *  |  40 |  41 |  42 |  43 |  44 |  45 |  46 |  47 |  *
 | ||||||
|  | + *  |    x27    |    x28    |    FP     |     LR    |  *
 | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  | - *  | 0xa0| 0xa4| 0xa8| 0xac| 0xb0| 0xb4| 0xb8| 0xbc|  *
 | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  | - *  |    v4     |     v5    |     v6    |     v7    |  *
 | ||||||
|  | + *  |  40 |  41 |  42 | 43  |           |           |  *
 | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  | + *  | 0xa0| 0xa4| 0xa8| 0xac|           |           |  *
 | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  | - *  |  48 |  49 |  50 |  51 |  52 |  53 |           |  *
 | ||||||
|  | - *  -------------------------------------------------  *
 | ||||||
|  | - *  | 0xc0| 0xc4| 0xc8| 0xcc| 0xd0| 0xd4|           |  *
 | ||||||
|  | - *  -------------------------------------------------  *
 | ||||||
|  | - *  |    v8     |     lr    |     pc    |           |  *
 | ||||||
|  | + *  |     PC    |   align   |           |           |  *
 | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  |   *                                                     * | ||||||
|  |   *******************************************************/ | ||||||
|  |   | ||||||
|  |  .text | ||||||
|  |  .globl _jump_fcontext | ||||||
|  | -.align 2
 | ||||||
|  | +.balign 16
 | ||||||
|  |  _jump_fcontext: | ||||||
|  | -    @ save LR as PC
 | ||||||
|  | -    push {lr}
 | ||||||
|  | -    @ save V1-V8,LR
 | ||||||
|  | -    push {v1-v8,lr}
 | ||||||
|  | -
 | ||||||
|  | -    @ locate TLS to save/restore SjLj handler
 | ||||||
|  | -    mrc  p15, 0, v2, c13, c0, #3
 | ||||||
|  | -    bic  v2, v2, #3
 | ||||||
|  | -
 | ||||||
|  | -    @ load TLS[__PTK_LIBC_DYLD_Unwind_SjLj_Key]
 | ||||||
|  | -    ldr  v1, [v2, #72]
 | ||||||
|  | -    @ save SjLj handler
 | ||||||
|  | -    push  {v1}
 | ||||||
|  | -
 | ||||||
|  | -    @ prepare stack for FPU
 | ||||||
|  | -    sub  sp, sp, #128
 | ||||||
|  | +    ; prepare stack for GP + FPU
 | ||||||
|  | +    sub  sp, sp, #0xb0
 | ||||||
|  |   | ||||||
|  |  #if (defined(__VFP_FP__) && !defined(__SOFTFP__)) | ||||||
|  | -    @ test if fpu env should be preserved
 | ||||||
|  | -    cmp  a4, #0
 | ||||||
|  | -    beq  1f
 | ||||||
|  | +    ; test if fpu env should be preserved
 | ||||||
|  | +    cmp  w3, #0
 | ||||||
|  | +    b.eq  1f
 | ||||||
|  |   | ||||||
|  | -    @ save S16-S31
 | ||||||
|  | -    vstmia  sp, {d8-d15}
 | ||||||
|  | +    ; save d8 - d15
 | ||||||
|  | +    stp    d8, d9,   [x0, #0x00]
 | ||||||
|  | +    stp    d10, d11, [x0, #0x10]
 | ||||||
|  | +    stp    d12, d13, [x0, #0x20]
 | ||||||
|  | +    stp    d14, d15, [x0, #0x30]
 | ||||||
|  |   | ||||||
|  |  1: | ||||||
|  |  #endif | ||||||
|  |   | ||||||
|  | -    @ store RSP (pointing to context-data) in A1
 | ||||||
|  | -    str  sp, [a1]
 | ||||||
|  | +    ; save x19-x30
 | ||||||
|  | +    stp x19, x20, [sp, #0x40]
 | ||||||
|  | +    stp x21, x22, [sp, #0x50]
 | ||||||
|  | +    stp x23, x24, [sp, #0x60]
 | ||||||
|  | +    stp x25, x26, [sp, #0x70]
 | ||||||
|  | +    stp x27, x28, [sp, #0x80]
 | ||||||
|  | +    stp fp, lr,   [sp, #0x90]
 | ||||||
|  | +
 | ||||||
|  | +    ; save LR as PC
 | ||||||
|  | +    str lr, [sp, #0xa0]
 | ||||||
|  |   | ||||||
|  | -    @ restore RSP (pointing to context-data) from A2
 | ||||||
|  | -    mov  sp, a2
 | ||||||
|  | +    ; store RSP (pointing to context-data) in first argument (x0).
 | ||||||
|  | +    ; STR cannot have sp as a target register
 | ||||||
|  | +    mov  x4, sp
 | ||||||
|  | +    str  x4, [x0]
 | ||||||
|  | +
 | ||||||
|  | +    ; restore RSP (pointing to context-data) from A2 (x1)
 | ||||||
|  | +    mov  sp, x1
 | ||||||
|  |   | ||||||
|  |  #if (defined(__VFP_FP__) && !defined(__SOFTFP__)) | ||||||
|  | -    @ test if fpu env should be preserved
 | ||||||
|  | -    cmp  a4, #0
 | ||||||
|  | -    beq  2f
 | ||||||
|  | +    ; test if fpu env should be preserved
 | ||||||
|  | +    cmp  w3, #0
 | ||||||
|  | +    b.eq  2f
 | ||||||
|  |   | ||||||
|  | -    @ restore S16-S31
 | ||||||
|  | -    vldmia  sp, {d8-d15}
 | ||||||
|  | +    ; load d8 - d15
 | ||||||
|  | +    ldp    d8, d9,   [x0, #0x00]
 | ||||||
|  | +    ldp    d10, d11, [x0, #0x10]
 | ||||||
|  | +    ldp    d12, d13, [x0, #0x20]
 | ||||||
|  | +    ldp    d14, d15, [x0, #0x30]
 | ||||||
|  |   | ||||||
|  |  2: | ||||||
|  |  #endif | ||||||
|  |   | ||||||
|  | -    @ prepare stack for FPU
 | ||||||
|  | -    add  sp, sp, #128
 | ||||||
|  | +    ; load x19-x30
 | ||||||
|  | +    ldp x19, x20, [sp, #0x40]
 | ||||||
|  | +    ldp x21, x22, [sp, #0x50]
 | ||||||
|  | +    ldp x23, x24, [sp, #0x60]
 | ||||||
|  | +    ldp x25, x26, [sp, #0x70]
 | ||||||
|  | +    ldp x27, x28, [sp, #0x80]
 | ||||||
|  | +    ldp fp, lr,   [sp, #0x90]
 | ||||||
|  | +
 | ||||||
|  | +    ; use third arg as return value after jump
 | ||||||
|  | +    ; and as first arg in context function
 | ||||||
|  | +    mov  x0, x2
 | ||||||
|  | +
 | ||||||
|  | +    ; load pc
 | ||||||
|  | +    ldr x4, [sp, #0xa0]
 | ||||||
|  |   | ||||||
|  | -    @ restore SjLj handler
 | ||||||
|  | -    pop  {v1}
 | ||||||
|  | -    @ store SjLj handler in TLS
 | ||||||
|  | -    str  v1, [v2, #72]
 | ||||||
|  | +    ; restore stack from GP + FPU
 | ||||||
|  | +    add  sp, sp, #0xb0
 | ||||||
|  |   | ||||||
|  | -    @ use third arg as return value after jump
 | ||||||
|  | -    @ and as first arg in context function
 | ||||||
|  | -    mov  a1, a3
 | ||||||
|  | -    
 | ||||||
|  | -    @ restore v1-V8,LR,PC
 | ||||||
|  | -    pop {v1-v8,lr,pc}
 | ||||||
|  | +    ret x4
 | ||||||
|  | diff --git a/libs/context/src/asm/make_arm64_aapcs_macho_gas.S b/libs/context/src/asm/make_arm64_aapcs_macho_gas.S
 | ||||||
|  | index 67d2f89..6b55a08 100644
 | ||||||
|  | --- a/libs/context/src/asm/make_arm64_aapcs_macho_gas.S
 | ||||||
|  | +++ b/libs/context/src/asm/make_arm64_aapcs_macho_gas.S
 | ||||||
|  | @@ -1,10 +1,3 @@
 | ||||||
|  | -/*
 | ||||||
|  | -            Copyright Oliver Kowalke 2014.
 | ||||||
|  | -   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)
 | ||||||
|  | -*/
 | ||||||
|  | -
 | ||||||
|  |  /******************************************************* | ||||||
|  |   *                                                     * | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  | @@ -12,76 +5,79 @@
 | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  |   *  | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c|  * | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  | - *  |    s16    |    s17    |    s18    |    s19    |  *
 | ||||||
|  | + *  |    d8     |    d9     |    d10    |    d11    |  *
 | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  |   *  |  8  |  9  |  10 |  11 |  12 |  13 |  14 |  15 |  * | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  |   *  | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c|  * | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  | - *  |    s20    |    s21    |    s22    |    s23    |  *
 | ||||||
|  | + *  |    d12    |    d13    |    d14    |    d15    |  *
 | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  |   *  |  16 |  17 |  18 |  19 |  20 |  21 |  22 |  23 |  * | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  |   *  | 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58| 0x5c|  * | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  | - *  |    s24    |    s25    |    s26    |    s27    |  *
 | ||||||
|  | + *  |    x19    |    x20    |    x21    |    x22    |  *
 | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  |   *  |  24 |  25 |  26 |  27 |  28 |  29 |  30 |  31 |  * | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  |   *  | 0x60| 0x64| 0x68| 0x6c| 0x70| 0x74| 0x78| 0x7c|  * | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  | - *  |    s28    |    s29    |    s30    |    s31    |  *
 | ||||||
|  | + *  |    x23    |    x24    |    x25    |    x26    |  *
 | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  |   *  |  32 |  33 |  34 |  35 |  36 |  37 |  38 |  39 |  * | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  |   *  | 0x80| 0x84| 0x88| 0x8c| 0x90| 0x94| 0x98| 0x9c|  * | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  | - *  |   sjlj    |     v1    |     v2    |     v3    |  *
 | ||||||
|  | - *  -------------------------------------------------  *
 | ||||||
|  | - *  -------------------------------------------------  *
 | ||||||
|  | - *  |  40 |  41 |  42 |  43 |  44 |  45 |  46 |  47 |  *
 | ||||||
|  | + *  |    x27    |    x28    |    FP     |     LR    |  *
 | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  | - *  | 0xa0| 0xa4| 0xa8| 0xac| 0xb0| 0xb4| 0xb8| 0xbc|  *
 | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  | - *  |    v4     |     v5    |     v6    |     v7    |  *
 | ||||||
|  | + *  |  40 |  41 |  42 | 43  |           |           |  *
 | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  | + *  | 0xa0| 0xa4| 0xa8| 0xac|           |           |  *
 | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  | - *  |  48 |  49 |  50 |  51 |  52 |  53 |           |  *
 | ||||||
|  | - *  -------------------------------------------------  *
 | ||||||
|  | - *  | 0xc0| 0xc4| 0xc8| 0xcc| 0xd0| 0xd4|           |  *
 | ||||||
|  | - *  -------------------------------------------------  *
 | ||||||
|  | - *  |    v8     |     lr    |     pc    |           |  *
 | ||||||
|  | + *  |     PC    |   align   |           |           |  *
 | ||||||
|  |   *  -------------------------------------------------  * | ||||||
|  |   *                                                     * | ||||||
|  |   *******************************************************/ | ||||||
|  |   | ||||||
|  | +
 | ||||||
|  |  .text | ||||||
|  |  .globl _make_fcontext | ||||||
|  | -.align 2
 | ||||||
|  | +.balign 16
 | ||||||
|  | +
 | ||||||
|  |  _make_fcontext: | ||||||
|  | -    @ shift address in A1 to lower 16 byte boundary
 | ||||||
|  | -    bic  a1, a1, #15
 | ||||||
|  | +    ; shift address in x0 (allocated stack) to lower 16 byte boundary
 | ||||||
|  | +    and x0, x0, ~0xF
 | ||||||
|  | +
 | ||||||
|  | +    ; reserve space for context-data on context-stack
 | ||||||
|  | +    sub  x0, x0, #0xb0
 | ||||||
|  | +
 | ||||||
|  | +    ; third arg of make_fcontext() == address of context-function
 | ||||||
|  | +    ; store address as a PC to jump in
 | ||||||
|  | +    str  x2, [x0, #0xa0]
 | ||||||
|  |   | ||||||
|  | -    @ reserve space for context-data on context-stack
 | ||||||
|  | -    sub  a1, a1, #216
 | ||||||
|  | +    ; compute abs address of label finish
 | ||||||
|  | +    ; 0x0c = 3 instructions * size (4) before label 'finish'
 | ||||||
|  |   | ||||||
|  | -    @ third arg of make_fcontext() == address of context-function
 | ||||||
|  | -    str  a3, [a1,#208]
 | ||||||
|  | +    ; TODO: Numeric offset since llvm still does not support labels in ADR. Fix:
 | ||||||
|  | +    ;       http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20140407/212336.html
 | ||||||
|  | +    adr  x1, 0x0c
 | ||||||
|  |   | ||||||
|  | -    @ compute abs address of label finish
 | ||||||
|  | -    adr  a2, finish
 | ||||||
|  | -    @ save address of finish as return-address for context-function
 | ||||||
|  | -    @ will be entered after context-function returns
 | ||||||
|  | -    str  a2, [a1,#200]
 | ||||||
|  | +    ; save address of finish as return-address for context-function
 | ||||||
|  | +    ; will be entered after context-function returns (LR register)
 | ||||||
|  | +    str  x1, [x0, #0x98]
 | ||||||
|  |   | ||||||
|  | -    bx  lr @ return pointer to context-data
 | ||||||
|  | +    ret  lr ; return pointer to context-data (x0)
 | ||||||
|  |   | ||||||
|  |  finish: | ||||||
|  | -    @ exit code is zero
 | ||||||
|  | -    mov  a1, #0
 | ||||||
|  | -    @ exit application
 | ||||||
|  | +    ; exit code is zero
 | ||||||
|  | +    mov  x0, #0
 | ||||||
|  | +    ; exit application
 | ||||||
|  |      bl  __exit | ||||||
|  | +
 | ||||||
|  | +
 | ||||||
|  | -- 
 | ||||||
|  | 2.3.5 | ||||||
|  | 
 | ||||||
| @ -0,0 +1,40 @@ | |||||||
|  | From de60227a90989e502f5a0ade0c2a5d6bf7af82b8 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Oliver Kowalke <oliver.kowalke@gmx.de> | ||||||
|  | Date: Tue, 30 Dec 2014 21:08:50 +0100 | ||||||
|  | Subject: [PATCH 16/54] remove untested.cpp for ARM64/MACH-O | ||||||
|  | 
 | ||||||
|  | ---
 | ||||||
|  |  build/Jamfile.v2 | 3 --- | ||||||
|  |  1 file changed, 3 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/libs/context/build/Jamfile.v2 b/libs/context/build/Jamfile.v2
 | ||||||
|  | index c2d34cb..c7f2af2 100644
 | ||||||
|  | --- a/libs/context/build/Jamfile.v2
 | ||||||
|  | +++ b/libs/context/build/Jamfile.v2
 | ||||||
|  | @@ -227,7 +227,6 @@ alias asm_context_sources
 | ||||||
|  |  alias asm_context_sources | ||||||
|  |     : [ make asm/make_arm64_aapcs_macho_gas.o : asm/make_arm64_aapcs_macho_gas.S : @gas64 ] | ||||||
|  |       [ make asm/jump_arm64_aapcs_macho_gas.o : asm/jump_arm64_aapcs_macho_gas.S : @gas64 ] | ||||||
|  | -     untested.cpp
 | ||||||
|  |     : <abi>aapcs | ||||||
|  |       <address-model>64 | ||||||
|  |       <architecture>arm | ||||||
|  | @@ -237,7 +236,6 @@ alias asm_context_sources
 | ||||||
|  |  alias asm_context_sources | ||||||
|  |     : asm/make_arm64_aapcs_macho_gas.S | ||||||
|  |       asm/jump_arm64_aapcs_macho_gas.S | ||||||
|  | -     untested.cpp
 | ||||||
|  |     : <abi>aapcs | ||||||
|  |       <address-model>64 | ||||||
|  |       <architecture>arm | ||||||
|  | @@ -248,7 +246,6 @@ alias asm_context_sources
 | ||||||
|  |  alias asm_context_sources | ||||||
|  |     : asm/make_arm64_aapcs_macho_gas.S | ||||||
|  |       asm/jump_arm64_aapcs_macho_gas.S | ||||||
|  | -     untested.cpp
 | ||||||
|  |     : <abi>aapcs | ||||||
|  |       <address-model>64 | ||||||
|  |       <architecture>arm | ||||||
|  | -- 
 | ||||||
|  | 2.3.5 | ||||||
|  | 
 | ||||||
							
								
								
									
										299
									
								
								boost-context-0046-add-support-for-ARM64-ELF.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										299
									
								
								boost-context-0046-add-support-for-ARM64-ELF.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,299 @@ | |||||||
|  | From 8481d3ccfc8e9cd3b689c43418e27ccfe722fcb2 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Oliver Kowalke <oliver.kowalke@gmx.de> | ||||||
|  | Date: Mon, 23 Feb 2015 16:23:11 +0100 | ||||||
|  | Subject: [PATCH 46/54] add support for ARM64/ELF | ||||||
|  | 
 | ||||||
|  | ---
 | ||||||
|  |  build/Jamfile.v2                   |  30 +++++++++ | ||||||
|  |  config/arm.cpp                     |   2 +- | ||||||
|  |  src/asm/jump_arm64_aapcs_elf_gas.S | 131 +++++++++++++++++++++++++++++++++++++ | ||||||
|  |  src/asm/make_arm64_aapcs_elf_gas.S |  85 ++++++++++++++++++++++++ | ||||||
|  |  4 files changed, 247 insertions(+), 1 deletion(-) | ||||||
|  |  create mode 100644 src/asm/jump_arm64_aapcs_elf_gas.S | ||||||
|  |  create mode 100644 src/asm/make_arm64_aapcs_elf_gas.S | ||||||
|  | 
 | ||||||
|  | diff --git a/libs/context/build/Jamfile.v2 b/libs/context/build/Jamfile.v2
 | ||||||
|  | index 80d1c46..4bf3fce 100644
 | ||||||
|  | --- a/libs/context/build/Jamfile.v2
 | ||||||
|  | +++ b/libs/context/build/Jamfile.v2
 | ||||||
|  | @@ -223,6 +223,36 @@ alias asm_context_sources
 | ||||||
|  |     ; | ||||||
|  |   | ||||||
|  |  # ARM64 | ||||||
|  | +# ARM64/AAPCS/ELF
 | ||||||
|  | +alias asm_context_sources
 | ||||||
|  | +   : [ make asm/make_arm64_aapcs_elf_gas.o : asm/make_arm64_aapcs_elf_gas.S : @gas64 ]
 | ||||||
|  | +     [ make asm/jump_arm64_aapcs_elf_gas.o : asm/jump_arm64_aapcs_elf_gas.S : @gas64 ]
 | ||||||
|  | +   : <abi>aapcs
 | ||||||
|  | +     <address-model>64
 | ||||||
|  | +     <architecture>arm
 | ||||||
|  | +     <binary-format>elf
 | ||||||
|  | +   ;
 | ||||||
|  | +
 | ||||||
|  | +alias asm_context_sources
 | ||||||
|  | +   : asm/make_arm64_aapcs_elf_gas.S
 | ||||||
|  | +     asm/jump_arm64_aapcs_elf_gas.S
 | ||||||
|  | +   : <abi>aapcs
 | ||||||
|  | +     <address-model>64
 | ||||||
|  | +     <architecture>arm
 | ||||||
|  | +     <binary-format>elf
 | ||||||
|  | +     <toolset>clang
 | ||||||
|  | +   ;
 | ||||||
|  | +
 | ||||||
|  | +alias asm_context_sources
 | ||||||
|  | +   : asm/make_arm64_aapcs_elf_gas.S
 | ||||||
|  | +     asm/jump_arm64_aapcs_elf_gas.S
 | ||||||
|  | +   : <abi>aapcs
 | ||||||
|  | +     <address-model>64
 | ||||||
|  | +     <architecture>arm
 | ||||||
|  | +     <binary-format>elf
 | ||||||
|  | +     <toolset>gcc
 | ||||||
|  | +   ;
 | ||||||
|  | +
 | ||||||
|  |  # ARM64/AAPCS/MACH-O | ||||||
|  |  alias asm_context_sources | ||||||
|  |     : [ make asm/make_arm64_aapcs_macho_gas.o : asm/make_arm64_aapcs_macho_gas.S : @gas64 ] | ||||||
|  | diff --git a/libs/context/config/arm.cpp b/libs/context/config/arm.cpp
 | ||||||
|  | index 6a83737..6eece0b 100644
 | ||||||
|  | --- a/libs/context/config/arm.cpp
 | ||||||
|  | +++ b/libs/context/config/arm.cpp
 | ||||||
|  | @@ -6,7 +6,7 @@
 | ||||||
|  |  // accompanying file LICENSE_1_0.txt or copy at | ||||||
|  |  // http://www.boost.org/LICENSE_1_0.txt) | ||||||
|  |   | ||||||
|  | -#if !defined(__arm__) && !defined(__thumb__) && \
 | ||||||
|  | +#if !defined(__aarch64__) && !defined(__arm__) && !defined(__thumb__) && \
 | ||||||
|  |      !defined(__TARGET_ARCH_ARM) && !defined(__TARGET_ARCH_THUMB) && \ | ||||||
|  |      !defined(_ARM) && !defined(_M_ARM) | ||||||
|  |  #error "Not ARM" | ||||||
|  | diff --git a/libs/context/src/asm/jump_arm64_aapcs_elf_gas.S b/libs/context/src/asm/jump_arm64_aapcs_elf_gas.S
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..46e029d
 | ||||||
|  | --- /dev/null
 | ||||||
|  | +++ b/libs/context/src/asm/jump_arm64_aapcs_elf_gas.S
 | ||||||
|  | @@ -0,0 +1,131 @@
 | ||||||
|  | +/*
 | ||||||
|  | +            Copyright Edward Nevill 2015
 | ||||||
|  | +   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  |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c|  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |    d8     |    d9     |    d10    |    d11    |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |  8  |  9  |  10 |  11 |  12 |  13 |  14 |  15 |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c|  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |    d12    |    d13    |    d14    |    d15    |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |  16 |  17 |  18 |  19 |  20 |  21 |  22 |  23 |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  | 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58| 0x5c|  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |    x19    |    x20    |    x21    |    x22    |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |  24 |  25 |  26 |  27 |  28 |  29 |  30 |  31 |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  | 0x60| 0x64| 0x68| 0x6c| 0x70| 0x74| 0x78| 0x7c|  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |    x23    |    x24    |    x25    |    x26    |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |  32 |  33 |  34 |  35 |  36 |  37 |  38 |  39 |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  | 0x80| 0x84| 0x88| 0x8c| 0x90| 0x94| 0x98| 0x9c|  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |    x27    |    x28    |    FP     |     LR    |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |  40 |  41 |  42 | 43  |           |           |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  | 0xa0| 0xa4| 0xa8| 0xac|           |           |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |     PC    |   align   |           |           |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *                                                     *
 | ||||||
|  | + *******************************************************/
 | ||||||
|  | +
 | ||||||
|  | +.cpu    generic+fp+simd
 | ||||||
|  | +.text
 | ||||||
|  | +.align  2
 | ||||||
|  | +.global jump_fcontext
 | ||||||
|  | +.type   jump_fcontext, %function
 | ||||||
|  | +jump_fcontext:
 | ||||||
|  | +    # prepare stack for GP + FPU
 | ||||||
|  | +    sub  sp, sp, #0xb0
 | ||||||
|  | +
 | ||||||
|  | +# Because gcc may save integer registers in fp registers across a
 | ||||||
|  | +# function call we cannot skip saving the fp registers.
 | ||||||
|  | +#
 | ||||||
|  | +# Do not reinstate this test unless you fully understand what you
 | ||||||
|  | +# are doing.
 | ||||||
|  | +#
 | ||||||
|  | +#    # test if fpu env should be preserved
 | ||||||
|  | +#    cmp  w3, #0
 | ||||||
|  | +#    b.eq  1f
 | ||||||
|  | +
 | ||||||
|  | +    # save d8 - d15
 | ||||||
|  | +    stp    d8, d9,   [sp, #0x00]
 | ||||||
|  | +    stp    d10, d11, [sp, #0x10]
 | ||||||
|  | +    stp    d12, d13, [sp, #0x20]
 | ||||||
|  | +    stp    d14, d15, [sp, #0x30]
 | ||||||
|  | +
 | ||||||
|  | +1:
 | ||||||
|  | +    # save x19-x30
 | ||||||
|  | +    stp x19, x20, [sp, #0x40]
 | ||||||
|  | +    stp x21, x22, [sp, #0x50]
 | ||||||
|  | +    stp x23, x24, [sp, #0x60]
 | ||||||
|  | +    stp x25, x26, [sp, #0x70]
 | ||||||
|  | +    stp x27, x28, [sp, #0x80]
 | ||||||
|  | +    stp x29, x30, [sp, #0x90]
 | ||||||
|  | +
 | ||||||
|  | +    # save LR as PC
 | ||||||
|  | +    str x30, [sp, #0xa0]
 | ||||||
|  | +
 | ||||||
|  | +    # store RSP (pointing to context-data) in first argument (x0).
 | ||||||
|  | +    # STR cannot have sp as a target register
 | ||||||
|  | +    mov  x4, sp
 | ||||||
|  | +    str  x4, [x0]
 | ||||||
|  | +
 | ||||||
|  | +    # restore RSP (pointing to context-data) from A2 (x1)
 | ||||||
|  | +    mov  sp, x1
 | ||||||
|  | +
 | ||||||
|  | +#    # test if fpu env should be preserved
 | ||||||
|  | +#    cmp  w3, #0
 | ||||||
|  | +#    b.eq  2f
 | ||||||
|  | +
 | ||||||
|  | +    # load d8 - d15
 | ||||||
|  | +    ldp    d8, d9,   [x0, #0x00]
 | ||||||
|  | +    ldp    d10, d11, [x0, #0x10]
 | ||||||
|  | +    ldp    d12, d13, [x0, #0x20]
 | ||||||
|  | +    ldp    d14, d15, [x0, #0x30]
 | ||||||
|  | +
 | ||||||
|  | +2:
 | ||||||
|  | +    # load x19-x30
 | ||||||
|  | +    ldp x19, x20, [sp, #0x40]
 | ||||||
|  | +    ldp x21, x22, [sp, #0x50]
 | ||||||
|  | +    ldp x23, x24, [sp, #0x60]
 | ||||||
|  | +    ldp x25, x26, [sp, #0x70]
 | ||||||
|  | +    ldp x27, x28, [sp, #0x80]
 | ||||||
|  | +    ldp x29, x30, [sp, #0x90]
 | ||||||
|  | +
 | ||||||
|  | +    # use third arg as return value after jump
 | ||||||
|  | +    # and as first arg in context function
 | ||||||
|  | +    mov  x0, x2
 | ||||||
|  | +
 | ||||||
|  | +    # load pc
 | ||||||
|  | +    ldr x4, [sp, #0xa0]
 | ||||||
|  | +
 | ||||||
|  | +    # restore stack from GP + FPU
 | ||||||
|  | +    add  sp, sp, #0xb0
 | ||||||
|  | +
 | ||||||
|  | +    ret x4
 | ||||||
|  | +.size   jump_fcontext,.-jump_fcontext
 | ||||||
|  | +# Mark that we don't need executable stack.
 | ||||||
|  | +.section .note.GNU-stack,"",%progbits
 | ||||||
|  | diff --git a/libs/context/src/asm/make_arm64_aapcs_elf_gas.S b/libs/context/src/asm/make_arm64_aapcs_elf_gas.S
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..b208ab7
 | ||||||
|  | --- /dev/null
 | ||||||
|  | +++ b/libs/context/src/asm/make_arm64_aapcs_elf_gas.S
 | ||||||
|  | @@ -0,0 +1,85 @@
 | ||||||
|  | +/*
 | ||||||
|  | +            Copyright Edward Nevill 2015
 | ||||||
|  | +   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  |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c|  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |    d8     |    d9     |    d10    |    d11    |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |  8  |  9  |  10 |  11 |  12 |  13 |  14 |  15 |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c|  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |    d12    |    d13    |    d14    |    d15    |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |  16 |  17 |  18 |  19 |  20 |  21 |  22 |  23 |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  | 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58| 0x5c|  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |    x19    |    x20    |    x21    |    x22    |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |  24 |  25 |  26 |  27 |  28 |  29 |  30 |  31 |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  | 0x60| 0x64| 0x68| 0x6c| 0x70| 0x74| 0x78| 0x7c|  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |    x23    |    x24    |    x25    |    x26    |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |  32 |  33 |  34 |  35 |  36 |  37 |  38 |  39 |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  | 0x80| 0x84| 0x88| 0x8c| 0x90| 0x94| 0x98| 0x9c|  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |    x27    |    x28    |    FP     |     LR    |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |  40 |  41 |  42 | 43  |           |           |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  | 0xa0| 0xa4| 0xa8| 0xac|           |           |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *  |     PC    |   align   |           |           |  *
 | ||||||
|  | + *  -------------------------------------------------  *
 | ||||||
|  | + *                                                     *
 | ||||||
|  | + *******************************************************/
 | ||||||
|  | +
 | ||||||
|  | +.cpu    generic+fp+simd
 | ||||||
|  | +.text
 | ||||||
|  | +.align  2
 | ||||||
|  | +.global make_fcontext
 | ||||||
|  | +.type   make_fcontext, %function
 | ||||||
|  | +make_fcontext:
 | ||||||
|  | +    # shift address in x0 (allocated stack) to lower 16 byte boundary
 | ||||||
|  | +    and x0, x0, ~0xF
 | ||||||
|  | +
 | ||||||
|  | +    # reserve space for context-data on context-stack
 | ||||||
|  | +    sub  x0, x0, #0xb0
 | ||||||
|  | +
 | ||||||
|  | +    # third arg of make_fcontext() == address of context-function
 | ||||||
|  | +    # store address as a PC to jump in
 | ||||||
|  | +    str  x2, [x0, #0xa0]
 | ||||||
|  | +
 | ||||||
|  | +    # save address of finish as return-address for context-function
 | ||||||
|  | +    # will be entered after context-function returns (LR register)
 | ||||||
|  | +    adr  x1, finish
 | ||||||
|  | +    str  x1, [x0, #0x98]
 | ||||||
|  | +
 | ||||||
|  | +    ret  x30 // return pointer to context-data (x0)
 | ||||||
|  | +
 | ||||||
|  | +finish:
 | ||||||
|  | +    # exit code is zero
 | ||||||
|  | +    mov  x0, #0
 | ||||||
|  | +    # exit application
 | ||||||
|  | +    bl  _exit
 | ||||||
|  | +
 | ||||||
|  | +.size   make_fcontext,.-make_fcontext
 | ||||||
|  | +# Mark that we don't need executable stack.
 | ||||||
|  | +.section .note.GNU-stack,"",%progbits
 | ||||||
|  | -- 
 | ||||||
|  | 2.3.5 | ||||||
|  | 
 | ||||||
							
								
								
									
										169
									
								
								boost-context-0047-some-fixes-for-ARM64.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										169
									
								
								boost-context-0047-some-fixes-for-ARM64.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,169 @@ | |||||||
|  | From 1e2584e00c71e120d652f0d4ae105e54ceca16a8 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Oliver Kowalke <oliver.kowalke@gmx.de> | ||||||
|  | Date: Tue, 24 Feb 2015 17:50:14 +0100 | ||||||
|  | Subject: [PATCH 47/54] some fixes for ARM64 | ||||||
|  | 
 | ||||||
|  | ---
 | ||||||
|  |  src/asm/jump_arm64_aapcs_elf_gas.S   | 44 ++++++++++++++++++------------------ | ||||||
|  |  src/asm/jump_arm64_aapcs_macho_gas.S | 44 ++++++++++++++++++------------------ | ||||||
|  |  2 files changed, 44 insertions(+), 44 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/libs/context/src/asm/jump_arm64_aapcs_elf_gas.S b/libs/context/src/asm/jump_arm64_aapcs_elf_gas.S
 | ||||||
|  | index 46e029d..889008f 100644
 | ||||||
|  | --- a/libs/context/src/asm/jump_arm64_aapcs_elf_gas.S
 | ||||||
|  | +++ b/libs/context/src/asm/jump_arm64_aapcs_elf_gas.S
 | ||||||
|  | @@ -71,22 +71,22 @@ jump_fcontext:
 | ||||||
|  |  #    b.eq  1f | ||||||
|  |   | ||||||
|  |      # save d8 - d15 | ||||||
|  | -    stp    d8, d9,   [sp, #0x00]
 | ||||||
|  | -    stp    d10, d11, [sp, #0x10]
 | ||||||
|  | -    stp    d12, d13, [sp, #0x20]
 | ||||||
|  | -    stp    d14, d15, [sp, #0x30]
 | ||||||
|  | +    stp  d8,  d9,  [sp, #0x00]
 | ||||||
|  | +    stp  d10, d11, [sp, #0x10]
 | ||||||
|  | +    stp  d12, d13, [sp, #0x20]
 | ||||||
|  | +    stp  d14, d15, [sp, #0x30]
 | ||||||
|  |   | ||||||
|  |  1: | ||||||
|  |      # save x19-x30 | ||||||
|  | -    stp x19, x20, [sp, #0x40]
 | ||||||
|  | -    stp x21, x22, [sp, #0x50]
 | ||||||
|  | -    stp x23, x24, [sp, #0x60]
 | ||||||
|  | -    stp x25, x26, [sp, #0x70]
 | ||||||
|  | -    stp x27, x28, [sp, #0x80]
 | ||||||
|  | -    stp x29, x30, [sp, #0x90]
 | ||||||
|  | +    stp  x19, x20, [sp, #0x40]
 | ||||||
|  | +    stp  x21, x22, [sp, #0x50]
 | ||||||
|  | +    stp  x23, x24, [sp, #0x60]
 | ||||||
|  | +    stp  x25, x26, [sp, #0x70]
 | ||||||
|  | +    stp  x27, x28, [sp, #0x80]
 | ||||||
|  | +    stp  fp,  lr,  [sp, #0x90]
 | ||||||
|  |   | ||||||
|  |      # save LR as PC | ||||||
|  | -    str x30, [sp, #0xa0]
 | ||||||
|  | +    str  lr, [sp, #0xa0]
 | ||||||
|  |   | ||||||
|  |      # store RSP (pointing to context-data) in first argument (x0). | ||||||
|  |      # STR cannot have sp as a target register | ||||||
|  | @@ -101,26 +101,26 @@ jump_fcontext:
 | ||||||
|  |  #    b.eq  2f | ||||||
|  |   | ||||||
|  |      # load d8 - d15 | ||||||
|  | -    ldp    d8, d9,   [x0, #0x00]
 | ||||||
|  | -    ldp    d10, d11, [x0, #0x10]
 | ||||||
|  | -    ldp    d12, d13, [x0, #0x20]
 | ||||||
|  | -    ldp    d14, d15, [x0, #0x30]
 | ||||||
|  | +    ldp  d8,  d9,  [sp, #0x00]
 | ||||||
|  | +    ldp  d10, d11, [sp, #0x10]
 | ||||||
|  | +    ldp  d12, d13, [sp, #0x20]
 | ||||||
|  | +    ldp  d14, d15, [sp, #0x30]
 | ||||||
|  |   | ||||||
|  |  2: | ||||||
|  |      # load x19-x30 | ||||||
|  | -    ldp x19, x20, [sp, #0x40]
 | ||||||
|  | -    ldp x21, x22, [sp, #0x50]
 | ||||||
|  | -    ldp x23, x24, [sp, #0x60]
 | ||||||
|  | -    ldp x25, x26, [sp, #0x70]
 | ||||||
|  | -    ldp x27, x28, [sp, #0x80]
 | ||||||
|  | -    ldp x29, x30, [sp, #0x90]
 | ||||||
|  | +    ldp  x19, x20, [sp, #0x40]
 | ||||||
|  | +    ldp  x21, x22, [sp, #0x50]
 | ||||||
|  | +    ldp  x23, x24, [sp, #0x60]
 | ||||||
|  | +    ldp  x25, x26, [sp, #0x70]
 | ||||||
|  | +    ldp  x27, x28, [sp, #0x80]
 | ||||||
|  | +    ldp  fp,  lr,  [sp, #0x90]
 | ||||||
|  |   | ||||||
|  |      # use third arg as return value after jump | ||||||
|  |      # and as first arg in context function | ||||||
|  |      mov  x0, x2 | ||||||
|  |   | ||||||
|  |      # load pc | ||||||
|  | -    ldr x4, [sp, #0xa0]
 | ||||||
|  | +    ldr  x4, [sp, #0xa0]
 | ||||||
|  |   | ||||||
|  |      # restore stack from GP + FPU | ||||||
|  |      add  sp, sp, #0xb0 | ||||||
|  | diff --git a/libs/context/src/asm/jump_arm64_aapcs_macho_gas.S b/libs/context/src/asm/jump_arm64_aapcs_macho_gas.S
 | ||||||
|  | index 29df555..958178e 100644
 | ||||||
|  | --- a/libs/context/src/asm/jump_arm64_aapcs_macho_gas.S
 | ||||||
|  | +++ b/libs/context/src/asm/jump_arm64_aapcs_macho_gas.S
 | ||||||
|  | @@ -58,24 +58,24 @@ _jump_fcontext:
 | ||||||
|  |      b.eq  1f | ||||||
|  |   | ||||||
|  |      ; save d8 - d15 | ||||||
|  | -    stp    d8, d9,   [x0, #0x00]
 | ||||||
|  | -    stp    d10, d11, [x0, #0x10]
 | ||||||
|  | -    stp    d12, d13, [x0, #0x20]
 | ||||||
|  | -    stp    d14, d15, [x0, #0x30]
 | ||||||
|  | +    stp  d8,  d9,  [sp, #0x00]
 | ||||||
|  | +    stp  d10, d11, [sp, #0x10]
 | ||||||
|  | +    stp  d12, d13, [sp, #0x20]
 | ||||||
|  | +    stp  d14, d15, [sp, #0x30]
 | ||||||
|  |   | ||||||
|  |  1: | ||||||
|  |  #endif | ||||||
|  |   | ||||||
|  |      ; save x19-x30 | ||||||
|  | -    stp x19, x20, [sp, #0x40]
 | ||||||
|  | -    stp x21, x22, [sp, #0x50]
 | ||||||
|  | -    stp x23, x24, [sp, #0x60]
 | ||||||
|  | -    stp x25, x26, [sp, #0x70]
 | ||||||
|  | -    stp x27, x28, [sp, #0x80]
 | ||||||
|  | -    stp fp, lr,   [sp, #0x90]
 | ||||||
|  | +    stp  x19, x20, [sp, #0x40]
 | ||||||
|  | +    stp  x21, x22, [sp, #0x50]
 | ||||||
|  | +    stp  x23, x24, [sp, #0x60]
 | ||||||
|  | +    stp  x25, x26, [sp, #0x70]
 | ||||||
|  | +    stp  x27, x28, [sp, #0x80]
 | ||||||
|  | +    stp  fp,  lr,  [sp, #0x90]
 | ||||||
|  |   | ||||||
|  |      ; save LR as PC | ||||||
|  | -    str lr, [sp, #0xa0]
 | ||||||
|  | +    str  lr, [sp, #0xa0]
 | ||||||
|  |   | ||||||
|  |      ; store RSP (pointing to context-data) in first argument (x0). | ||||||
|  |      ; STR cannot have sp as a target register | ||||||
|  | @@ -91,28 +91,28 @@ _jump_fcontext:
 | ||||||
|  |      b.eq  2f | ||||||
|  |   | ||||||
|  |      ; load d8 - d15 | ||||||
|  | -    ldp    d8, d9,   [x0, #0x00]
 | ||||||
|  | -    ldp    d10, d11, [x0, #0x10]
 | ||||||
|  | -    ldp    d12, d13, [x0, #0x20]
 | ||||||
|  | -    ldp    d14, d15, [x0, #0x30]
 | ||||||
|  | +    ldp  d8,  d9,  [sp, #0x00]
 | ||||||
|  | +    ldp  d10, d11, [sp, #0x10]
 | ||||||
|  | +    ldp  d12, d13, [sp, #0x20]
 | ||||||
|  | +    ldp  d14, d15, [sp, #0x30]
 | ||||||
|  |   | ||||||
|  |  2: | ||||||
|  |  #endif | ||||||
|  |   | ||||||
|  |      ; load x19-x30 | ||||||
|  | -    ldp x19, x20, [sp, #0x40]
 | ||||||
|  | -    ldp x21, x22, [sp, #0x50]
 | ||||||
|  | -    ldp x23, x24, [sp, #0x60]
 | ||||||
|  | -    ldp x25, x26, [sp, #0x70]
 | ||||||
|  | -    ldp x27, x28, [sp, #0x80]
 | ||||||
|  | -    ldp fp, lr,   [sp, #0x90]
 | ||||||
|  | +    ldp  x19, x20, [sp, #0x40]
 | ||||||
|  | +    ldp  x21, x22, [sp, #0x50]
 | ||||||
|  | +    ldp  x23, x24, [sp, #0x60]
 | ||||||
|  | +    ldp  x25, x26, [sp, #0x70]
 | ||||||
|  | +    ldp  x27, x28, [sp, #0x80]
 | ||||||
|  | +    ldp  fp,  lr,  [sp, #0x90]
 | ||||||
|  |   | ||||||
|  |      ; use third arg as return value after jump | ||||||
|  |      ; and as first arg in context function | ||||||
|  |      mov  x0, x2 | ||||||
|  |   | ||||||
|  |      ; load pc | ||||||
|  | -    ldr x4, [sp, #0xa0]
 | ||||||
|  | +    ldr  x4, [sp, #0xa0]
 | ||||||
|  |   | ||||||
|  |      ; restore stack from GP + FPU | ||||||
|  |      add  sp, sp, #0xb0 | ||||||
|  | -- 
 | ||||||
|  | 2.3.5 | ||||||
|  | 
 | ||||||
| @ -0,0 +1,38 @@ | |||||||
|  | From 6e2a2b4b309f4f98ece77edc8746fa683a2e05d8 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Oliver Kowalke <oliver.kowalke@gmx.de> | ||||||
|  | Date: Wed, 25 Feb 2015 19:49:30 +0100 | ||||||
|  | Subject: [PATCH 48/54] do not use aliases LR and FP for ARM64/gcc | ||||||
|  | 
 | ||||||
|  | ---
 | ||||||
|  |  src/asm/jump_arm64_aapcs_elf_gas.S | 6 +++--- | ||||||
|  |  1 file changed, 3 insertions(+), 3 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/libs/context/src/asm/jump_arm64_aapcs_elf_gas.S b/libs/context/src/asm/jump_arm64_aapcs_elf_gas.S
 | ||||||
|  | index 889008f..09bd7b5 100644
 | ||||||
|  | --- a/libs/context/src/asm/jump_arm64_aapcs_elf_gas.S
 | ||||||
|  | +++ b/libs/context/src/asm/jump_arm64_aapcs_elf_gas.S
 | ||||||
|  | @@ -83,10 +83,10 @@ jump_fcontext:
 | ||||||
|  |      stp  x23, x24, [sp, #0x60] | ||||||
|  |      stp  x25, x26, [sp, #0x70] | ||||||
|  |      stp  x27, x28, [sp, #0x80] | ||||||
|  | -    stp  fp,  lr,  [sp, #0x90]
 | ||||||
|  | +    stp  x29, x30, [sp, #0x90]
 | ||||||
|  |   | ||||||
|  |      # save LR as PC | ||||||
|  | -    str  lr, [sp, #0xa0]
 | ||||||
|  | +    str  x30, [sp, #0xa0]
 | ||||||
|  |   | ||||||
|  |      # store RSP (pointing to context-data) in first argument (x0). | ||||||
|  |      # STR cannot have sp as a target register | ||||||
|  | @@ -113,7 +113,7 @@ jump_fcontext:
 | ||||||
|  |      ldp  x23, x24, [sp, #0x60] | ||||||
|  |      ldp  x25, x26, [sp, #0x70] | ||||||
|  |      ldp  x27, x28, [sp, #0x80] | ||||||
|  | -    ldp  fp,  lr,  [sp, #0x90]
 | ||||||
|  | +    ldp  x29, x30, [sp, #0x90]
 | ||||||
|  |   | ||||||
|  |      # use third arg as return value after jump | ||||||
|  |      # and as first arg in context function | ||||||
|  | -- 
 | ||||||
|  | 2.3.5 | ||||||
|  | 
 | ||||||
							
								
								
									
										35
									
								
								boost-context-partial-revert-of-0002.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								boost-context-partial-revert-of-0002.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,35 @@ | |||||||
|  | Index: boost_1_57_0/libs/context/build/Jamfile.v2
 | ||||||
|  | ===================================================================
 | ||||||
|  | --- boost_1_57_0.orig/libs/context/build/Jamfile.v2
 | ||||||
|  | +++ boost_1_57_0/libs/context/build/Jamfile.v2
 | ||||||
|  | @@ -14,22 +14,9 @@ import os ;
 | ||||||
|  |  import toolset ; | ||||||
|  |  import architecture ; | ||||||
|  |   | ||||||
|  | -feature.feature segmented-stacks : on : optional propagated composite ;
 | ||||||
|  | -feature.compose <segmented-stacks>on : <define>BOOST_USE_SEGMENTED_STACKS ;
 | ||||||
|  | -
 | ||||||
|  |  project boost/context | ||||||
|  |      : requirements | ||||||
|  | -      <library>/boost/system//boost_system
 | ||||||
|  | -      <library>/boost/thread//boost_thread
 | ||||||
|  |        <os>SOLARIS:<define>_XOPEN_SOURCE=600 | ||||||
|  | -      <toolset>gcc-4.7,<segmented-stacks>on:<cxxflags>-fsplit-stack
 | ||||||
|  | -      <toolset>gcc-4.7,<segmented-stacks>on:<linkflags>"-static-libgcc"
 | ||||||
|  | -      <toolset>gcc-4.8,<segmented-stacks>on:<cxxflags>-fsplit-stack
 | ||||||
|  | -      <toolset>gcc-4.8,<segmented-stacks>on:<linkflags>"-static-libgcc"
 | ||||||
|  | -      <toolset>gcc-4.9,<segmented-stacks>on:<cxxflags>-fsplit-stack
 | ||||||
|  | -      <toolset>gcc-4.9,<segmented-stacks>on:<linkflags>"-static-libgcc"
 | ||||||
|  | -      <toolset>clang-3.4,<segmented-stacks>on:<cxxflags>-fsplit-stack
 | ||||||
|  | -      <toolset>clang-3.4,<segmented-stacks>on:<linkflags>"-static-libgcc"
 | ||||||
|  |        <link>shared:<define>BOOST_CONTEXT_DYN_LINK=1 | ||||||
|  |        <define>BOOST_CONTEXT_SOURCE | ||||||
|  |      : usage-requirements | ||||||
|  | @@ -849,7 +836,6 @@ alias stack_traits_sources
 | ||||||
|  |      ; | ||||||
|  |   | ||||||
|  |  alias stack_traits_sources | ||||||
|  | -    : posix/stack_traits.cpp
 | ||||||
|  |      ; | ||||||
|  |   | ||||||
|  |  explicit stack_traits_sources ; | ||||||
							
								
								
									
										40
									
								
								boost-context-use-sysv-not-aapcs.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								boost-context-use-sysv-not-aapcs.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,40 @@ | |||||||
|  | http://lists.boost.org/Archives/boost/2015/02/220155.php | ||||||
|  | 
 | ||||||
|  | commit d19baee73f90de01375af69a9f8621799c649964 | ||||||
|  | Author: Edward Nevill <edward.nevill_at_[hidden]> | ||||||
|  | Date: Mon Feb 23 17:32:49 2015 +0000 | ||||||
|  | 
 | ||||||
|  |     Fix build for aarch64. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Index: boost_1_57_0/libs/context/build/Jamfile.v2
 | ||||||
|  | ===================================================================
 | ||||||
|  | --- boost_1_57_0.orig/libs/context/build/Jamfile.v2
 | ||||||
|  | +++ boost_1_57_0/libs/context/build/Jamfile.v2
 | ||||||
|  | @@ -214,7 +214,7 @@ alias asm_context_sources
 | ||||||
|  |  alias asm_context_sources | ||||||
|  |     : [ make asm/make_arm64_aapcs_elf_gas.o : asm/make_arm64_aapcs_elf_gas.S : @gas64 ] | ||||||
|  |       [ make asm/jump_arm64_aapcs_elf_gas.o : asm/jump_arm64_aapcs_elf_gas.S : @gas64 ] | ||||||
|  | -   : <abi>aapcs
 | ||||||
|  | +   : <abi>sysv
 | ||||||
|  |       <address-model>64 | ||||||
|  |       <architecture>arm | ||||||
|  |       <binary-format>elf | ||||||
|  | @@ -223,7 +223,7 @@ alias asm_context_sources
 | ||||||
|  |  alias asm_context_sources | ||||||
|  |     : asm/make_arm64_aapcs_elf_gas.S | ||||||
|  |       asm/jump_arm64_aapcs_elf_gas.S | ||||||
|  | -   : <abi>aapcs
 | ||||||
|  | +   : <abi>sysv
 | ||||||
|  |       <address-model>64 | ||||||
|  |       <architecture>arm | ||||||
|  |       <binary-format>elf | ||||||
|  | @@ -233,7 +233,7 @@ alias asm_context_sources
 | ||||||
|  |  alias asm_context_sources | ||||||
|  |     : asm/make_arm64_aapcs_elf_gas.S | ||||||
|  |       asm/jump_arm64_aapcs_elf_gas.S | ||||||
|  | -   : <abi>aapcs
 | ||||||
|  | +   : <abi>sysv
 | ||||||
|  |       <address-model>64 | ||||||
|  |       <architecture>arm | ||||||
|  |       <binary-format>elf | ||||||
							
								
								
									
										30
									
								
								boost.spec
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								boost.spec
									
									
									
									
									
								
							| @ -20,7 +20,7 @@ | |||||||
|   %bcond_without openmpi |   %bcond_without openmpi | ||||||
| %endif | %endif | ||||||
| 
 | 
 | ||||||
| %ifnarch %{ix86} x86_64 %{arm} ppc64 ppc64le | %ifnarch %{ix86} x86_64 %{arm} ppc64 ppc64le aarch64 | ||||||
|   %bcond_with context |   %bcond_with context | ||||||
| %else | %else | ||||||
|   %bcond_without context |   %bcond_without context | ||||||
| @ -32,7 +32,7 @@ Name: boost | |||||||
| Summary: The free peer-reviewed portable C++ source libraries | Summary: The free peer-reviewed portable C++ source libraries | ||||||
| Version: 1.57.0 | Version: 1.57.0 | ||||||
| %define version_enc 1_57_0 | %define version_enc 1_57_0 | ||||||
| Release: 6%{?dist} | Release: 7%{?dist} | ||||||
| License: Boost and MIT and Python | License: Boost and MIT and Python | ||||||
| 
 | 
 | ||||||
| %define toplev_dirname %{name}_%{version_enc} | %define toplev_dirname %{name}_%{version_enc} | ||||||
| @ -135,6 +135,16 @@ Patch66: boost-1.57.0-uuid-comparison.patch | |||||||
| # https://svn.boost.org/trac/boost/ticket/11044 | # https://svn.boost.org/trac/boost/ticket/11044 | ||||||
| Patch67: boost-1.57.0-move-is_class.patch | Patch67: boost-1.57.0-move-is_class.patch | ||||||
| 
 | 
 | ||||||
|  | Patch70: boost-context-0001-add-support-for-ARM64-MACH-O.patch | ||||||
|  | Patch71: boost-context-0002-make-ARM64-unsupported.patch | ||||||
|  | Patch72: boost-context-0015-jump-and-make-stubs-for-arm64-aarch64-for-iOS-ABI.patch | ||||||
|  | Patch73: boost-context-0016-remove-untested.cpp-for-ARM64-MACH-O.patch | ||||||
|  | Patch74: boost-context-0046-add-support-for-ARM64-ELF.patch | ||||||
|  | Patch75: boost-context-0047-some-fixes-for-ARM64.patch | ||||||
|  | Patch76: boost-context-0048-do-not-use-aliases-LR-and-FP-for-ARM64-gcc.patch | ||||||
|  | Patch77: boost-context-partial-revert-of-0002.patch | ||||||
|  | Patch78: boost-context-use-sysv-not-aapcs.patch | ||||||
|  | 
 | ||||||
| %bcond_with tests | %bcond_with tests | ||||||
| %bcond_with docs_generated | %bcond_with docs_generated | ||||||
| 
 | 
 | ||||||
| @ -625,6 +635,15 @@ a number of significant features and is now developed independently | |||||||
| %patch65 -p1 | %patch65 -p1 | ||||||
| %patch66 -p2 | %patch66 -p2 | ||||||
| %patch67 -p0 | %patch67 -p0 | ||||||
|  | %patch70 -p1 | ||||||
|  | %patch71 -p1 | ||||||
|  | %patch72 -p1 | ||||||
|  | %patch73 -p1 | ||||||
|  | %patch74 -p1 | ||||||
|  | %patch75 -p1 | ||||||
|  | %patch76 -p1 | ||||||
|  | %patch77 -p1 | ||||||
|  | %patch78 -p1 | ||||||
| 
 | 
 | ||||||
| # At least python2_version needs to be a macro so that it's visible in | # At least python2_version needs to be a macro so that it's visible in | ||||||
| # %%install as well. | # %%install as well. | ||||||
| @ -1244,6 +1263,13 @@ rm -rf $RPM_BUILD_ROOT | |||||||
| %{_mandir}/man1/bjam.1* | %{_mandir}/man1/bjam.1* | ||||||
| 
 | 
 | ||||||
| %changelog | %changelog | ||||||
|  | * Mon Apr 13 2015 Marcin Juszkiewicz <mjuszkiewicz@redhat.com> - 1.57.0-7 | ||||||
|  | - Add AArch64 support for boost::context | ||||||
|  |   - Numbered patches are cherry-picked from upstream repository. | ||||||
|  |   - partial-revert-of-0002 removes some build definitions which are defined | ||||||
|  |     in coroutine/ | ||||||
|  |   - last patch changes ABI names - taken from boost ML | ||||||
|  | 
 | ||||||
| * Sun Apr 12 2015 David Tardon <dtardon@redhat.com> - 1.57.0-6 | * Sun Apr 12 2015 David Tardon <dtardon@redhat.com> - 1.57.0-6 | ||||||
| - rebuild for yet another C++ ABI break | - rebuild for yet another C++ ABI break | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user