How to make section take no space in output file?

Alexander Neundorf neundorf@kde.org
Wed Jan 16 01:27:00 GMT 2008


On Saturday 12 January 2008, H.J. Lu wrote:
> On Fri, Jan 11, 2008 at 02:11:31PM -0800, Rick Mann wrote:
> > On Jan 11, 2008, at 12:43 PM, DJ Delorie wrote:
> >> If they're memory mapped devices, I think a better approach is to make
> >> them "extern" in your C program, and assign them values in the linker
> >> script or an auxiliary asm file, like this:
> >>
> >>        .global framebuffer
> >> framebuffer = 0xc8000000
> >>
> >> If your C sources create data, the linker has to put it somewhere.
> >> The solution is to not create data.
> >>
> >> You could also try the DISCARD section, but whether it's useful or not
> >> depends on your specific situation.
> >
> > They are not memory-mapped devices; they're strictly allocated RAM. The
> > only requirement is that they be of specific size and alignment, and I'd
> > like for the linker to just assign addresses accordingly. However, in the
> > output file, they don't need to exist at all; I just want references to
> > the symbols to have the right values at run time.
>
> Have you tried "NOLOAD"? See
>
> http://www.sourceware.org/bugzilla/show_bug.cgi?id=5522
>
> However, this feature may a bug in linker:
>
> http://sourceware.org/ml/binutils/2008-01/msg00083.html

I had to do the same in an embedded system. I think I used something like 
DISCARD or NOLOAD in the linker script, but with some version of binutils the 
behaviour changed, and while this section wasn't loaded anymore, it was still 
present in the output file (the section was around 60 MB big, so this was an 
issue).
I think then I used objcopy --remove-section=<sectionname> to get completely 
rid of the section.

Alex



More information about the Binutils mailing list