b[l]x instruction in cortex-m3 code
Daniel Otte
daniel.otte@rub.de
Tue Jul 19 10:45:00 GMT 2011
Hi
> Typically this means you are calling a function that is not correctly
> marked as Thumb code, so the linker is helpfully switching you back to
> ARM mode; check the target symbol.
>
That was also my first thought, but it happens also with calls in the same file.
So the code:
------------------------------------------------------------
typedef void(*fpt)(int);
void func(int a){
a = a*a;
}
int main(void){
fpt p;
p = func;
p(3);
for(;;)
;
return 0;
}
------------------------------------------------------------
compiles to:
------------------------------------------------------------
000001b0 <func>:
1b0: b480 push {r7}
1b2: b083 sub sp, #12
1b4: af00 add r7, sp, #0
1b6: 6078 str r0, [r7, #4]
1b8: 687b ldr r3, [r7, #4]
1ba: 687a ldr r2, [r7, #4]
1bc: fb02 f303 mul.w r3, r2, r3
1c0: 607b str r3, [r7, #4]
1c2: f107 070c add.w r7, r7, #12
1c6: 46bd mov sp, r7
1c8: bc80 pop {r7}
1ca: 4770 bx lr
000001cc <main>:
1cc: b580 push {r7, lr}
1ce: b082 sub sp, #8
1d0: af00 add r7, sp, #0
1d2: f240 13b1 movw r3, #433 ; 0x1b1
1d6: f2c0 0300 movt r3, #0
1da: 607b str r3, [r7, #4]
1dc: 687b ldr r3, [r7, #4]
1de: f04f 0003 mov.w r0, #3
1e2: 4798 blx r3
1e4: e7fe b.n 1e4 <main+0x18>
1e6: bf00 nop
------------------------------------------------------------
I especially took a look at the implementation of the function pointer call.
But also the normal funtion returns with a bx.
Best regards,
Daniel Otte
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: OpenPGP digital signature
URL: <https://sourceware.org/pipermail/binutils/attachments/20110719/4cfbd0b9/attachment.sig>
More information about the Binutils
mailing list