_mainCRTStartup/ctr0.S and thumb
Torsten@Robitzki.de
Torsten@Robitzki.de
Sat Aug 2 11:17:00 GMT 2014
Hello,
I try to build software for an arm cortex-m0 (nordic nRF51422) target using binutils (2.24), gcc (4.9) and newlib (2.1.0). I've build newlib using following configure statement:
CXX=g++-4.8 CC=gcc-4.8 ${PWD}/../configure --target=arm-none-eabi --prefix=/usr/local/arm-none-eabi --enable-interwork --enable-multilib --disable-nls
When I execute a very small C++ binary everything works fine until _mainCRTStartup gets called during startup. When I step through the code, step by step using a jtag debugger, I can follow the flow of execution till the first statement in _mainCRTStartup:
here the output of arm-none-eabi-objdump -S
000000c0 <_mainCRTStartup>:
add sl, sl, #256
#endif
#else
#ifdef ARM_RDI_MONITOR
/* Issue Angel SWI to read stack info. */
movs r0, #AngelSWI_Reason_HeapInfo
c0: e3b00016 movs r0, #22
adr r1, .LC0 /* Point at ptr to 4 words to receive data. */
c4: e28f10e8 add r1, pc, #232 ; 0xe8
...
and here the output of the debugger:
00000200: 06 48 LDR R0, [PC, #+0x18]
J-Link>s
00000202: 00 47 BX R0
J-Link>s
000000C0: 16 00 MOV R6, R2
J-Link>s
000000C2: B0 E3 B #+0x760
J-Link>s
00000826: C0 46 MOV R8, R8
...
where 00000826 is somewhere in __fp_lock_all(). To me it looks like the cortex-m0 cpu interprets arm32 opcode as thumb code, right?
According to the linker map, /usr/local/arm-none-eabi/lib/gcc/arm-none-eabi/4.9.0/../../../../arm-none-eabi/lib/thumb/crt0.o is used and mapped to address c0. The disassembly of that file (using arm-none-eabi-objdump -S) yields:
/usr/local/arm-none-eabi/lib/gcc/arm-none-eabi/4.9.0/../../../../arm-none-eabi/lib/thumb/crt0.o: file format elf32-littlearm
Disassembly of section .text:
00000000 <_mainCRTStartup>:
add sl, sl, #256
#endif
#else
#ifdef ARM_RDI_MONITOR
/* Issue Angel SWI to read stack info. */
movs r0, #AngelSWI_Reason_HeapInfo
0: e3b00016 movs r0, #22
adr r1, .LC0 /* Point at ptr to 4 words to receive data. */
4: e28f10e8 add r1, pc, #232 ; 0xe8
can someone be so kind and shed some light on this? Any pointers on how to investigate this further are highly appreciated.
Kind regards,
Torsten
More information about the Newlib
mailing list