diff options
-rw-r--r-- | ld/ChangeLog | 15 | ||||
-rw-r--r-- | ld/scripttempl/h8300.sc | 90 | ||||
-rw-r--r-- | ld/scripttempl/h8300h.sc | 95 | ||||
-rw-r--r-- | ld/scripttempl/h8300s.sc | 95 | ||||
-rw-r--r-- | ld/scripttempl/h8500.sc | 59 | ||||
-rw-r--r-- | ld/scripttempl/h8500b.sc | 18 | ||||
-rw-r--r-- | ld/scripttempl/h8500c.sc | 21 | ||||
-rw-r--r-- | ld/scripttempl/h8500m.sc | 54 | ||||
-rw-r--r-- | ld/scripttempl/h8500s.sc | 57 | ||||
-rw-r--r-- | ld/scripttempl/v850.sc | 68 | ||||
-rw-r--r-- | ld/scripttempl/w65.sc | 65 | ||||
-rw-r--r-- | ld/scripttempl/z8000.sc | 45 |
12 files changed, 401 insertions, 281 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 39a6b79..359aae6 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,18 @@ +2000-11-08 Nick Clifton <nickc@redhat.com> + + * scripttempl/h8300.sc: Use ${CONSTRUCTING...} to enclose + constructors and destructors. + * scripttempl/h8300h.sc: Ditto. + * scripttempl/h8300s.sc: Ditto. + * scripttempl/h8500.sc: Ditto. + * scripttempl/h8500b.sc: Ditto. + * scripttempl/h8500c.sc: Ditto. + * scripttempl/h8500m.sc: Ditto. + * scripttempl/h8500s.sc: Ditto. + * scripttempl/v850.sc: Ditto. + * scripttempl/w65.sc: Ditto. + * scripttempl/z8000.sc: Ditto. + 2000-11-06 Alan Modra <alan@linuxcare.com.au> Merge most place_orphan changes from mainline. diff --git a/ld/scripttempl/h8300.sc b/ld/scripttempl/h8300.sc index f2f876e..6f4cdce 100644 --- a/ld/scripttempl/h8300.sc +++ b/ld/scripttempl/h8300.sc @@ -1,3 +1,13 @@ +TORS=".tors : + { + ___ctors = . ; + *(.ctors) + ___ctors_end = . ; + ___dtors = . ; + *(.dtors) + ___dtors_end = . ; + } > ram" + cat <<EOF OUTPUT_FORMAT("${OUTPUT_FORMAT}") OUTPUT_ARCH(${ARCH}) @@ -18,52 +28,60 @@ MEMORY SECTIONS { -.vectors : { - /* Use something like this to place a specific function's address - into the vector table. +.vectors : + { + /* Use something like this to place a specific + function's address into the vector table. - SHORT(ABSOLUTE(_foobar)) */ + SHORT (ABSOLUTE (_foobar)). */ - *(.vectors) + *(.vectors) } ${RELOCATING+ > vectors} -.text : { - *(.rodata) - *(.text) - *(.strings) - ${RELOCATING+ _etext = . ; } - } ${RELOCATING+ > ram} -.tors : { - ___ctors = . ; - *(.ctors) - ___ctors_end = . ; - ___dtors = . ; - *(.dtors) - ___dtors_end = . ; +.text : + { + *(.rodata) + *(.text) + *(.strings) + ${RELOCATING+ _etext = . ; } } ${RELOCATING+ > ram} -.data : { - *(.data) - *(.tiny) - ${RELOCATING+ _edata = . ; } + + ${CONSTRUCTING+${TORS}} + +.data : + { + *(.data) + *(.tiny) + ${RELOCATING+ _edata = . ; } } ${RELOCATING+ > ram} -.bss : { - ${RELOCATING+ _bss_start = . ;} - *(.bss) - *(COMMON) - ${RELOCATING+ _end = . ; } + +.bss : + { + ${RELOCATING+ _bss_start = . ;} + *(.bss) + *(COMMON) + ${RELOCATING+ _end = . ; } } ${RELOCATING+ >ram} -.stack : { - ${RELOCATING+ _stack = . ; } - *(.stack) + +.stack : + { + ${RELOCATING+ _stack = . ; } + *(.stack) } ${RELOCATING+ > topram} -.eight : { - *(.eight) + +.eight : + { + *(.eight) } ${RELOCATING+ > eight} -.stab 0 ${RELOCATING+(NOLOAD)} : { - [ .stab ] + +.stab 0 ${RELOCATING+(NOLOAD)} : + { + [ .stab ] } -.stabstr 0 ${RELOCATING+(NOLOAD)} : { - [ .stabstr ] + +.stabstr 0 ${RELOCATING+(NOLOAD)} : + { + [ .stabstr ] } } EOF diff --git a/ld/scripttempl/h8300h.sc b/ld/scripttempl/h8300h.sc index d1cfd86..e543df9 100644 --- a/ld/scripttempl/h8300h.sc +++ b/ld/scripttempl/h8300h.sc @@ -1,3 +1,13 @@ +TORS=".tors : + { + ___ctors = . ; + *(.ctors) + ___ctors_end = . ; + ___dtors = . ; + *(.dtors) + ___dtors_end = . ; + } > ram" + cat <<EOF OUTPUT_FORMAT("${OUTPUT_FORMAT}") OUTPUT_ARCH(h8300h) @@ -24,53 +34,64 @@ MEMORY SECTIONS { -.vectors : { - /* Use something like this to place a specific function's address - into the vector table. +.vectors : + { + /* Use something like this to place a specific + function's address into the vector table. - LONG(ABSOLUTE(_foobar)) */ + LONG (ABSOLUTE (_foobar)). */ - *(.vectors) + *(.vectors) } ${RELOCATING+ > vectors} -.text : { - *(.rodata) - *(.text) - *(.strings) - ${RELOCATING+ _etext = . ; } - } ${RELOCATING+ > ram} -.tors : { - ___ctors = . ; - *(.ctors) - ___ctors_end = . ; - ___dtors = . ; - *(.dtors) - ___dtors_end = . ; + +.text : + { + *(.rodata) + *(.text) + *(.strings) + ${RELOCATING+ _etext = . ; } } ${RELOCATING+ > ram} -.data : { - *(.data) - ${RELOCATING+ _edata = . ; } + + ${CONSTRUCTING+${TORS}} + +.data : + { + *(.data) + ${RELOCATING+ _edata = . ; } } ${RELOCATING+ > ram} -.bss : { - ${RELOCATING+ _bss_start = . ;} - *(.bss) - *(COMMON) - ${RELOCATING+ _end = . ; } + +.bss : + { + ${RELOCATING+ _bss_start = . ;} + *(.bss) + *(COMMON) + ${RELOCATING+ _end = . ; } } ${RELOCATING+ >ram} -.stack : { - ${RELOCATING+ _stack = . ; } - *(.stack) + +.stack : + { + ${RELOCATING+ _stack = . ; } + *(.stack) } ${RELOCATING+ > topram} -.tiny : { - *(.tiny) + +.tiny : + { + *(.tiny) } ${RELOCATING+ > tiny} -.eight : { - *(.eight) + +.eight : + { + *(.eight) } ${RELOCATING+ > eight} -.stab 0 ${RELOCATING+(NOLOAD)} : { - [ .stab ] + +.stab 0 ${RELOCATING+(NOLOAD)} : + { + [ .stab ] } -.stabstr 0 ${RELOCATING+(NOLOAD)} : { - [ .stabstr ] + +.stabstr 0 ${RELOCATING+(NOLOAD)} : + { + [ .stabstr ] } } EOF diff --git a/ld/scripttempl/h8300s.sc b/ld/scripttempl/h8300s.sc index 45474fc..b8a3ea5 100644 --- a/ld/scripttempl/h8300s.sc +++ b/ld/scripttempl/h8300s.sc @@ -1,3 +1,13 @@ +TORS=".tors : + { + ___ctors = . ; + *(.ctors) + ___ctors_end = . ; + ___dtors = . ; + *(.dtors) + ___dtors_end = . ; + } > ram" + cat <<EOF OUTPUT_FORMAT("${OUTPUT_FORMAT}") OUTPUT_ARCH(h8300s) @@ -24,53 +34,64 @@ MEMORY SECTIONS { -.vectors : { - /* Use something like this to place a specific function's address - into the vector table. +.vectors : + { + /* Use something like this to place a specific function's address + into the vector table. - LONG(ABSOLUTE(_foobar)) */ + LONG (ABSOLUTE (_foobar)). */ - *(.vectors) + *(.vectors) } ${RELOCATING+ > vectors} -.text : { - *(.rodata) - *(.text) - *(.strings) - ${RELOCATING+ _etext = . ; } - } ${RELOCATING+ > ram} -.tors : { - ___ctors = . ; - *(.ctors) - ___ctors_end = . ; - ___dtors = . ; - *(.dtors) - ___dtors_end = . ; + +.text : + { + *(.rodata) + *(.text) + *(.strings) + ${RELOCATING+ _etext = . ; } } ${RELOCATING+ > ram} -.data : { - *(.data) - ${RELOCATING+ _edata = . ; } + + ${CONSTRUCTING+${TORS}} + +.data : + { + *(.data) + ${RELOCATING+ _edata = . ; } } ${RELOCATING+ > ram} -.bss : { - ${RELOCATING+ _bss_start = . ;} - *(.bss) - *(COMMON) - ${RELOCATING+ _end = . ; } + +.bss : + { + ${RELOCATING+ _bss_start = . ;} + *(.bss) + *(COMMON) + ${RELOCATING+ _end = . ; } } ${RELOCATING+ >ram} -.stack : { - ${RELOCATING+ _stack = . ; } - *(.stack) + +.stack : + { + ${RELOCATING+ _stack = . ; } + *(.stack) } ${RELOCATING+ > topram} -.tiny : { - *(.tiny) + +.tiny : + { + *(.tiny) } ${RELOCATING+ > tiny} -.eight : { - *(.eight) + +.eight : + { + *(.eight) } ${RELOCATING+ > eight} -.stab 0 ${RELOCATING+(NOLOAD)} : { - [ .stab ] + +.stab 0 ${RELOCATING+(NOLOAD)} : + { + [ .stab ] } -.stabstr 0 ${RELOCATING+(NOLOAD)} : { - [ .stabstr ] + +.stabstr 0 ${RELOCATING+(NOLOAD)} : + { + [ .stabstr ] } } EOF diff --git a/ld/scripttempl/h8500.sc b/ld/scripttempl/h8500.sc index d6a39ee..f6e88c6 100644 --- a/ld/scripttempl/h8500.sc +++ b/ld/scripttempl/h8500.sc @@ -1,3 +1,11 @@ +TORS=" + ___ctors = . ; + *(.ctors) + ___ctors_end = . ; + ___dtors = . ; + *(.dtors) + ___dtors_end = . ;" + cat <<EOF OUTPUT_FORMAT("${OUTPUT_FORMAT}") OUTPUT_ARCH(${ARCH}) @@ -8,52 +16,47 @@ SECTIONS { .text ${RELOCATING+ 0x0000 } : { - *(.text) - - ${RELOCATING+ _etext = . ; } + *(.text) + ${RELOCATING+ _etext = . ; } } - .data ${RELOCATING+ . } : { - *(.data) - ${RELOCATING+ _edata = . ; } + *(.data) + ${RELOCATING+ _edata = . ; } } .rdata ${RELOCATING+ . } : { - *(.rdata); + *(.rdata); *(.strings) - ___ctors = . ; - *(.ctors) - ___ctors_end = . ; - ___dtors = . ; - *(.dtors) - ___dtors_end = . ; -} + + ${CONSTRUCTING+${TORS}} + } .bss ${RELOCATING+ . } : { - ${RELOCATING+ __start_bss = . ; } - *(.bss) - *(COMMON) - ${RELOCATING+ _end = . ; } + ${RELOCATING+ __start_bss = . ; } + *(.bss) + *(COMMON) + ${RELOCATING+ _end = . ; } } .stack ${RELOCATING+ 0xfff0} : { - ${RELOCATING+ _stack = . ; } - *(.stack) + ${RELOCATING+ _stack = . ; } + *(.stack) } - .stab 0 ${RELOCATING+(NOLOAD)} : - { - [ .stab ] - } - .stabstr 0 ${RELOCATING+(NOLOAD)} : - { - [ .stabstr ] - } +.stab 0 ${RELOCATING+(NOLOAD)} : + { + [ .stab ] + } + +.stabstr 0 ${RELOCATING+(NOLOAD)} : + { + [ .stabstr ] + } } EOF diff --git a/ld/scripttempl/h8500b.sc b/ld/scripttempl/h8500b.sc index ef5fa2c..a64eebc 100644 --- a/ld/scripttempl/h8500b.sc +++ b/ld/scripttempl/h8500b.sc @@ -1,3 +1,11 @@ +TORS=" + ___ctors = . ; + *(.ctors) + ___ctors_end = . ; + ___dtors = . ; + *(.dtors) + ___dtors_end = . ;" + cat <<EOF OUTPUT_FORMAT("${OUTPUT_FORMAT}") OUTPUT_ARCH(${ARCH}) @@ -24,13 +32,9 @@ SECTIONS { *(.rdata); *(.strings) - ___ctors = . ; - *(.ctors) - ___ctors_end = . ; - ___dtors = . ; - *(.dtors) - ___dtors_end = . ; -} + + ${CONSTRUCTING+${TORS}} + } .bss ${RELOCATING+ 0x40000} : { diff --git a/ld/scripttempl/h8500c.sc b/ld/scripttempl/h8500c.sc index 03880e3..bc69649 100644 --- a/ld/scripttempl/h8500c.sc +++ b/ld/scripttempl/h8500c.sc @@ -1,3 +1,11 @@ +TORS=" + ___ctors = . ; + *(.ctors) + ___ctors_end = . ; + ___dtors = . ; + *(.dtors) + ___dtors_end = . ;" + cat <<EOF OUTPUT_FORMAT("${OUTPUT_FORMAT}") OUTPUT_ARCH(${ARCH}) @@ -20,15 +28,12 @@ SECTIONS ${RELOCATING+ _edata = . ; } } ${RELOCATING+ > ram} -.rdata 0x30000 : { +.rdata 0x30000 : + { *(.rdata); - ___ctors = . ; - *(.ctors) - ___ctors_end = . ; - ___dtors = . ; - *(.dtors) - ___dtors_end = . ; -} ${RELOCATING+ > ram} + + ${CONSTRUCTING+${TORS}} + } ${RELOCATING+ > ram} .bss 0x40000 : { diff --git a/ld/scripttempl/h8500m.sc b/ld/scripttempl/h8500m.sc index 040a4a7..06ce2af 100644 --- a/ld/scripttempl/h8500m.sc +++ b/ld/scripttempl/h8500m.sc @@ -1,3 +1,11 @@ +TORS=" + ___ctors = . ; + *(.ctors) + ___ctors_end = . ; + ___dtors = . ; + *(.dtors) + ___dtors_end = . ;" + cat <<EOF OUTPUT_FORMAT("${OUTPUT_FORMAT}") OUTPUT_ARCH(${ARCH}) @@ -9,50 +17,46 @@ SECTIONS .text ${RELOCATING+ 0x10000} : { *(.text) - ${RELOCATING+ _etext = . ; } + ${RELOCATING+ _etext = . ; } } - .data ${RELOCATING+ 0x20000} : { - *(.data) - ${RELOCATING+ _edata = . ; } + *(.data) + ${RELOCATING+ _edata = . ; } } .rdata ${RELOCATING+ . } : { - *(.rdata); + *(.rdata); *(.strings) - ___ctors = . ; - *(.ctors) - ___ctors_end = . ; - ___dtors = . ; - *(.dtors) - ___dtors_end = . ; + + ${CONSTRUCTING+${TORS}} } .bss ${RELOCATING+ . } : { - ${RELOCATING+ __start_bss = . ; } - *(.bss) - *(COMMON) - ${RELOCATING+ _end = . ; } + ${RELOCATING+ __start_bss = . ; } + *(.bss) + *(COMMON) + ${RELOCATING+ _end = . ; } } .stack ${RELOCATING+ 0x2fff0} : { - ${RELOCATING+ _stack = . ; } - *(.stack) + ${RELOCATING+ _stack = . ; } + *(.stack) } - .stab 0 ${RELOCATING+(NOLOAD)} : - { - [ .stab ] - } - .stabstr 0 ${RELOCATING+(NOLOAD)} : - { - [ .stabstr ] - } +.stab 0 ${RELOCATING+(NOLOAD)} : + { + [ .stab ] + } + +.stabstr 0 ${RELOCATING+(NOLOAD)} : + { + [ .stabstr ] + } } EOF diff --git a/ld/scripttempl/h8500s.sc b/ld/scripttempl/h8500s.sc index 11615d8..2567489 100644 --- a/ld/scripttempl/h8500s.sc +++ b/ld/scripttempl/h8500s.sc @@ -1,3 +1,11 @@ +TORS=" + ___ctors = . ; + *(.ctors) + ___ctors_end = . ; + ___dtors = . ; + *(.dtors) + ___dtors_end = . ;" + cat <<EOF OUTPUT_FORMAT("${OUTPUT_FORMAT}") OUTPUT_ARCH(${ARCH}) @@ -8,50 +16,47 @@ SECTIONS { .text ${RELOCATING+ 0x10000 } : { - *(.text) - ${RELOCATING+ _etext = . ; } + *(.text) + ${RELOCATING+ _etext = . ; } } .rdata ${RELOCATING+ 0x20000 } : { - *(.rdata); - *(.strings) - ___ctors = . ; - *(.ctors) - ___ctors_end = . ; - ___dtors = . ; - *(.dtors) - ___dtors_end = . ; + *(.rdata); + *(.strings) + + ${CONSTRUCTING+${TORS}} } .data ${RELOCATING+ . } : { - *(.data) - ${RELOCATING+ _edata = . ; } + *(.data) + ${RELOCATING+ _edata = . ; } } .bss ${RELOCATING+ .} : { - ${RELOCATING+ __start_bss = . ; } - *(.bss) - *(COMMON) - ${RELOCATING+ _end = . ; } + ${RELOCATING+ __start_bss = . ; } + *(.bss) + *(COMMON) + ${RELOCATING+ _end = . ; } } .stack ${RELOCATING+ 0x2fff0} : { - ${RELOCATING+ _stack = . ; } - *(.stack) + ${RELOCATING+ _stack = . ; } + *(.stack) } - .stab 0 ${RELOCATING+(NOLOAD)} : - { - [ .stab ] - } - .stabstr 0 ${RELOCATING+(NOLOAD)} : - { - [ .stabstr ] - } +.stab 0 ${RELOCATING+(NOLOAD)} : + { + [ .stab ] + } + +.stabstr 0 ${RELOCATING+(NOLOAD)} : + { + [ .stabstr ] + } } EOF diff --git a/ld/scripttempl/v850.sc b/ld/scripttempl/v850.sc index 0a20954..90731de 100644 --- a/ld/scripttempl/v850.sc +++ b/ld/scripttempl/v850.sc @@ -4,13 +4,13 @@ OUTPUT_FORMAT("elf32-v850", "elf32-v850", OUTPUT_ARCH(v850) ENTRY(_start) SEARCH_DIR(.); -/*/critters/slug/grossman/install/sun4/v850-elf/lib*/ SECTIONS { /* This saves a little space in the ELF file, since the zda starts at a higher location that the ELF headers take up. */ - .zdata ${ZDATA_START_ADDR} : { + .zdata ${ZDATA_START_ADDR} : + { *(.zdata) *(.zbss) *(reszdata) @@ -23,13 +23,14 @@ SECTIONS section. Specifically it prevents the zdata section from being marked READONLY. */ - .rozdata ${ROZDATA_START_ADDR} : { + .rozdata ${ROZDATA_START_ADDR} : + { *(.rozdata) *(romzdata) *(romzbss) } - /* Read-only sections, merged into text segment: */ + /* Read-only sections, merged into text segment. */ . = ${TEXT_START_ADDR}; .interp : { *(.interp) } .hash : { *(.hash) } @@ -58,9 +59,11 @@ SECTIONS .init : { KEEP (*(.init)) } =0 .plt : { *(.plt) } - .text : { + .text : + { *(.text) ${RELOCATING+*(.text.*)} + /* .gnu.warning sections are handled specially by elf32.em. */ *(.gnu.warning) *(.gnu.linkonce.t*) @@ -73,45 +76,51 @@ SECTIONS It contains a small lookup table at the start followed by the code pointed to by entries in the lookup table. */ - .call_table_data ${CALL_TABLE_START_ADDR} : { + .call_table_data ${CALL_TABLE_START_ADDR} : + { ${RELOCATING+PROVIDE(__ctbp = .);} *(.call_table_data) - } = 0xff /* fill gaps with 0xff */ - .call_table_text : { + } = 0xff /* Fill gaps with 0xff. */ + + .call_table_text : + { *(.call_table_text) } - .fini : { KEEP (*(.fini)) } =0 + .fini : { KEEP (*(.fini)) } =0 .rodata : { *(.rodata) ${RELOCATING+*(.rodata.*)} *(.gnu.linkonce.r*) } .rodata1 : { *(.rodata1) } - .data : { + .data : + { *(.data) ${RELOCATING+*(.data.*)} *(.gnu.linkonce.d*) CONSTRUCTORS } .data1 : { *(.data1) } - .ctors : { - ${RELOCATING+___ctors = .;} + .ctors : + { + ${CONSTRUCTING+___ctors = .;} KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*crtend(.ctors)) - ${RELOCATING+___ctors_end = .;} + ${CONSTRUCTING+___ctors_end = .;} } - - .dtors : { - ${RELOCATING+___dtors = .;} + .dtors : + { + ${CONSTRUCTING+___dtors = .;} KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*crtend.o(.dtors)) - ${RELOCATING+___dtors_end = .;} + ${CONSTRUCTING+___dtors_end = .;} } .got : { *(.got.plt) *(.got) } .dynamic : { *(.dynamic) } - .tdata ${TDATA_START_ADDR} : { + .tdata ${TDATA_START_ADDR} : + { ${RELOCATING+PROVIDE (__ep = .);} *(.tbyte) *(.tcommon_byte) @@ -123,21 +132,26 @@ SECTIONS /* We want the small data sections together, so single-instruction offsets can access them all, and initialized data all before uninitialized, so we can shorten the on-disk segment size. */ - .sdata ${SDATA_START_ADDR} : { + + .sdata ${SDATA_START_ADDR} : + { ${RELOCATING+PROVIDE (__gp = . + 0x8000);} *(.sdata) } /* See comment about .rozdata. */ - .rosdata ${ROSDATA_START_ADDR} : { + .rosdata ${ROSDATA_START_ADDR} : + { *(.rosdata) } /* We place the .sbss data section AFTER the .rosdata section, so that it can directly preceed the .bss section. This allows runtime startup code to initialise all the zero-data sections by simply taking the - value of '_edata' and zeroing until it reaches '_end' */ - .sbss : { + value of '_edata' and zeroing until it reaches '_end'. */ + + .sbss : + { ${RELOCATING+__sbss_start = .;} *(.sbss) *(.scommon) @@ -184,7 +198,7 @@ SECTIONS .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2 */ - .debug_info 0 : { *(.debug_info) } + .debug_info 0 : { *(.debug_info) *(.gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line) } .debug_frame 0 : { *(.debug_frame) } @@ -192,17 +206,17 @@ SECTIONS .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } - /* SGI/MIPS DWARF 2 extensions */ + /* 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) } - /* User stack */ - .stack 0x200000 : { + /* User stack. */ + .stack 0x200000 : + { ${RELOCATING+__stack = .;} *(.stack) } - /* These must appear regardless of . */ } EOF diff --git a/ld/scripttempl/w65.sc b/ld/scripttempl/w65.sc index f904495..f92d999 100644 --- a/ld/scripttempl/w65.sc +++ b/ld/scripttempl/w65.sc @@ -1,10 +1,21 @@ +TORS=".tors : + { + ___ctors = . ; + *(.ctors) + ___ctors_end = . ; + ___dtors = . ; + *(.dtors) + ___dtors_end = . ; + } > ram" + cat <<EOF OUTPUT_FORMAT("${OUTPUT_FORMAT}") OUTPUT_ARCH(${ARCH}) -MEMORY { +MEMORY +{ ram : o = 0x1000, l = 512k - } +} SECTIONS { @@ -12,44 +23,40 @@ SECTIONS { *(.text) *(.strings) - ${RELOCATING+ _etext = . ; } + ${RELOCATING+ _etext = . ; } } ${RELOCATING+ > ram} - -.tors : { - ___ctors = . ; - *(.ctors) - ___ctors_end = . ; - ___dtors = . ; - *(.dtors) - ___dtors_end = . ; -} ${RELOCATING+ > ram} + ${CONSTRUCTING+${TORS}} .data : { - *(.data) - ${RELOCATING+ _edata = . ; } + *(.data) + ${RELOCATING+ _edata = . ; } } ${RELOCATING+ > ram} + .bss : { - ${RELOCATING+ _bss_start = . ; } - *(.bss) - *(COMMON) - ${RELOCATING+ _end = . ; } + ${RELOCATING+ _bss_start = . ; } + *(.bss) + *(COMMON) + ${RELOCATING+ _end = . ; } } ${RELOCATING+ >ram} -.stack ${RELOCATING+ 0x30000 } : + +.stack ${RELOCATING+ 0x30000 } : { - ${RELOCATING+ _stack = . ; } - *(.stack) + ${RELOCATING+ _stack = . ; } + *(.stack) } ${RELOCATING+ > ram} - .stab . (NOLOAD) : - { - [ .stab ] - } - .stabstr . (NOLOAD) : - { - [ .stabstr ] - } + +.stab . (NOLOAD) : + { + [ .stab ] + } + +.stabstr . (NOLOAD) : + { + [ .stabstr ] + } } EOF diff --git a/ld/scripttempl/z8000.sc b/ld/scripttempl/z8000.sc index 2b87930..646c880 100644 --- a/ld/scripttempl/z8000.sc +++ b/ld/scripttempl/z8000.sc @@ -5,7 +5,8 @@ ENTRY(_start) SECTIONS { -.text ${BIG+ ${RELOCATING+ 0x0000000}} : { +.text ${BIG+ ${RELOCATING+ 0x0000000}} : + { *(.text) *(.strings) *(.rdata) @@ -13,38 +14,40 @@ SECTIONS .ctors ${BIG+ ${RELOCATING+ 0x2000000}} : { - ${RELOCATING+ ___ctors = . ; } + ${CONSTRUCTING+ ___ctors = . ; } *(.ctors); - ${RELOCATING+ ___ctors_end = . ; } + ${CONSTRUCTING+ ___ctors_end = . ; } ___dtors = . ; *(.dtors); - ${RELOCATING+ ___dtors_end = . ; } + ${CONSTRUCTING+ ___dtors_end = . ; } } -.data ${BIG+ ${RELOCATING+ 0x3000000}} : { - *(.data) +.data ${BIG+ ${RELOCATING+ 0x3000000}} : + { + *(.data) } .bss ${BIG+ ${RELOCATING+ 0x4000000}} : - { - ${RELOCATING+ __start_bss = . ; } - *(.bss); - *(COMMON); - ${RELOCATING+ __end_bss = . ; } - } - -.heap ${BIG+ ${RELOCATING+ 0x5000000}} : { - ${RELOCATING+ __start_heap = . ; } - ${RELOCATING+ . = . + 20k ; } - ${RELOCATING+ __end_heap = . ; } + { + ${RELOCATING+ __start_bss = . ; } + *(.bss); + *(COMMON); + ${RELOCATING+ __end_bss = . ; } + } + +.heap ${BIG+ ${RELOCATING+ 0x5000000}} : + { + ${RELOCATING+ __start_heap = . ; } + ${RELOCATING+ . = . + 20k ; } + ${RELOCATING+ __end_heap = . ; } } .stack ${RELOCATING+ 0xf000 } : { - ${RELOCATING+ _stack = . ; } - *(.stack) - ${RELOCATING+ __stack_top = . ; } - } + ${RELOCATING+ _stack = . ; } + *(.stack) + ${RELOCATING+ __stack_top = . ; } + } } EOF |