OSDN Git Service

nios/nios2 support by Wentao Xu <wentao@microtronix.com>
[uclinux-h8/elf2flt.git] / elf2flt.ld
index dcefc0c..e0f3f2b 100644 (file)
@@ -2,10 +2,11 @@
 ENTRY (_start)
 
 MEMORY {
-       flatmem : ORIGIN = 0x0, LENGTH = 0xffffff
+       flatmem : ORIGIN = 0x0, LENGTH = 0xfffffff
 }
 
 SECTIONS {
+
        .text 0x0 : {
                . = . + 4;
                . = ALIGN(0x4) ;
@@ -34,9 +35,10 @@ W_RODAT              *(.rodata.*)
                *(.call_table_data)
                *(.call_table_text)
 
-               . = ALIGN(0x10) ;
+               . = ALIGN(0x20) ;
                _etext = . ;
        } > flatmem
+
        .data : {
                . = ALIGN(0x4) ;
                _sdata = . ;
@@ -45,9 +47,9 @@ W_RODAT               *(.rodata.*)
                *(.got.plt)
                *(.got)
                FILL(0) ;
-               . = ALIGN(0x10) ; 
+               . = ALIGN(0x20) ; 
                LONG(-1)
-               . = ALIGN(0x10) ; 
+               . = ALIGN(0x20) ; 
 R_RODAT                *(.rodata)
 R_RODAT                *(.rodata1)
 R_RODAT                *(.rodata.*)
@@ -59,29 +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) ;
-               /* LATER __CTOR_LIST__ = .; */
-               /* LATER LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2) */
+               __CTOR_LIST__ = .;
+               LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)
                *(.ctors)
                LONG(0)
-               /* LATER __CTOR_END__ = .; */
-               /* LATER __DTOR_LIST__ = .; */
-               /* LATER LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2) */
+               __CTOR_END__ = .;
+               __DTOR_LIST__ = .;
+               LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)
                *(.dtors)
                LONG(0)
-               /* LATER __DTOR_END__ = .; */
+               __DTOR_END__ = .;
 
                . = ALIGN(0x10) ; 
                _edata = . ;
        } > flatmem
+
        .bss : {
                . = ALIGN(0x4) ;
                _sbss = ALIGN(0x4) ;
@@ -93,6 +114,8 @@ R_RODAT              *(.rodata.*)
                *(.dynbss)
                *(.bss)
                *(.bss.*)
+               *(.bss*)
+               *(.gnu.linkonce.b*)
                *(COMMON)
                . = ALIGN(0x10) ;
                _ebss = . ;
@@ -100,6 +123,11 @@ R_RODAT            *(.rodata.*)
                end = . ;
        } > flatmem
 
+       .stack : {
+               . = ALIGN(0x4);
+               __stack_start = .;
+       }
+
        .junk 0 : { *(.rel*) *(.rela*) }
        /* Stabs debugging sections.    */
        .stab 0 : { *(.stab) }