OSDN Git Service

nios/nios2 support by Wentao Xu <wentao@microtronix.com>
[uclinux-h8/elf2flt.git] / elf2flt.ld
index 0b5e3f3..e0f3f2b 100644 (file)
 ENTRY (_start)
 
 MEMORY {
-        flatmem : ORIGIN = 0x0, LENGTH = 0x100000
-       junk    : ORIGIN = 0x0, LENGTH = 0x100000
+       flatmem : ORIGIN = 0x0, LENGTH = 0xfffffff
 }
 
 SECTIONS {
-        .text 0 : {
+
+       .text 0x0 : {
                . = . + 4;
-                . = ALIGN(0x4) ;
-                _stext = . ;
-                *(.text)
-                *(.text.*)
-                *(.gnu.warning)
-                *(.stub)
-                *(.gnu.linkonce.t*)
-                *(.glue_7t)
+               . = ALIGN(0x4) ;
+               _stext = . ;
+               *(.text)
+               *(.text.*)
+               *(.gnu.warning)
+               *(.stub)
+               *(.gnu.linkonce.t*)
+               *(.glue_7t)
                *(.glue_7)
-                *(.init)
+               *(.jcr)
+               *(.init)
                *(.fini)
 
-                /* This is special code area at the end of the normal
-                   text section.  It contains a small lookup table at
-                   the start followed by the code pointed to by entries
-                   in the lookup table.  */
-                . = ALIGN (4) ;
-                PROVIDE(__ctbp = .);
-                *(.call_table_data)
-                *(.call_table_text)
-
-                . = ALIGN(0x10) ;
-                _etext = . ;
-        } > flatmem
-        .data : {
-                . = ALIGN(0x4) ;
-                _sdata = . ;
+W_RODAT                *(.rodata)
+W_RODAT                *(.rodata1)
+W_RODAT                *(.rodata.*)
+
+               /* This is special code area at the end of the normal
+                  text section.  It contains a small lookup table at
+                  the start followed by the code pointed to by entries
+                  in the lookup table.  */
+               . = ALIGN (4) ;
+               PROVIDE(__ctbp = .);
+               *(.call_table_data)
+               *(.call_table_text)
+
+               . = ALIGN(0x20) ;
+               _etext = . ;
+       } > flatmem
+
+       .data : {
+               . = ALIGN(0x4) ;
+               _sdata = . ;
                __data_start = . ;
                data_start = . ;
                *(.got.plt)
                *(.got)
+               FILL(0) ;
+               . = ALIGN(0x20) ; 
                LONG(-1)
-                *(.rodata)
-                *(.rodata1)
-                *(.rodata.*)
-                *(.gnu.linkonce.r*)
-                *(.rodata1)
-                *(.data)
-                *(.data1)
-                *(.data.*)
-                *(.gnu.linkonce.d*)
-                *(.data1)
-                *(.eh_frame)
-                *(.gcc_except_table)
-                *(.sdata) 
-                *(.sdata.*)
-                *(.gnu.linkonce.s.*)
+               . = ALIGN(0x20) ; 
+R_RODAT                *(.rodata)
+R_RODAT                *(.rodata1)
+R_RODAT                *(.rodata.*)
+               *(.gnu.linkonce.r*)
+               *(.data)
+               *(.data1)
+               *(.data.*)
+               *(.gnu.linkonce.d*)
+               *(.data1)
+               *(.eh_frame)
+               *(.gcc_except_table)
+
+               /* Microblaze has .sdata and .sbss (small bss).  They must
+                  be contiguous, so please don't move any of this. JW */
+               _ssrw = . ;                     
+               *(.sdata) 
+               *(.sdata.*)
+               *(.sbss)                        /* Don't move this! */
+               _essrw = . ;
+
+               _ssrw_size = _essrw - _ssrw;
+               PROVIDE(_SDA_BASE_ = _ssrw + (_ssrw_size / 2));
+
+               *(.gnu.linkonce.s.*)
                *(__libc_atexit)
                *(__libc_subinit)
                *(__libc_subfreeres)
                *(.note.ABI-tag)
+
+               /* microblaze-specific read-only small data area
+                  and associated locating symbols */
+               _ssro = . ;
+               *(.sdata2)
+               _essro = . ;
+               _ssro_size = _essro - _ssro;
+               PROVIDE(_SDA2_BASE_ = _ssro + (_ssro_size / 2));
+
                . = ALIGN(4) ;
-               *(.ctors.*)
+               __CTOR_LIST__ = .;
+               LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)
                *(.ctors)
                LONG(0)
-               *(.dtors.*)
+               __CTOR_END__ = .;
+               __DTOR_LIST__ = .;
+               LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)
                *(.dtors)
                LONG(0)
-                . = ALIGN(0x10) ;
-                _edata = . ;
-        } > flatmem
-        .bss : {
-                . = ALIGN(0x4) ;
-                _sbss = ALIGN(0x4) ;
+               __DTOR_END__ = .;
+
+               . = ALIGN(0x10) ; 
+               _edata = . ;
+       } > flatmem
+
+       .bss : {
+               . = ALIGN(0x4) ;
+               _sbss = ALIGN(0x4) ;
                __bss_start = . ;
-                *(.dynsbss)
-                *(.sbss)
-                *(.sbss.*)
-                *(.scommon)
-                *(.dynbss)
-                *(.bss)
-                *(.bss.*)
-                *(COMMON)
-                . = ALIGN(0x4) ;
-                _ebss = . ;
+               *(.dynsbss)
+               *(.sbss)
+               *(.sbss.*)
+               *(.scommon)
+               *(.dynbss)
+               *(.bss)
+               *(.bss.*)
+               *(.bss*)
+               *(.gnu.linkonce.b*)
+               *(COMMON)
+               . = ALIGN(0x10) ;
+               _ebss = . ;
                _end = . ;
                end = . ;
-        } > flatmem
+       } > flatmem
+
+       .stack : {
+               . = ALIGN(0x4);
+               __stack_start = .;
+       }
 
-       .junk : {
-               *(.rel*)
-               *(.rela*)
-       } > junk
+       .junk 0 : { *(.rel*) *(.rela*) }
+       /* Stabs debugging sections.    */
+       .stab 0 : { *(.stab) }
+       .stabstr 0 : { *(.stabstr) }
+       .stab.excl 0 : { *(.stab.excl) }
+       .stab.exclstr 0 : { *(.stab.exclstr) }
+       .stab.index 0 : { *(.stab.index) }
+       .stab.indexstr 0 : { *(.stab.indexstr) }
+       .comment 0 : { *(.comment) }
+       .debug_abbrev 0 : { *(.debug_abbrev) }
+       .debug_info 0 : { *(.debug_info) }
+       .debug_line 0 : { *(.debug_line) }
+       .debug_pubnames 0 : { *(.debug_pubnames) }
+       .debug_aranges 0 : { *(.debug_aranges) }
 }