OSDN Git Service

nios/nios2 support by Wentao Xu <wentao@microtronix.com>
[uclinux-h8/elf2flt.git] / elf2flt.ld
index 184b381..e0f3f2b 100644 (file)
@@ -2,11 +2,11 @@
 ENTRY (_start)
 
 MEMORY {
-       flatmem : ORIGIN = 0x0, LENGTH = 0xffffff
-       junk    : ORIGIN = 0x0, LENGTH = 0x100000
+       flatmem : ORIGIN = 0x0, LENGTH = 0xfffffff
 }
 
 SECTIONS {
+
        .text 0x0 : {
                . = . + 4;
                . = ALIGN(0x4) ;
@@ -35,9 +35,10 @@ W_RODAT              *(.rodata.*)
                *(.call_table_data)
                *(.call_table_text)
 
-               . = ALIGN(0x10) ;
+               . = ALIGN(0x20) ;
                _etext = . ;
        } > flatmem
+
        .data : {
                . = ALIGN(0x4) ;
                _sdata = . ;
@@ -45,7 +46,10 @@ W_RODAT              *(.rodata.*)
                data_start = . ;
                *(.got.plt)
                *(.got)
+               FILL(0) ;
+               . = ALIGN(0x20) ; 
                LONG(-1)
+               . = ALIGN(0x20) ; 
 R_RODAT                *(.rodata)
 R_RODAT                *(.rodata1)
 R_RODAT                *(.rodata.*)
@@ -57,23 +61,48 @@ R_RODAT             *(.rodata.*)
                *(.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) ;
+               __DTOR_END__ = .;
+
+               . = ALIGN(0x10) ; 
                _edata = . ;
        } > flatmem
+
        .bss : {
                . = ALIGN(0x4) ;
                _sbss = ALIGN(0x4) ;
@@ -85,15 +114,32 @@ R_RODAT            *(.rodata.*)
                *(.dynbss)
                *(.bss)
                *(.bss.*)
+               *(.bss*)
+               *(.gnu.linkonce.b*)
                *(COMMON)
-               . = ALIGN(0x4) ;
+               . = ALIGN(0x10) ;
                _ebss = . ;
                _end = . ;
                end = . ;
        } > flatmem
 
-       .junk : {
-               *(.rel*)
-               *(.rela*)
-       } > junk
+       .stack : {
+               . = ALIGN(0x4);
+               __stack_start = .;
+       }
+
+       .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) }
 }