$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
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