Re: bal instruction in gcc 3.x

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



<hellokishore@xxxxxxxxx> wrote:

However, if I compile the code with gcc3, it exits with the
error "Cannot branch to unknown symbol".

On the other hand, if I replace bal jump_to_label by
la t9, jump_to_label
jalr t9

I don't see any warning. What could be the reason ?


1) With "jal label " you'll have a MIPS_26 RELOC type in the ELF obj file:

 jal  lablel

00000000 <.text>:
  0:   0c000000        jal     0x0
  4:   00000000        nop

RELOCATION RECORDS FOR [.text]:
OFFSET   TYPE              VALUE
00000000 R_MIPS_26         label


2) The "la r,label" is a syntetic inctruction wich expanded into two:
"lui r,%hi label  ; addui r,%lo label". It gives you two RELOCs:

 la  t0, label
 jalr t0

00000000 <.text>:
  0:   3c080000        lui     t0,0x0
  4:   25080000        addiu   t0,t0,0
  8:   0100f809        jalr    t0
  c:   00000000        nop

RELOCATION RECORDS FOR [.text]:
OFFSET   TYPE              VALUE
00000000 R_MIPS_HI16       label
00000004 R_MIPS_LO16       label

3) AFAIK (correct me), there is no MIPS-specific RELOC type for
the "branch"  instruction format in the BFD, so "bal" to the *external*
symbols is impossible.

May be, old gas generates something like RELOC_PCREL
for "bal external" ?


--
-=AV=-



[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux