This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Re: Empty section removal has messed up MIPS gdb
On Wed, Apr 20, 2005 at 05:57:46PM -0400, Daniel Jacobowitz wrote:
> On Wed, Apr 20, 2005 at 02:53:17PM -0700, H. J. Lu wrote:
> > On Wed, Apr 20, 2005 at 05:35:33PM -0400, Daniel Jacobowitz wrote:
> > > GCC used to leave a message for the debugger in the form of an empty
> > > section:
> > >
> > > /* Generate a special section to describe the ABI switches used to
> > > produce the resultant binary. This used to be done by the assembler
> > > setting bits in the ELF header's flags field, but we have run out of
> > > bits. GDB needs this information in order to be able to correctly
> > > debug these binaries. See the function mips_gdbarch_init() in
> > > gdb/mips-tdep.c. This is unnecessary for the IRIX 5/6 ABIs and
> > > causes unnecessary IRIX 6 ld warnings. */
> > >
> > > The emitted bits were simply:
> > >
> > > .section .mdebug.abi64
> > > .previous
> > >
> > > The sections are now stripped. I don't want to put contents in them and
> > > waste object file space unless it's absolutely necessary. How should I
> > > cajole ld into leaving them?
> > >
> >
> > Mark it KEEP?
>
> This is something that has to be done in the linker, right? i.e. the
> linker would also need to know about this convention.
>
It is done in linker script:
[hjl@gnu scripttempl]$ grep KEEP elf.sc
KEEP (*crtbegin*.o(.ctors))
KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
KEEP (*crtbegin*.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
KEEP (*(.init))
KEEP (*(.text.*personality*))
KEEP (*(.fini))
.eh_frame ${RELOCATING-0} : ONLY_IF_RO { KEEP (*(.eh_frame)) }
.gcc_except_table ${RELOCATING-0} : ONLY_IF_RO { KEEP
(*(.gcc_except_table)) *(.gcc_except_table.*) }
.eh_frame ${RELOCATING-0} : ONLY_IF_RW { KEEP (*(.eh_frame)) }
.gcc_except_table ${RELOCATING-0} : ONLY_IF_RW { KEEP
(*(.gcc_except_table)) *(.gcc_except_table.*) }
.preinit_array ${RELOCATING-0} : { KEEP (*(.preinit_array)) }
.init_array ${RELOCATING-0} : { KEEP (*(.init_array)) }
.fini_array ${RELOCATING-0} : { KEEP (*(.fini_array)) }
.jcr ${RELOCATING-0} : { KEEP (*(.jcr)) }
KEEP (*(.gnu.linkonce.d.*personality*))
You can do it for .mdebug.abi64.
H.J.