Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r82167 - in trunk: boost/context libs/context/build libs/context/config libs/context/src/asm
From: oliver.kowalke_at_[hidden]
Date: 2012-12-22 07:03:45


Author: olli
Date: 2012-12-22 07:03:44 EST (Sat, 22 Dec 2012)
New Revision: 82167
URL: http://svn.boost.org/trac/boost/changeset/82167

Log:
context: support for Windows Embedded on ARM

Added:
   trunk/libs/context/src/asm/jump_arm_aapcs_pe_armasm.S (contents, props changed)
   trunk/libs/context/src/asm/make_arm_aapcs_pe_armasm.S (contents, props changed)
Text files modified:
   trunk/boost/context/fcontext.hpp | 2 +-
   trunk/libs/context/build/Jamfile.v2 | 12 ++++++++++++
   trunk/libs/context/config/arm.cpp | 2 +-
   3 files changed, 14 insertions(+), 2 deletions(-)

Modified: trunk/boost/context/fcontext.hpp
==============================================================================
--- trunk/boost/context/fcontext.hpp (original)
+++ trunk/boost/context/fcontext.hpp 2012-12-22 07:03:44 EST (Sat, 22 Dec 2012)
@@ -44,7 +44,7 @@
 # endif
 // arm
 #elif defined(__arm__) || defined(__thumb__) || defined(__TARGET_ARCH_ARM) \
- || defined(__TARGET_ARCH_THUMB) || defined(_ARM)
+ || defined(__TARGET_ARCH_THUMB) || defined(_ARM) || defined(_M_ARM)
 # include <boost/context/detail/fcontext_arm.hpp>
 // mips
 #elif (defined(__mips) && __mips == 1) || defined(_MIPS_ISA_MIPS1) \

Modified: trunk/libs/context/build/Jamfile.v2
==============================================================================
--- trunk/libs/context/build/Jamfile.v2 (original)
+++ trunk/libs/context/build/Jamfile.v2 2012-12-22 07:03:44 EST (Sat, 22 Dec 2012)
@@ -68,6 +68,11 @@
     as -o "$(<)" "$(>)"
 }
 
+actions armasm
+{
+ armasm "$(<)" "$(>)"
+}
+
 actions masm
 {
     ml /c /Fo"$(<)" "$(>)"
@@ -120,6 +125,13 @@
    ;
 
 alias asm_context_sources
+ : [ make asm/make_arm_aapcs_pe_armasm.o : asm/make_arm_aapcs_pe_armasm.S : @armasm ]
+ [ make asm/jump_arm_aapcs_pe_armasm.o : asm/jump_arm_aapcs_pe_armasm.S : @armasm ]
+ : <architecture>arm
+ <binary-format>pe
+ ;
+
+alias asm_context_sources
    : [ make asm/make_arm_aapcs_elf_gas.o : asm/make_arm_aapcs_elf_gas.S : @gas ]
      [ make asm/jump_arm_aapcs_elf_gas.o : asm/jump_arm_aapcs_elf_gas.S : @gas ]
    : <architecture>arm

Modified: trunk/libs/context/config/arm.cpp
==============================================================================
--- trunk/libs/context/config/arm.cpp (original)
+++ trunk/libs/context/config/arm.cpp 2012-12-22 07:03:44 EST (Sat, 22 Dec 2012)
@@ -8,6 +8,6 @@
 
 #if !defined(__arm__) && !defined(__thumb__) && \
     !defined(__TARGET_ARCH_ARM) && !defined(__TARGET_ARCH_THUMB) && \
- !defined(_ARM)
+ !defined(_ARM) && !defined(_M_ARM)
 #error "Not ARM"
 #endif

Added: trunk/libs/context/src/asm/jump_arm_aapcs_pe_armasm.S
==============================================================================
--- (empty file)
+++ trunk/libs/context/src/asm/jump_arm_aapcs_pe_armasm.S 2012-12-22 07:03:44 EST (Sat, 22 Dec 2012)
@@ -0,0 +1,76 @@
+;/*
+; 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 | *
+; * ------------------------------------------------------------- *
+; * | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| 0x20| 0x24| *
+; * ------------------------------------------------------------- *
+; * | v1 | v2 | v3 | v4 | v5 | v6 | v7 | v8 | sp | lr | *
+; * ------------------------------------------------------------- *
+; * ------------------------------------------------------------- *
+; * | 10 | | *
+; * ------------------------------------------------------------- *
+; * | 0x28| | *
+; * ------------------------------------------------------------- *
+; * | pc | | *
+; * ------------------------------------------------------------- *
+; * ------------------------------------------------------------- *
+; * | 11 | 12 | | *
+; * ------------------------------------------------------------- *
+; * | 0x2c| 0x30| | *
+; * ------------------------------------------------------------- *
+; * | sp | size| | *
+; * ------------------------------------------------------------- *
+; * ------------------------------------------------------------- *
+; * | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | *
+; * ------------------------------------------------------------- *
+; * | 0x34| 0x38|0x3c| 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58 | *
+; * ------------------------------------------------------------- *
+; * | s16 | s17 | s18 | s19 | s20 | s21 | s22 | s23 | s24 | s25 | *
+; * ------------------------------------------------------------- *
+; * ------------------------------------------------------------- *
+; * | 23 | 24 | 25 | 26 | 27 | 28 | | *
+; * ------------------------------------------------------------- *
+; * | 0x5c| 0x60| 0x64| 0x68| 0x6c| 0x70| | *
+; * ------------------------------------------------------------- *
+; * | s26 | s27 | s28 | s29 | s30 | s31 | | *
+; * ------------------------------------------------------------- *
+; * *
+; * *****************************************************************/
+
+ AREA |.text|, CODE
+ ALGIN 4
+ EXPORT jump_fcontext
+
+jump_fcontext PROC
+ stmia a1, {v1-v8,sp-lr} ; save V1-V8,SP-LR
+ str lr, [a1,#40] ; save LR as PC
+
+#if (defined(__VFP_FP__) && !defined(__SOFTFP__))
+ cmp a4, #0 ; test if fpu env should be preserved
+ beq nofp
+
+ mov a4, a1
+ add a4, #52
+ vstmia a4, {d8-d15} ; save S16-S31
+
+ mov a4, a2
+ add a4, #52
+ vldmia a4, {d8-d15} ; restore S16-S31
+
+nofp
+#endif
+
+ mov a1, a3 ; use third arg as return value after jump
+ ; and as first arg in context function
+ ldmia a2, {v1-v8,sp-pc} ; restore v1-V8,SP-PC
+
+ ENDP
+ END

Added: trunk/libs/context/src/asm/make_arm_aapcs_pe_armasm.S
==============================================================================
--- (empty file)
+++ trunk/libs/context/src/asm/make_arm_aapcs_pe_armasm.S 2012-12-22 07:03:44 EST (Sat, 22 Dec 2012)
@@ -0,0 +1,80 @@
+;/*
+; 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 | *
+; * ------------------------------------------------------------- *
+; * | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| 0x20| 0x24| *
+; * ------------------------------------------------------------- *
+; * | v1 | v2 | v3 | v4 | v5 | v6 | v7 | v8 | sp | lr | *
+; * ------------------------------------------------------------- *
+; * ------------------------------------------------------------- *
+; * | 10 | | *
+; * ------------------------------------------------------------- *
+; * | 0x28| | *
+; * ------------------------------------------------------------- *
+; * | pc | | *
+; * ------------------------------------------------------------- *
+; * ------------------------------------------------------------- *
+; * | 11 | 12 | | *
+; * ------------------------------------------------------------- *
+; * | 0x2c| 0x30| | *
+; * ------------------------------------------------------------- *
+; * | sp | size| | *
+; * ------------------------------------------------------------- *
+; * ------------------------------------------------------------- *
+; * | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | *
+; * ------------------------------------------------------------- *
+; * | 0x34| 0x38|0x3c| 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58 | *
+; * ------------------------------------------------------------- *
+; * | s16 | s17 | s18 | s19 | s20 | s21 | s22 | s23 | s24 | s25 | *
+; * ------------------------------------------------------------- *
+; * ------------------------------------------------------------- *
+; * | 23 | 24 | 25 | 26 | 27 | 28 | | *
+; * ------------------------------------------------------------- *
+; * | 0x5c| 0x60| 0x64| 0x68| 0x6c| 0x70| | *
+; * ------------------------------------------------------------- *
+; * | s26 | s27 | s28 | s29 | s30 | s31 | | *
+; * ------------------------------------------------------------- *
+; * *
+; * *****************************************************************/
+
+
+ AREA |.text|, CODE
+ ALGIN 4
+ EXPORT make_fcontext
+ IMPORT _exit
+
+make_fcontext PROC
+ mov a4, a1 ; save address of context stack (base) A4
+ sub a1, #116 ; reserve space for fcontext_t at top of context stack
+
+ ; shift address in A1 to lower 16 byte boundary
+ ; == pointer to fcontext_t and address of context stack
+ bic a1, a1, #15
+
+ str a4, [a1,#44] ; save address of context stack (base) in fcontext_t
+ str a2, [a1,#48] ; save context stack size in fcontext_t
+ str a3, [a1,#40] ; save address of context function in fcontext_t
+
+ str a1, [a1,#32] ; save address in A4 as stack pointer for context function
+
+ adr a2, finish ; compute abs address of label finish
+ str a2, [a1,#36] ; save address of finish as return address for context function
+ ; entered after context function returns
+
+ bx lr
+
+finish
+ ; SP points to same addras SP on entry of context function
+ mov a1, #0 ; exit code is zero
+ bl _exit ; exit application
+
+ ENDP
+ END


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk