This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]