powerpc-eabi linker crash w/linked binary data
J.T. Conklin
jtc@redback.com
Sat Feb 19 16:01:00 GMT 2000
We embed binary data (fpga images, i/o firmware, etc.) in our images
with the '-b binary' switches. Our code references the data through
the _binary_<filename>_{start,end,size} symbols the linker creates.
This has worked fine until last week, when I began receiving reports
of linker crashes. The linker is still the one I built from the CVS
repository back in mid-November.
When investigating the problem, I found that the linker was crashing
in elf_gc_common_finalize_got_offsets() at the line:
if (local_got[j] > 0)
and local_got was a wild pointer.
The function iterates over all the input bfds, and local_got is
computed with elf_local_got_refcounts(i):
...
/* Do the local .got entries first. */
for (i = info->input_bfds; i; i = i->link_next)
{
bfd_signed_vma *local_got = elf_local_got_refcounts (i);
...
elf_local_got_refcounts() is a macro which expands to elf_tdata(bfd)->
local_got.refcounts. However, for binary data files being linked, the
bfd tdata field points to an asection, not a struct elf_obj_tdata.
This results in a bogus value being used, which can result in a crash.
What's the right approach to fix this problem. Should this loop skip
non ELF input BFDs?
--jtc
--
J.T. Conklin
RedBack Networks
More information about the Binutils
mailing list