COMMON symbols...
Nick Clifton
nickc@redhat.com
Fri Apr 1 13:44:00 GMT 2005
Hi Dave,
> So I think that ld isn't zero-filling the space it allocates to the common
> symbols, but just letting them take whatever values happen to be in the host
> memory space that has been allocated by the linker to build up the output
> section.
>
> Is there any way to work around this? I couldn't get useful results with
> the FILL expressions, which I suppose makes sense because the space is used.
> And I couldn't get the FORCE_COMMON_ALLOCATION directive or -d switch to
> help me out either.
>
> Does anyone know of a way to get the result I want from the linker?
I strongly suspect that this is a linker "feature" in that it has never
had to zero-fill the file space that is going to be used for common
symbols because it assumes that they are always going to be going into a
section with the SHT_NOBITS flag set. ie this is a bug and the linker
ought to check for this and zero the memory it writes out if necessary.
Anyway the only way that I can think of to fix this in a linker script
is to use overlays. This *might* work, but I have not tried it.
> (And before you ask, I can't just give gcc -fno-common, even though that
> would move the common symbols into bss for me and hence get them
> zero-filled, because the option's a bit b0rked somewhere in my toolchain
Incidentally if you fix -fno-common you could then add the
-ffno-zero-initialized-in-bss switch and then not have to modify your
linker script at all....
Cheers
Nick
More information about the Binutils
mailing list