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]

global destructors on mips-elf



Hi,

Background: I am trying to construct an RTEMS BSP for the 
jmr3904 MIPs simulator in gdb.  I have a simple hello world
running with one glitch.  The global destructor table must
be incorrectly constructed since the program locks up when
__do_global_dtors.  I based my linker script on the 
ones in libgloss.  Does anyone have a working example for
mips-elf that actually runs the global destructors properly?

I have attached the linker script if anyone can spot anything.
It has to be my fault. :)

Thanks.

-- 
Joel Sherrill, Ph.D.             Director of Research & Development
joel@OARcorp.com                 On-Line Applications Research
Ask me about RTEMS: a free RTOS  Huntsville AL 35805
   Support Available             (256) 722-9985
/*
 *  $Id: linkcmds,v 1.4 2000/12/06 15:43:35 joel Exp $
 *
 *  Based on jmr3904app-dram.ld from newlib 1.8.2
 */

/*
 * Declare some sizes.
 */
_RamBase = DEFINED(_RamBase) ? _RamBase : 0x0;
_RamSize = DEFINED(_RamSize) ? _RamSize : 1M;
HeapSize = DEFINED(HeapSize) ? HeapSize : 0x10000;
_StackSize = DEFINED(_StackSize) ? _StackSize : 0x1000;

SECTIONS
{ 
    . = 0x88000000;
    .text : 
    { 
       _ftext = . ;
      *(.init)
       eprol  =  .;
      *(.text)
      *(.text.*)
      *(.gnu.linkonce.t*)
      *(.mips16.fn.*)
      *(.mips16.call.*)
      PROVIDE (__runtime_reloc_start = .);
      *(.rel.sdata)
      PROVIDE (__runtime_reloc_stop = .);
      *(.fini)
       etext  =  .;
       _etext  =  .;
    }  
  .ctors    :
  {
    /* gcc uses crtbegin.o to find the start of
       the constructors, so we make sure it is
       first.  Because this is a wildcard, it
       doesn't matter if the user does not
       actually link against crtbegin.o; the
       linker won't look for a file to match a
       wildcard.  The wildcard also means that it
       doesn't matter which directory crtbegin.o
       is in.  */

    KEEP (*crtbegin.o(.ctors))

    /* We don't want to include the .ctor section from
       from the crtend.o file until after the sorted ctors.
       The .ctor section from the crtend file contains the
       end of ctors marker and it must be last */

    KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
    KEEP (*(SORT(.ctors.*)))
    KEEP (*(.ctors))
  }

  .dtors    :
  {
    KEEP (*crtbegin.o(.dtors))
    KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
    KEEP (*(SORT(.dtors.*)))
    KEEP (*(.dtors))
  }

    . = .;
  .rdata : {
    *(.rdata)
    *(.rodata)
    *(.rodata.*)
    *(.gnu.linkonce.r*)
  }
   _fdata = ALIGN(16);
  .data : {
    *(.data)
    *(.data.*)
    *(.gnu.linkonce.d*)
  }
  . = ALIGN(8);
  _gp = . + 0x8000;
  __global = _gp;
  .lit8 : {
    *(.lit8)
  }
  .lit4 : {
    *(.lit4)
  }
  .sdata : {
    *(.sdata)
    *(.sdata.*)
    *(.gnu.linkonce.s*)
  }
  . = ALIGN(4);
   edata  =  .;
   _edata  =  .;
   _fbss = .;
  .sbss : {
    *(.sbss)
    *(.scommon)
  }
  .bss : {
    _bss_start = . ;
    *(.bss)
    *(COMMON)
    . = ALIGN (64);
    _stack_limit = .;
    . += _StackSize;
    __stack = .;
    _stack_init = .;
    _clear_end = .;
    WorkspaceBase = .;
    . += 512K;    /* reserve some memory for workspace */
    HeapBase = .;
    . += HeapSize;    /* reserve some memory for heap */
  }
 end = .;
 _end = .;


/* Put starting stack in SRAM (8 Kb); this size is the same as the stack from
      the original script (when everything was in SRAM). */
   /* __stack = 0x8000A000; */
  /* DWARF debug sections.
     Symbols in the DWARF debugging sections are relative to
     the beginning of the section so we begin them at 0.  */

  /* DWARF 1 */
  .debug          0 : { *(.debug) }
  .line           0 : { *(.line) }

  /* GNU DWARF 1 extensions */
  .debug_srcinfo  0 : { *(.debug_srcinfo) }
  .debug_sfnames  0 : { *(.debug_sfnames) }

  /* DWARF 1.1 and DWARF 2 */
  .debug_aranges  0 : { *(.debug_aranges) }
  .debug_pubnames 0 : { *(.debug_pubnames) }

  /* DWARF 2 */
  .debug_info     0 : { *(.debug_info) }
  .debug_abbrev   0 : { *(.debug_abbrev) }
  .debug_line     0 : { *(.debug_line) }
  .debug_frame    0 : { *(.debug_frame) }
  .debug_str      0 : { *(.debug_str) }
  .debug_loc      0 : { *(.debug_loc) }
  .debug_macinfo  0 : { *(.debug_macinfo) }

  /* SGI/MIPS DWARF 2 extensions */
  .debug_weaknames 0 : { *(.debug_weaknames) }
  .debug_funcnames 0 : { *(.debug_funcnames) }
  .debug_typenames 0 : { *(.debug_typenames) }
  .debug_varnames  0 : { *(.debug_varnames) }
}

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