Boost logo

Boost :

Subject: Re: [boost] [Context] RFR: Add support for ARM aarch64 architecture
From: Edward Nevill (edward.nevill_at_[hidden])
Date: 2015-02-25 06:48:58


On Wed, 2015-02-25 at 10:27 +0100, Oliver Kowalke wrote:

> the patch was merged into boost.build - could you fetch the new version
> (file src/engine/jam.h
> <https://github.com/boostorg/build/pull/58/files#diff-c88fe8afebc632d0bef2bd5985137af2>)
> and check if
> boost.context (please fetch) builds and runs as expected?
>
> _______________________________________________
> Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Hi Oliver,

I have pulled the jam.h patch and pulled the latest boost.context (develop branch), however it fails to build with the following error.

gcc.compile.asm ../../../bin.v2/libs/context/build/gcc-4.9.1/debug/address-model-64/architecture-arm/link-static/threading-multi/asm/jump_arm64_aapcs_elf_gas.o
../../../libs/context/src/asm/jump_arm64_aapcs_elf_gas.S: Assembler messages:
../../../libs/context/src/asm/jump_arm64_aapcs_elf_gas.S:86: Error: operand 1 should be a floating-point register -- `stp fp,lr,[sp,#0x90]'
../../../libs/context/src/asm/jump_arm64_aapcs_elf_gas.S:89: Error: operand 1 should be an integer register -- `str lr,[sp,#0xa0]'
../../../libs/context/src/asm/jump_arm64_aapcs_elf_gas.S:116: Error: operand 1 should be a floating-point register -- `ldp fp,lr,[sp,#0x90]'

The assembler does not recognise the names 'fp', or 'lr'. Instead you must use x29, or x30. I thought I had done this already in my original patch. Apologies if I made a mistake.

Patch below:-

With this patch it now reports

gcc.compile.asm ../../../bin.v2/libs/context/build/gcc-4.9.1/debug/address-model-64/architecture-arm/link-static/threading-multi/asm/jump_arm64_aapcs_elf_gas.o
gcc.archive ../../../bin.v2/libs/context/build/gcc-4.9.1/debug/address-model-64/architecture-arm/link-static/threading-multi/libboost_context.a
gcc.link ../../../bin.v2/libs/context/test/test_context.test/gcc-4.9.1/debug/address-model-64/architecture-arm/link-static/threading-multi/test_context
testing.capture-output ../../../bin.v2/libs/context/test/test_context.test/gcc-4.9.1/debug/address-model-64/architecture-arm/link-static/threading-multi/test_context.run
**passed** ../../../bin.v2/libs/context/test/test_context.test/gcc-4.9.1/debug/address-model-64/architecture-arm/link-static/threading-multi/test_context.test
...updated 6 targets...

All the best,
Ed.

--- CUT HERE ---
commit f5905ba4672c78fc5b250e990a9103beb226baeb
Author: Edward Nevill <edward.nevill_at_[hidden]>
Date: Wed Feb 25 11:45:23 2015 +0000

    Correct register names in arm64

diff --git a/src/asm/jump_arm64_aapcs_elf_gas.S b/src/asm/jump_arm64_aapcs_elf_gas.S
index 889008f..09bd7b5 100644
--- a/src/asm/jump_arm64_aapcs_elf_gas.S
+++ b/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
--- CUT HERE ---


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk