<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=-