[aida_s@mx12.freecom.ne.jp: A serious bug of "ld --enable-auto-import"]

DJ Delorie dj@delorie.com
Sat Aug 25 23:14:00 GMT 2001


> Anyway, I'm confused.  The .o file already contains the "12" (actually, 
> 0c 00 00 00 in on-disk byte order), so gas has already done its work -- 
> properly.  The problem occurs during the linking step -- ld is ignoring 
> the offset stored within the opcode and is blindly stuffing in the 
> relocation address without adding the offset.

Ok, a couple of things:

In make_import_fixup in ld/emultempl/pe.em, it uses rel->addend
without also checking for the inline offset.  For formats that use an
inline addend, rel->addend may be zero.

Addends are very tricky in PE.  There's lots of comments about adding,
subtracting, adding, subtracting, etc, in various places in the code.

I don't think an import library *can* specify an offset to be added at
runtime.  From my understanding of the dll import/export system,
windows simply places the address of the thing being imported in the
location indicated.



More information about the Binutils mailing list