Re: [PATCH] BUG preserve registers

Eric W. Biederman
2002-02-10T15:44:44Z

Andrew Morton <akpm@zip.com.au> writes:

> "Eric W. Biederman" wrote:
> >
> > One possibility is to do something like:
> >
> > ud2
> > .word __LINE__
> > .long 1f
> > .section __FILE__
> > .linkonce discard
> > 1: .asciz __FILE__
> > .previous
> >
> > Which will put each filename string in it's own section and let the
> > linker merge the duplicates.
>
> That would work. When it didn't I r'ed tfm:
>
> http://www.gnu.org/manual/gas-2.9.1/html_node/as_102.html
>
> "This directive is only supported by a few object file formats;
> as of this writing, the only object file format which supports
> it is the Portable Executable format used on Windows NT."

It is supported for ELF and most other targets, but unfortunately not
with the same syntax :( I just looked and you have to do it a
slightly different way. You must prefix section name with ".gnu.linkonce"

binutils/bfd/elf.c:416
/* As a GNU extension, if the name begins with .gnu.linkonce, we
only link a single copy of the section. This is used to support
g++. g++ will emit each template expansion in its own section.
The symbols will be defined as weak, so that multiple definitions
are permitted. The GNU linker extension is to actually discard
all but one of the sections. */

This has been supported since 1997 so it should be safe to use.
Though it would be nice if someone would actually document it...

Eric