[LLVMdev] Setting up a cross-compiler for cortex-m3
salvatore benedetto
salvatore.benedetto at gmail.com
Sun Jul 22 11:57:54 PDT 2012
On Wed, Jul 18, 2012 at 6:08 PM, salvatore benedetto
<salvatore.benedetto at gmail.com> wrote:
> On Wed, Jul 18, 2012 at 5:45 PM, Renato Golin <rengolin at systemcall.org> wrote:
>> On 18 July 2012 15:46, salvatore benedetto
>> <salvatore.benedetto at gmail.com> wrote:
>>> $ clang++ -ccc-host-triple thumbv7m-none-gnueabi noInclude.cpp -c
>>> --sysroot=/home/emitrax/CodeSourcery/Sourcery_G++_Lite/arm-none-linux-gnueabi/libc/
>>
>> Try -ccc-gcc-name arm-none-linux-gnueabi-g++ -ccc-host-triple
>> thumbv7m-none-linux-gnueabi
>>
>> Sometimes it's better than sysroot, as it finds it all by itself.
>
> And the winner is..
>
> clang++ -ccc-gcc-name arm-none-linux-gnueabi-g++ -ccc-host-triple
> thumbv7m-none-gnueabi testReference.cpp -c
>
> It seems like it worked.
>
> $ arm-none-linux-gnueabi-objdump -D --section=.text testReference.o
>
> testReference.o: file format elf32-littlearm
>
>
> Disassembly of section .text:
>
> 00000000 <main>:
> 0: e92d4800 push {fp, lr}
> 4: e1a0b00d mov fp, sp
> 8: e24dd030 sub sp, sp, #48 ; 0x30
> ...
>
> I'm not 100% sure if that's the correct ISA, because I haven't run the
> code, but it seems ok.
>
Unfortunately, I have to resurrect this thread.
I had the time to test the code, and it is using the wrong ISA.
I can't understand why, but it uses armv5te instead of thumb2.
$ clang++ -ccc-gcc-name arm-none-linux-gnueabi-g++ -ccc-host-triple
thumbv7m-none-gnueabi testReference.cpp -c
$ arm-none-linux-gnueabi-readelf -A testReference.o
Attribute Section: aeabi
File Attributes
Tag_CPU_name: "5TE"
Tag_CPU_arch: v5TE
Tag_ARM_ISA_use: Yes
Tag_THUMB_ISA_use: Thumb-1
Tag_ABI_FP_denormal: Needed
Tag_ABI_FP_exceptions: Needed
Tag_ABI_FP_number_model: IEEE 754
Tag_ABI_align_needed: 8-byte
Tag_ABI_align_preserved: 8-byte, except leaf SP
Tag_DIV_use: Not allowed
I realized this only when I moved to compile my firmware and
got the following
/tmp/startup-EFUAJp.s: Assembler messages:
/tmp/startup-EFUAJp.s:84: Error: width suffixes are invalid in ARM
mode -- `ldr.w sp,[r0]'
Using the -v options produce the following
gcc version 4.6.3 (Sourcery CodeBench Lite 2012.03-57)
COLLECT_GCC_OPTIONS='-ffunction-sections' '-fno-common'
'-fno-exceptions' '-fno-rtti' '-v' '-nostdlib' '-nodefaultlibs'
'-Wall' '-stdlib=libc++' '-I' '/home/emitrax/bin/llvm/lib/c++/v1'
'-std=c++11' '-I'
'/home/emitrax/programming/adok/build/include/private' '-I'
'/home/emitrax/programming/adok/include/private' '-c' '-o'
'source/porting/arch/arm/cortex-m3/stack.cpp.o' '-shared-libgcc'
'-march=armv5te' '-mtls-dialect=gnu' '-D'
'__CS_SOURCERYGXX_MAJ__=2012' '-D' '__CS_SOURCERYGXX_MIN__=3' '-D'
'__CS_SOURCERYGXX_REV__=57'
Any suggestions?
Regards,
S.
More information about the llvm-dev
mailing list