interrupt vectors are all val + 1

Asked by David

I've compiled and linked a short test program. (first time working with ARM)
After loading the program , it doesn't run.

I uploaded the program to a file to compare it to a link map. All the code seems to be loaded fine, expect that all interrupt vectors are one more than the value they should be.

Reset_Interrupt code is loaded starting at 0x464 but the Reset vector is 0x465 (65040000)

Is this normal?

Everything else seems to be just like it's supposed to be.

Question information

English Edit question
GNU Arm Embedded Toolchain Edit question
No assignee Edit question
Solved by:
Thomas Preud'homme
Last query:
Last reply:
Revision history for this message
Best Thomas Preud'homme (thomas-preudhomme) said :

Hi David,

In short: it is normal.

Addresses of Thumb functions are required to have the least significant bit in the symbol table to distinguish them from ARM functions. The linker knows to ignore that bit when doing relocation and the processor clears that bit when branching to such an address. Therefore all will work as if that bit was not set.

Best regards.

Revision history for this message
David (davud) said :

Thank you, yes I discovered this same answer late last night.

In a simple assembler script someone was adding a "1" for the same reason. Perhaps the .thumb directive dies out automatically.

Anyways the doubt is resolved.