Re: [arm-gnu] thumb code calling arm subroutine causes undefined insn exception
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [arm-gnu] thumb code calling arm subroutine causes undefined insn exception



On Sunday 25 April 2010 09:48:25 pm Travis Geiselbrecht wrote:
> As far the blx, I think that is generated in ld, not gcc. I seem to
>  remember there was some way to force ld to not use it, but I dont remember
>  off the top of my head. I'd poke around on options there. Otherwise, this
>  is where I'll have to bow out and let someone from CS handle it.

You're right on the ball.

from objdumping kernel.o:
00000004 <kernel_init>:
   4:   b508            push    {r3, lr}
   6:   f7ff fffe       bl      0 <irq_setup>
   a:   f7ff fffe       bl      0 <rtc_init>
   e:   f7ff fffe       bl      0 <oled_init>
  12:   f7ff fffe       bl      0 <font_init>
  16:   f7ff fffe       bl      0 <vibe_init>

from objdumping the final output file:

00001890 <kernel_init>:
    1890:       b508            push    {r3, lr}
    1892:       f000 ec86       blx     21a0 <irq_setup>
    1896:       f7fe fdd1       bl      43c <rtc_init>
    189a:       f7fe fd8f       bl      3bc <oled_init>
    189e:       f000 f841       bl      1924 <font_init>
    18a2:       f7fe ff3b       bl      71c <vibe_init>

Now for a minute I thought it might have been because irq_setup may have been 
too far away, but that doesn't seem to be the case.

-A.