RS6000_MCOUNT and -fpic
gp@qnx.com
gp@qnx.com
Sun Feb 22 20:11:00 GMT 2004
Thanks, Jim. I appreciate the feedback, and I'll investigate as per your
suggestions. I'll also put together a small patch for the '@plt' and submit
it to the patches list.
Cheers.
GP
Jim Wilson <wilson@specifixinc.com> said:
> gp@qnx.com wrote:
> > if (flag_pic && DEFAULT_ABI == ABI_V4)
> > fprintf("\tbl %s@plt",RS6000_MCOUNT);
> > else
> > fprintf("\tbl %s",RS6000_MCOUNT);
>
> It looks like the same construct used in several places in the rs6000.md
> file, so it seems to be right.
>
> > - Why would I end up with a self-referencing "bl" instruction without the
> > "@plt"? Any idea? I think I've seen it before, so even though it looks
> > like a bug, it might be a feature (I guess...) :-)
>
> probably a relocation got ignored or mishandled.
>
> If you compile to a .o file without pic, and disassemble it, pc-relative
> calls will look like calls to themselves. However, if you look at the
> relocation table, you will see a reloc that modifies the call target to
> contain the address of the target function. So after linking it will
> point to the right place, but before linking it just has a placeholder 0
> offset, which for most targets means a call to itself.
>
> With pic, the relocation handling is a bit different. It may be that
> you still have an unhandled reloc after linking, and the call still has
> the placeholder 0. If the loader silently ignores the (presumably bad)
> reloc, then the program will silently fail. Or if the loader mishandles
> the reloc things fail. Alternatively, it could be that the linker
> mishandled the reloc, or silently ignored it. You would have to look at
> the resulting executable including its relocs, and the linker/load
> behaviour, and what the ABI says about these relocs. There are lots of
> different things that might have happened here.
> --
> Jim Wilson, GNU Tools Support, http://www.SpecifixInc.com
>
--
More information about the Gcc
mailing list