On Thu, Oct 11, 2007 at 11:52:30AM +0200, Franck Bui-Huu wrote:
> Other question: I noticed that the exit.data section is not
> discarded. Could anybody give me the reason why ?
.exit.data and .exit.text may reference each other. __exit functions
generally get compiled into .exit.text but some constructs such as jump
tables for switch() constructs may be compiled into address tables which
gcc unfortunately will put into .rodata, so .rodata will end up
referencing function addresses in .exit.text which makes ld unhappy if
.exit.text was discarded. So until this is fixed in gcc we can't
discard exit code, unfortunately.
It's actually an issue which doesn't strike very often, so users who are
desparate for shrinking the kernel down could try to undo patchsets:
and see if they can get away with it. If the final kernel link succeeds,
the build would be ok.
I think gcc should probably put the jump table into a .subsection if
a section was explicitly requested, at least for non-PIC code.