This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: How to make section take no space in output file?
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