diff options
Diffstat (limited to 'ld/scripttempl')
-rw-r--r-- | ld/scripttempl/aix.sc | 2 | ||||
-rw-r--r-- | ld/scripttempl/armbpabi.sc | 72 | ||||
-rw-r--r-- | ld/scripttempl/avr.sc | 64 | ||||
-rw-r--r-- | ld/scripttempl/elf.sc | 180 | ||||
-rw-r--r-- | ld/scripttempl/elf32cr16.sc | 3 | ||||
-rw-r--r-- | ld/scripttempl/elf32cr16c.sc | 3 | ||||
-rw-r--r-- | ld/scripttempl/elf32crx.sc | 3 | ||||
-rw-r--r-- | ld/scripttempl/elf32msp430.sc | 66 | ||||
-rw-r--r-- | ld/scripttempl/elf32msp430_3.sc | 58 | ||||
-rw-r--r-- | ld/scripttempl/elf32sh-symbian.sc | 78 | ||||
-rw-r--r-- | ld/scripttempl/elf64hppa.sc | 172 | ||||
-rw-r--r-- | ld/scripttempl/elf_chaos.sc | 108 | ||||
-rw-r--r-- | ld/scripttempl/elfd10v.sc | 20 | ||||
-rw-r--r-- | ld/scripttempl/elfd30v.sc | 128 | ||||
-rw-r--r-- | ld/scripttempl/elfi370.sc | 92 | ||||
-rw-r--r-- | ld/scripttempl/elfm68hc11.sc | 152 | ||||
-rw-r--r-- | ld/scripttempl/elfm68hc12.sc | 152 | ||||
-rw-r--r-- | ld/scripttempl/elfmicroblaze.sc | 4 | ||||
-rw-r--r-- | ld/scripttempl/elfxtensa.sc | 174 | ||||
-rw-r--r-- | ld/scripttempl/iq2000.sc | 110 | ||||
-rw-r--r-- | ld/scripttempl/mep.sc | 150 | ||||
-rw-r--r-- | ld/scripttempl/nw.sc | 75 | ||||
-rw-r--r-- | ld/scripttempl/psos.sc | 6 | ||||
-rw-r--r-- | ld/scripttempl/tic54xcoff.sc | 3 | ||||
-rw-r--r-- | ld/scripttempl/xstormy16.sc | 22 |
25 files changed, 929 insertions, 968 deletions
diff --git a/ld/scripttempl/aix.sc b/ld/scripttempl/aix.sc index d592dbe..722e337 100644 --- a/ld/scripttempl/aix.sc +++ b/ld/scripttempl/aix.sc @@ -12,7 +12,7 @@ SECTIONS .pad 0 : { *(.pad) } . = 0x10000000; - .text ${RELOCATING-0} : { + .text : { ${RELOCATING+PROVIDE (_text = .);} *(.text) *(.pr) diff --git a/ld/scripttempl/armbpabi.sc b/ld/scripttempl/armbpabi.sc index 90da2ed..5eacc44 100644 --- a/ld/scripttempl/armbpabi.sc +++ b/ld/scripttempl/armbpabi.sc @@ -27,12 +27,12 @@ if test -n "${COMMONPAGESIZE}"; then fi fi INTERP=".interp 0 : { *(.interp) }" -PLT=".plt ${RELOCATING-0} : { *(.plt) }" -RODATA=".rodata ${RELOCATING-0} : { *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.*}) }" +PLT=".plt : { *(.plt) }" +RODATA=".rodata : { *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.*}) }" DATARELRO=".data.rel.ro : { *(.data.rel.ro.local) *(.data.rel.ro*) }" DISCARDED="/DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }" if test -z "${NO_SMALL_DATA}"; then - SBSS=".sbss ${RELOCATING-0} : + SBSS=".sbss : { ${RELOCATING+PROVIDE (__sbss_start = .);} ${RELOCATING+PROVIDE (___sbss_start = .);} @@ -42,29 +42,29 @@ if test -z "${NO_SMALL_DATA}"; then ${RELOCATING+PROVIDE (__sbss_end = .);} ${RELOCATING+PROVIDE (___sbss_end = .);} }" - SBSS2=".sbss2 ${RELOCATING-0} : { *(.sbss2${RELOCATING+ .sbss2.* .gnu.linkonce.sb2.*}) }" + SBSS2=".sbss2 : { *(.sbss2${RELOCATING+ .sbss2.* .gnu.linkonce.sb2.*}) }" SDATA="/* 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 ${RELOCATING-0} : + .sdata : { ${RELOCATING+${SDATA_START_SYMBOLS}} *(.sdata${RELOCATING+ .sdata.* .gnu.linkonce.s.*}) }" - SDATA2=".sdata2 ${RELOCATING-0} : { *(.sdata2${RELOCATING+ .sdata2.* .gnu.linkonce.s2.*}) }" - REL_SDATA=".rel.sdata ${RELOCATING-0} : { *(.rel.sdata${RELOCATING+ .rel.sdata.* .rel.gnu.linkonce.s.*}) } - .rela.sdata ${RELOCATING-0} : { *(.rela.sdata${RELOCATING+ .rela.sdata.* .rela.gnu.linkonce.s.*}) }" - REL_SBSS=".rel.sbss ${RELOCATING-0} : { *(.rel.sbss${RELOCATING+ .rel.sbss.* .rel.gnu.linkonce.sb.*}) } - .rela.sbss ${RELOCATING-0} : { *(.rela.sbss${RELOCATING+ .rela.sbss.* .rela.gnu.linkonce.sb.*}) }" - REL_SDATA2=".rel.sdata2 ${RELOCATING-0} : { *(.rel.sdata2${RELOCATING+ .rel.sdata2.* .rel.gnu.linkonce.s2.*}) } - .rela.sdata2 ${RELOCATING-0} : { *(.rela.sdata2${RELOCATING+ .rela.sdata2.* .rela.gnu.linkonce.s2.*}) }" - REL_SBSS2=".rel.sbss2 ${RELOCATING-0} : { *(.rel.sbss2${RELOCATING+ .rel.sbss2.* .rel.gnu.linkonce.sb2.*}) } - .rela.sbss2 ${RELOCATING-0} : { *(.rela.sbss2${RELOCATING+ .rela.sbss2.* .rela.gnu.linkonce.sb2.*}) }" + SDATA2=".sdata2 : { *(.sdata2${RELOCATING+ .sdata2.* .gnu.linkonce.s2.*}) }" + REL_SDATA=".rel.sdata : { *(.rel.sdata${RELOCATING+ .rel.sdata.* .rel.gnu.linkonce.s.*}) } + .rela.sdata : { *(.rela.sdata${RELOCATING+ .rela.sdata.* .rela.gnu.linkonce.s.*}) }" + REL_SBSS=".rel.sbss : { *(.rel.sbss${RELOCATING+ .rel.sbss.* .rel.gnu.linkonce.sb.*}) } + .rela.sbss : { *(.rela.sbss${RELOCATING+ .rela.sbss.* .rela.gnu.linkonce.sb.*}) }" + REL_SDATA2=".rel.sdata2 : { *(.rel.sdata2${RELOCATING+ .rel.sdata2.* .rel.gnu.linkonce.s2.*}) } + .rela.sdata2 : { *(.rela.sdata2${RELOCATING+ .rela.sdata2.* .rela.gnu.linkonce.s2.*}) }" + REL_SBSS2=".rel.sbss2 : { *(.rel.sbss2${RELOCATING+ .rel.sbss2.* .rel.gnu.linkonce.sb2.*}) } + .rela.sbss2 : { *(.rela.sbss2${RELOCATING+ .rela.sbss2.* .rela.gnu.linkonce.sb2.*}) }" else NO_SMALL_DATA=" " fi test -n "$SEPARATE_GOTPLT" && SEPARATE_GOTPLT=" " -CTOR=".ctors ${CONSTRUCTING-0} : +CTOR=".ctors : { ${CONSTRUCTING+${CTOR_START}} /* gcc uses crtbegin.o to find the start of @@ -90,7 +90,7 @@ CTOR=".ctors ${CONSTRUCTING-0} : KEEP (*(.ctors)) ${CONSTRUCTING+${CTOR_END}} }" -DTOR=".dtors ${CONSTRUCTING-0} : +DTOR=".dtors : { ${CONSTRUCTING+${DTOR_START}} KEEP (*crtbegin.o(.dtors)) @@ -100,7 +100,7 @@ DTOR=".dtors ${CONSTRUCTING-0} : KEEP (*(.dtors)) ${CONSTRUCTING+${DTOR_END}} }" -STACK=" .stack ${RELOCATING-0}${RELOCATING+${STACK_ADDR}} : +STACK=" .stack ${RELOCATING+${STACK_ADDR}} : { ${RELOCATING+_stack = .;} *(.stack) @@ -131,10 +131,6 @@ ${RELOCATING+/* Do we need any of these for elf? __DYNAMIC = 0; ${STACKZERO+${STACKZERO}} ${SHLIB_PATH+${SHLIB_PATH}} */} ${RELOCATING+${EXECUTABLE_SYMBOLS}} ${RELOCATING+${INPUT_FILES}} -${RELOCATING- /* For some reason, the Solaris linker makes bad executables - if gld -r is used and the intermediate file has sections starting - at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld - bug. But for now assigning the zero vmas works. */} /* ARM's proprietary toolchain generate these symbols to match the start and end of particular sections of the image. SymbianOS uses these @@ -173,13 +169,13 @@ SECTIONS EOF cat <<EOF - .init ${RELOCATING-0} : + .init : { ${RELOCATING+${INIT_START}} KEEP (*(.init)) ${RELOCATING+${INIT_END}} } =${NOP-0} - .text ${RELOCATING-0} : + .text : { ${RELOCATING+${TEXT_START_SYMBOLS}} *(.text .stub${RELOCATING+ .text.* .gnu.linkonce.t.*}) @@ -187,7 +183,7 @@ cat <<EOF *(.gnu.warning) ${RELOCATING+${OTHER_TEXT_SECTIONS}} } =${NOP-0} - .fini ${RELOCATING-0} : + .fini : { ${RELOCATING+${FINI_START}} KEEP (*(.fini)) @@ -204,7 +200,7 @@ cat <<EOF ${RELOCATING+PROVIDE (Image\$\$ER_RO\$\$Limit = .);} ${WRITABLE_RODATA-${RODATA}} - .rodata1 ${RELOCATING-0} : { *(.rodata1) } + .rodata1 : { *(.rodata1) } ${CREATE_SHLIB-${SDATA2}} ${CREATE_SHLIB-${SBSS2}} @@ -212,13 +208,13 @@ cat <<EOF segment; there is no runtime relocation applied to these arrays. */ - .preinit_array ${RELOCATING-0} : + .preinit_array : { ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__preinit_array_start = .);}} KEEP (*(.preinit_array)) ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__preinit_array_end = .);}} } - .init_array ${RELOCATING-0} : + .init_array : { /* SymbianOS uses this symbol. */ ${RELOCATING+PROVIDE (SHT\$\$INIT_ARRAY\$\$Base = .);} @@ -229,7 +225,7 @@ cat <<EOF /* SymbianOS uses this symbol. */ ${RELOCATING+PROVIDE (SHT\$\$INIT_ARRAY\$\$Limit = .);} } - .fini_array ${RELOCATING-0} : + .fini_array : { ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_start = .);}} KEEP (*(.fini_array)) @@ -239,8 +235,8 @@ cat <<EOF ${OTHER_READONLY_SECTIONS} .eh_frame_hdr : { *(.eh_frame_hdr) } - .eh_frame ${RELOCATING-0} : ONLY_IF_RO { KEEP (*(.eh_frame)) } - .gcc_except_table ${RELOCATING-0} : ONLY_IF_RO { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) } + .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) } + .gcc_except_table : ONLY_IF_RO { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ @@ -249,16 +245,16 @@ cat <<EOF ${CREATE_PIE+${RELOCATING+. = ${SHLIB_DATA_ADDR};}} /* Exception handling */ - .eh_frame ${RELOCATING-0} : ONLY_IF_RW { KEEP (*(.eh_frame)) } - .gcc_except_table ${RELOCATING-0} : ONLY_IF_RW { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) } + .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) } + .gcc_except_table : ONLY_IF_RW { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) } /* Thread Local Storage sections */ - .tdata ${RELOCATING-0} : { *(.tdata${RELOCATING+ .tdata.* .gnu.linkonce.td.*}) } - .tbss ${RELOCATING-0} : { *(.tbss${RELOCATING+ .tbss.* .gnu.linkonce.tb.*})${RELOCATING+ *(.tcommon)} } + .tdata : { *(.tdata${RELOCATING+ .tdata.* .gnu.linkonce.td.*}) } + .tbss : { *(.tbss${RELOCATING+ .tbss.* .gnu.linkonce.tb.*})${RELOCATING+ *(.tcommon)} } ${RELOCATING+${CTOR}} ${RELOCATING+${DTOR}} - .jcr ${RELOCATING-0} : { KEEP (*(.jcr)) } + .jcr : { KEEP (*(.jcr)) } ${RELOCATING+${DATARELRO}} ${OTHER_RELRO_SECTIONS} @@ -266,13 +262,13 @@ cat <<EOF ${DATA_PLT+${PLT_BEFORE_GOT-${PLT}}} - .data ${RELOCATING-0} : + .data : { ${RELOCATING+${DATA_START_SYMBOLS}} *(.data${RELOCATING+ .data.* .gnu.linkonce.d.*}) ${CONSTRUCTING+SORT(CONSTRUCTORS)} } - .data1 ${RELOCATING-0} : { *(.data1) } + .data1 : { *(.data1) } ${WRITABLE_RODATA+${RODATA}} ${OTHER_READWRITE_SECTIONS} ${DATA_PLT+${PLT_BEFORE_GOT+${PLT}}} @@ -287,7 +283,7 @@ cat <<EOF ${RELOCATING+${OTHER_BSS_SYMBOLS}} ${SBSS} ${BSS_PLT+${PLT}} - .bss ${RELOCATING-0} : + .bss : { *(.dynbss) *(.bss${RELOCATING+ .bss.* .gnu.linkonce.b.*}) diff --git a/ld/scripttempl/avr.sc b/ld/scripttempl/avr.sc index 4545b72..fe39e97 100644 --- a/ld/scripttempl/avr.sc +++ b/ld/scripttempl/avr.sc @@ -13,66 +13,66 @@ SECTIONS { /* Read-only sections, merged into text segment: */ ${TEXT_DYNAMIC+${DYNAMIC}} - .hash ${RELOCATING-0} : { *(.hash) } - .dynsym ${RELOCATING-0} : { *(.dynsym) } - .dynstr ${RELOCATING-0} : { *(.dynstr) } - .gnu.version ${RELOCATING-0} : { *(.gnu.version) } - .gnu.version_d ${RELOCATING-0} : { *(.gnu.version_d) } - .gnu.version_r ${RELOCATING-0} : { *(.gnu.version_r) } - - .rel.init ${RELOCATING-0} : { *(.rel.init) } - .rela.init ${RELOCATING-0} : { *(.rela.init) } - .rel.text ${RELOCATING-0} : + .hash : { *(.hash) } + .dynsym : { *(.dynsym) } + .dynstr : { *(.dynstr) } + .gnu.version : { *(.gnu.version) } + .gnu.version_d : { *(.gnu.version_d) } + .gnu.version_r : { *(.gnu.version_r) } + + .rel.init : { *(.rel.init) } + .rela.init : { *(.rela.init) } + .rel.text : { *(.rel.text) ${RELOCATING+*(.rel.text.*)} ${RELOCATING+*(.rel.gnu.linkonce.t*)} } - .rela.text ${RELOCATING-0} : + .rela.text : { *(.rela.text) ${RELOCATING+*(.rela.text.*)} ${RELOCATING+*(.rela.gnu.linkonce.t*)} } - .rel.fini ${RELOCATING-0} : { *(.rel.fini) } - .rela.fini ${RELOCATING-0} : { *(.rela.fini) } - .rel.rodata ${RELOCATING-0} : + .rel.fini : { *(.rel.fini) } + .rela.fini : { *(.rela.fini) } + .rel.rodata : { *(.rel.rodata) ${RELOCATING+*(.rel.rodata.*)} ${RELOCATING+*(.rel.gnu.linkonce.r*)} } - .rela.rodata ${RELOCATING-0} : + .rela.rodata : { *(.rela.rodata) ${RELOCATING+*(.rela.rodata.*)} ${RELOCATING+*(.rela.gnu.linkonce.r*)} } - .rel.data ${RELOCATING-0} : + .rel.data : { *(.rel.data) ${RELOCATING+*(.rel.data.*)} ${RELOCATING+*(.rel.gnu.linkonce.d*)} } - .rela.data ${RELOCATING-0} : + .rela.data : { *(.rela.data) ${RELOCATING+*(.rela.data.*)} ${RELOCATING+*(.rela.gnu.linkonce.d*)} } - .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) } - .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) } - .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) } - .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) } - .rel.got ${RELOCATING-0} : { *(.rel.got) } - .rela.got ${RELOCATING-0} : { *(.rela.got) } - .rel.bss ${RELOCATING-0} : { *(.rel.bss) } - .rela.bss ${RELOCATING-0} : { *(.rela.bss) } - .rel.plt ${RELOCATING-0} : { *(.rel.plt) } - .rela.plt ${RELOCATING-0} : { *(.rela.plt) } + .rel.ctors : { *(.rel.ctors) } + .rela.ctors : { *(.rela.ctors) } + .rel.dtors : { *(.rel.dtors) } + .rela.dtors : { *(.rela.dtors) } + .rel.got : { *(.rel.got) } + .rela.got : { *(.rela.got) } + .rel.bss : { *(.rel.bss) } + .rela.bss : { *(.rela.bss) } + .rel.plt : { *(.rel.plt) } + .rela.plt : { *(.rela.plt) } /* Internal text space or external memory. */ - .text ${RELOCATING-0} : + .text : { *(.vectors) KEEP(*(.vectors)) @@ -155,7 +155,7 @@ SECTIONS ${RELOCATING+ _etext = . ; } } ${RELOCATING+ > text} - .data ${RELOCATING-0} : ${RELOCATING+AT (ADDR (.text) + SIZEOF (.text))} + .data : ${RELOCATING+AT (ADDR (.text) + SIZEOF (.text))} { ${RELOCATING+ PROVIDE (__data_start = .) ; } *(.data) @@ -168,7 +168,7 @@ SECTIONS ${RELOCATING+ PROVIDE (__data_end = .) ; } } ${RELOCATING+ > data} - .bss ${RELOCATING-0} :${RELOCATING+ AT (ADDR (.bss))} + .bss :${RELOCATING+ AT (ADDR (.bss))} { ${RELOCATING+ PROVIDE (__bss_start = .) ; } *(.bss) @@ -181,7 +181,7 @@ SECTIONS ${RELOCATING+ __data_load_end = __data_load_start + SIZEOF(.data); } /* Global data not cleared after reset. */ - .noinit ${RELOCATING-0}: + .noinit : { ${RELOCATING+ PROVIDE (__noinit_start = .) ; } *(.noinit*) @@ -190,7 +190,7 @@ SECTIONS ${RELOCATING+ PROVIDE (__heap_start = .) ; } } ${RELOCATING+ > data} - .eeprom ${RELOCATING-0}: + .eeprom : { *(.eeprom*) ${RELOCATING+ __eeprom_end = . ; } diff --git a/ld/scripttempl/elf.sc b/ld/scripttempl/elf.sc index 886f578..dc2bd3d 100644 --- a/ld/scripttempl/elf.sc +++ b/ld/scripttempl/elf.sc @@ -110,42 +110,42 @@ if test -n "${COMMONPAGESIZE}"; then DATA_SEGMENT_RELRO_END=". = DATA_SEGMENT_RELRO_END (${SEPARATE_GOTPLT-0}, .);" fi if test -z "${INITIAL_READONLY_SECTIONS}${CREATE_SHLIB}"; then - INITIAL_READONLY_SECTIONS=".interp ${RELOCATING-0} : { *(.interp) }" + INITIAL_READONLY_SECTIONS=".interp : { *(.interp) }" fi if test -z "$PLT"; then - IPLT=".iplt ${RELOCATING-0} : { *(.iplt) }" - PLT=".plt ${RELOCATING-0} : { *(.plt)${IREL_IN_PLT+ *(.iplt)} } + IPLT=".iplt : { *(.iplt) }" + PLT=".plt : { *(.plt)${IREL_IN_PLT+ *(.iplt)} } ${IREL_IN_PLT-$IPLT}" fi test -n "${DATA_PLT-${BSS_PLT-text}}" && TEXT_PLT=yes if test -z "$GOT"; then if test -z "$SEPARATE_GOTPLT"; then - GOT=".got ${RELOCATING-0} : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }" + GOT=".got : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }" else - GOT=".got ${RELOCATING-0} : { *(.got) *(.igot) }" - GOTPLT=".got.plt ${RELOCATING-0} : { *(.got.plt) *(.igot.plt) }" + GOT=".got : { *(.got) *(.igot) }" + GOTPLT=".got.plt : { *(.got.plt) *(.igot.plt) }" fi fi -REL_IFUNC=".rel.ifunc ${RELOCATING-0} : { *(.rel.ifunc) }" -RELA_IFUNC=".rela.ifunc ${RELOCATING-0} : { *(.rela.ifunc) }" -REL_IPLT=".rel.iplt ${RELOCATING-0} : +REL_IFUNC=".rel.ifunc : { *(.rel.ifunc) }" +RELA_IFUNC=".rela.ifunc : { *(.rela.ifunc) }" +REL_IPLT=".rel.iplt : { ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rel_iplt_start = .);}} *(.rel.iplt) ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rel_iplt_end = .);}} }" -RELA_IPLT=".rela.iplt ${RELOCATING-0} : +RELA_IPLT=".rela.iplt : { ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rela_iplt_start = .);}} *(.rela.iplt) ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rela_iplt_end = .);}} }" -DYNAMIC=".dynamic ${RELOCATING-0} : { *(.dynamic) }" -RODATA=".rodata ${RELOCATING-0} : { *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.*}) }" +DYNAMIC=".dynamic : { *(.dynamic) }" +RODATA=".rodata : { *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.*}) }" DATARELRO=".data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) }" DISCARDED="/DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }" if test -z "${NO_SMALL_DATA}"; then - SBSS=".sbss ${RELOCATING-0} : + SBSS=".sbss : { ${RELOCATING+${SBSS_START_SYMBOLS}} ${CREATE_SHLIB+*(.sbss2 .sbss2.* .gnu.linkonce.sb2.*)} @@ -154,29 +154,29 @@ if test -z "${NO_SMALL_DATA}"; then *(.scommon) ${RELOCATING+${SBSS_END_SYMBOLS}} }" - SBSS2=".sbss2 ${RELOCATING-0} : { *(.sbss2${RELOCATING+ .sbss2.* .gnu.linkonce.sb2.*}) }" + SBSS2=".sbss2 : { *(.sbss2${RELOCATING+ .sbss2.* .gnu.linkonce.sb2.*}) }" SDATA="/* 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 ${RELOCATING-0} : + .sdata : { ${RELOCATING+${SDATA_START_SYMBOLS}} ${CREATE_SHLIB+*(.sdata2 .sdata2.* .gnu.linkonce.s2.*)} *(.sdata${RELOCATING+ .sdata.* .gnu.linkonce.s.*}) }" - SDATA2=".sdata2 ${RELOCATING-0} : + SDATA2=".sdata2 : { ${RELOCATING+${SDATA2_START_SYMBOLS}} *(.sdata2${RELOCATING+ .sdata2.* .gnu.linkonce.s2.*}) }" - REL_SDATA=".rel.sdata ${RELOCATING-0} : { *(.rel.sdata${RELOCATING+ .rel.sdata.* .rel.gnu.linkonce.s.*}) } - .rela.sdata ${RELOCATING-0} : { *(.rela.sdata${RELOCATING+ .rela.sdata.* .rela.gnu.linkonce.s.*}) }" - REL_SBSS=".rel.sbss ${RELOCATING-0} : { *(.rel.sbss${RELOCATING+ .rel.sbss.* .rel.gnu.linkonce.sb.*}) } - .rela.sbss ${RELOCATING-0} : { *(.rela.sbss${RELOCATING+ .rela.sbss.* .rela.gnu.linkonce.sb.*}) }" - REL_SDATA2=".rel.sdata2 ${RELOCATING-0} : { *(.rel.sdata2${RELOCATING+ .rel.sdata2.* .rel.gnu.linkonce.s2.*}) } - .rela.sdata2 ${RELOCATING-0} : { *(.rela.sdata2${RELOCATING+ .rela.sdata2.* .rela.gnu.linkonce.s2.*}) }" - REL_SBSS2=".rel.sbss2 ${RELOCATING-0} : { *(.rel.sbss2${RELOCATING+ .rel.sbss2.* .rel.gnu.linkonce.sb2.*}) } - .rela.sbss2 ${RELOCATING-0} : { *(.rela.sbss2${RELOCATING+ .rela.sbss2.* .rela.gnu.linkonce.sb2.*}) }" + REL_SDATA=".rel.sdata : { *(.rel.sdata${RELOCATING+ .rel.sdata.* .rel.gnu.linkonce.s.*}) } + .rela.sdata : { *(.rela.sdata${RELOCATING+ .rela.sdata.* .rela.gnu.linkonce.s.*}) }" + REL_SBSS=".rel.sbss : { *(.rel.sbss${RELOCATING+ .rel.sbss.* .rel.gnu.linkonce.sb.*}) } + .rela.sbss : { *(.rela.sbss${RELOCATING+ .rela.sbss.* .rela.gnu.linkonce.sb.*}) }" + REL_SDATA2=".rel.sdata2 : { *(.rel.sdata2${RELOCATING+ .rel.sdata2.* .rel.gnu.linkonce.s2.*}) } + .rela.sdata2 : { *(.rela.sdata2${RELOCATING+ .rela.sdata2.* .rela.gnu.linkonce.s2.*}) }" + REL_SBSS2=".rel.sbss2 : { *(.rel.sbss2${RELOCATING+ .rel.sbss2.* .rel.gnu.linkonce.sb2.*}) } + .rela.sbss2 : { *(.rela.sbss2${RELOCATING+ .rela.sbss2.* .rela.gnu.linkonce.sb2.*}) }" else NO_SMALL_DATA=" " fi @@ -192,31 +192,31 @@ if test -z "${SDATA_GOT}"; then fi test -n "$SEPARATE_GOTPLT" && SEPARATE_GOTPLT=" " test "${LARGE_SECTIONS}" = "yes" && REL_LARGE=" - .rel.ldata ${RELOCATING-0} : { *(.rel.ldata${RELOCATING+ .rel.ldata.* .rel.gnu.linkonce.l.*}) } - .rela.ldata ${RELOCATING-0} : { *(.rela.ldata${RELOCATING+ .rela.ldata.* .rela.gnu.linkonce.l.*}) } - .rel.lbss ${RELOCATING-0} : { *(.rel.lbss${RELOCATING+ .rel.lbss.* .rel.gnu.linkonce.lb.*}) } - .rela.lbss ${RELOCATING-0} : { *(.rela.lbss${RELOCATING+ .rela.lbss.* .rela.gnu.linkonce.lb.*}) } - .rel.lrodata ${RELOCATING-0} : { *(.rel.lrodata${RELOCATING+ .rel.lrodata.* .rel.gnu.linkonce.lr.*}) } - .rela.lrodata ${RELOCATING-0} : { *(.rela.lrodata${RELOCATING+ .rela.lrodata.* .rela.gnu.linkonce.lr.*}) }" + .rel.ldata : { *(.rel.ldata${RELOCATING+ .rel.ldata.* .rel.gnu.linkonce.l.*}) } + .rela.ldata : { *(.rela.ldata${RELOCATING+ .rela.ldata.* .rela.gnu.linkonce.l.*}) } + .rel.lbss : { *(.rel.lbss${RELOCATING+ .rel.lbss.* .rel.gnu.linkonce.lb.*}) } + .rela.lbss : { *(.rela.lbss${RELOCATING+ .rela.lbss.* .rela.gnu.linkonce.lb.*}) } + .rel.lrodata : { *(.rel.lrodata${RELOCATING+ .rel.lrodata.* .rel.gnu.linkonce.lr.*}) } + .rela.lrodata : { *(.rela.lrodata${RELOCATING+ .rela.lrodata.* .rela.gnu.linkonce.lr.*}) }" test "${LARGE_SECTIONS}" = "yes" && OTHER_BSS_SECTIONS=" ${OTHER_BSS_SECTIONS} - .lbss ${RELOCATING-0} : + .lbss : { *(.dynlbss) *(.lbss${RELOCATING+ .lbss.* .gnu.linkonce.lb.*}) *(LARGE_COMMON) }" test "${LARGE_SECTIONS}" = "yes" && LARGE_SECTIONS=" - .lrodata ${RELOCATING-0} ${RELOCATING+ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))} : + .lrodata ${RELOCATING+ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))} : { *(.lrodata${RELOCATING+ .lrodata.* .gnu.linkonce.lr.*}) } - .ldata ${RELOCATING-0} ${RELOCATING+ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))} : + .ldata ${RELOCATING+ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))} : { *(.ldata${RELOCATING+ .ldata.* .gnu.linkonce.l.*}) ${RELOCATING+. = ALIGN(. != 0 ? ${ALIGNMENT} : 1);} }" -CTOR=".ctors ${CONSTRUCTING-0} : +CTOR=".ctors : { ${CONSTRUCTING+${CTOR_START}} /* gcc uses crtbegin.o to find the start of @@ -242,7 +242,7 @@ CTOR=".ctors ${CONSTRUCTING-0} : KEEP (*(.ctors)) ${CONSTRUCTING+${CTOR_END}} }" -DTOR=".dtors ${CONSTRUCTING-0} : +DTOR=".dtors : { ${CONSTRUCTING+${DTOR_START}} KEEP (*crtbegin.o(.dtors)) @@ -252,7 +252,7 @@ DTOR=".dtors ${CONSTRUCTING-0} : KEEP (*(.dtors)) ${CONSTRUCTING+${DTOR_END}} }" -STACK=" .stack ${RELOCATING-0}${RELOCATING+${STACK_ADDR}} : +STACK=" .stack ${RELOCATING+${STACK_ADDR}} : { ${RELOCATING+${USER_LABEL_PREFIX}_stack = .;} *(.stack) @@ -277,10 +277,6 @@ ${RELOCATING+ENTRY(${ENTRY})} ${RELOCATING+${LIB_SEARCH_DIRS}} ${RELOCATING+${EXECUTABLE_SYMBOLS}} ${RELOCATING+${INPUT_FILES}} -${RELOCATING- /* For some reason, the Solaris linker makes bad executables - if gld -r is used and the intermediate file has sections starting - at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld - bug. But for now assigning the zero vmas works. */} SECTIONS { @@ -296,13 +292,13 @@ test -n "${RELOCATING+0}" || unset NON_ALLOC_DYN test -z "${NON_ALLOC_DYN}" || TEXT_DYNAMIC= cat > ldscripts/dyntmp.$$ <<EOF ${TEXT_DYNAMIC+${DYNAMIC}} - .hash ${RELOCATING-0} : { *(.hash) } - .gnu.hash ${RELOCATING-0} : { *(.gnu.hash) } - .dynsym ${RELOCATING-0} : { *(.dynsym) } - .dynstr ${RELOCATING-0} : { *(.dynstr) } - .gnu.version ${RELOCATING-0} : { *(.gnu.version) } - .gnu.version_d ${RELOCATING-0}: { *(.gnu.version_d) } - .gnu.version_r ${RELOCATING-0}: { *(.gnu.version_r) } + .hash : { *(.hash) } + .gnu.hash : { *(.gnu.hash) } + .dynsym : { *(.dynsym) } + .dynstr : { *(.dynstr) } + .gnu.version : { *(.gnu.version) } + .gnu.version_d : { *(.gnu.version_d) } + .gnu.version_r : { *(.gnu.version_r) } EOF if [ "x$COMBRELOC" = x ]; then @@ -311,36 +307,36 @@ else COMBRELOCCAT="cat > $COMBRELOC" fi eval $COMBRELOCCAT <<EOF - .rel.init ${RELOCATING-0} : { *(.rel.init) } - .rela.init ${RELOCATING-0} : { *(.rela.init) } - .rel.text ${RELOCATING-0} : { *(.rel.text${RELOCATING+ .rel.text.* .rel.gnu.linkonce.t.*}) } - .rela.text ${RELOCATING-0} : { *(.rela.text${RELOCATING+ .rela.text.* .rela.gnu.linkonce.t.*}) } - .rel.fini ${RELOCATING-0} : { *(.rel.fini) } - .rela.fini ${RELOCATING-0} : { *(.rela.fini) } - .rel.rodata ${RELOCATING-0} : { *(.rel.rodata${RELOCATING+ .rel.rodata.* .rel.gnu.linkonce.r.*}) } - .rela.rodata ${RELOCATING-0} : { *(.rela.rodata${RELOCATING+ .rela.rodata.* .rela.gnu.linkonce.r.*}) } + .rel.init : { *(.rel.init) } + .rela.init : { *(.rela.init) } + .rel.text : { *(.rel.text${RELOCATING+ .rel.text.* .rel.gnu.linkonce.t.*}) } + .rela.text : { *(.rela.text${RELOCATING+ .rela.text.* .rela.gnu.linkonce.t.*}) } + .rel.fini : { *(.rel.fini) } + .rela.fini : { *(.rela.fini) } + .rel.rodata : { *(.rel.rodata${RELOCATING+ .rel.rodata.* .rel.gnu.linkonce.r.*}) } + .rela.rodata : { *(.rela.rodata${RELOCATING+ .rela.rodata.* .rela.gnu.linkonce.r.*}) } ${OTHER_READONLY_RELOC_SECTIONS} - .rel.data.rel.ro ${RELOCATING-0} : { *(.rel.data.rel.ro${RELOCATING+* .rel.gnu.linkonce.d.rel.ro.*}) } - .rela.data.rel.ro ${RELOCATING-0} : { *(.rela.data.rel.ro${RELOCATING+* .rela.gnu.linkonce.d.rel.ro.*}) } - .rel.data ${RELOCATING-0} : { *(.rel.data${RELOCATING+ .rel.data.* .rel.gnu.linkonce.d.*}) } - .rela.data ${RELOCATING-0} : { *(.rela.data${RELOCATING+ .rela.data.* .rela.gnu.linkonce.d.*}) } - .rel.tdata ${RELOCATING-0} : { *(.rel.tdata${RELOCATING+ .rel.tdata.* .rel.gnu.linkonce.td.*}) } - .rela.tdata ${RELOCATING-0} : { *(.rela.tdata${RELOCATING+ .rela.tdata.* .rela.gnu.linkonce.td.*}) } - .rel.tbss ${RELOCATING-0} : { *(.rel.tbss${RELOCATING+ .rel.tbss.* .rel.gnu.linkonce.tb.*}) } - .rela.tbss ${RELOCATING-0} : { *(.rela.tbss${RELOCATING+ .rela.tbss.* .rela.gnu.linkonce.tb.*}) } - .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) } - .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) } - .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) } - .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) } - .rel.got ${RELOCATING-0} : { *(.rel.got) } - .rela.got ${RELOCATING-0} : { *(.rela.got) } + .rel.data.rel.ro : { *(.rel.data.rel.ro${RELOCATING+* .rel.gnu.linkonce.d.rel.ro.*}) } + .rela.data.rel.ro : { *(.rela.data.rel.ro${RELOCATING+* .rela.gnu.linkonce.d.rel.ro.*}) } + .rel.data : { *(.rel.data${RELOCATING+ .rel.data.* .rel.gnu.linkonce.d.*}) } + .rela.data : { *(.rela.data${RELOCATING+ .rela.data.* .rela.gnu.linkonce.d.*}) } + .rel.tdata : { *(.rel.tdata${RELOCATING+ .rel.tdata.* .rel.gnu.linkonce.td.*}) } + .rela.tdata : { *(.rela.tdata${RELOCATING+ .rela.tdata.* .rela.gnu.linkonce.td.*}) } + .rel.tbss : { *(.rel.tbss${RELOCATING+ .rel.tbss.* .rel.gnu.linkonce.tb.*}) } + .rela.tbss : { *(.rela.tbss${RELOCATING+ .rela.tbss.* .rela.gnu.linkonce.tb.*}) } + .rel.ctors : { *(.rel.ctors) } + .rela.ctors : { *(.rela.ctors) } + .rel.dtors : { *(.rel.dtors) } + .rela.dtors : { *(.rela.dtors) } + .rel.got : { *(.rel.got) } + .rela.got : { *(.rela.got) } ${OTHER_GOT_RELOC_SECTIONS} ${REL_SDATA} ${REL_SBSS} ${REL_SDATA2} ${REL_SBSS2} - .rel.bss ${RELOCATING-0} : { *(.rel.bss${RELOCATING+ .rel.bss.* .rel.gnu.linkonce.b.*}) } - .rela.bss ${RELOCATING-0} : { *(.rela.bss${RELOCATING+ .rela.bss.* .rela.gnu.linkonce.b.*}) } + .rel.bss : { *(.rel.bss${RELOCATING+ .rel.bss.* .rel.gnu.linkonce.b.*}) } + .rela.bss : { *(.rela.bss${RELOCATING+ .rela.bss.* .rela.gnu.linkonce.b.*}) } ${REL_LARGE} ${IREL_IN_PLT+$REL_IFUNC} ${IREL_IN_PLT+$RELA_IFUNC} @@ -350,13 +346,13 @@ EOF if [ -n "$COMBRELOC" ]; then cat >> ldscripts/dyntmp.$$ <<EOF - .rel.dyn ${RELOCATING-0} : + .rel.dyn : { EOF sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rela\./d;s/^.*: { *\(.*\)}$/ \1/' $COMBRELOC >> ldscripts/dyntmp.$$ cat >> ldscripts/dyntmp.$$ <<EOF } - .rela.dyn ${RELOCATING-0} : + .rela.dyn : { EOF sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rel\./d;s/^.*: { *\(.*\)}/ \1/' $COMBRELOC >> ldscripts/dyntmp.$$ @@ -366,14 +362,14 @@ EOF fi cat >> ldscripts/dyntmp.$$ <<EOF - .rel.plt ${RELOCATING-0} : + .rel.plt : { *(.rel.plt) ${IREL_IN_PLT+${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rel_iplt_start = .);}}} ${IREL_IN_PLT+${RELOCATING+*(.rel.iplt)}} ${IREL_IN_PLT+${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rel_iplt_end = .);}}} } - .rela.plt ${RELOCATING-0} : + .rela.plt : { *(.rela.plt) ${IREL_IN_PLT+${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rela_iplt_start = .);}}} @@ -398,7 +394,7 @@ if test -z "${NON_ALLOC_DYN}"; then fi cat <<EOF - .init ${RELOCATING-0} : + .init : { ${RELOCATING+${INIT_START}} KEEP (*(.init)) @@ -407,7 +403,7 @@ cat <<EOF ${TEXT_PLT+${PLT}} ${TINY_READONLY_SECTION} - .text ${RELOCATING-0} : + .text : { ${RELOCATING+${TEXT_START_SYMBOLS}} ${RELOCATING+*(.text.unlikely .text.*_unlikely)} @@ -416,7 +412,7 @@ cat <<EOF *(.gnu.warning) ${RELOCATING+${OTHER_TEXT_SECTIONS}} } =${NOP-0} - .fini ${RELOCATING-0} : + .fini : { ${RELOCATING+${FINI_START}} KEEP (*(.fini)) @@ -426,13 +422,13 @@ cat <<EOF ${RELOCATING+PROVIDE (_${ETEXT_NAME} = .);} ${RELOCATING+PROVIDE (${ETEXT_NAME} = .);} ${WRITABLE_RODATA-${RODATA}} - .rodata1 ${RELOCATING-0} : { *(.rodata1) } + .rodata1 : { *(.rodata1) } ${CREATE_SHLIB-${SDATA2}} ${CREATE_SHLIB-${SBSS2}} ${OTHER_READONLY_SECTIONS} .eh_frame_hdr : { *(.eh_frame_hdr) } - .eh_frame ${RELOCATING-0} : ONLY_IF_RO { KEEP (*(.eh_frame)) } - .gcc_except_table ${RELOCATING-0} : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } + .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) } + .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ @@ -441,27 +437,27 @@ cat <<EOF ${CREATE_PIE+${RELOCATING+. = ${SHLIB_DATA_ADDR-${DATA_SEGMENT_ALIGN}};}} /* Exception handling */ - .eh_frame ${RELOCATING-0} : ONLY_IF_RW { KEEP (*(.eh_frame)) } - .gcc_except_table ${RELOCATING-0} : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } + .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) } + .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } /* Thread Local Storage sections */ - .tdata ${RELOCATING-0} : { *(.tdata${RELOCATING+ .tdata.* .gnu.linkonce.td.*}) } - .tbss ${RELOCATING-0} : { *(.tbss${RELOCATING+ .tbss.* .gnu.linkonce.tb.*})${RELOCATING+ *(.tcommon)} } + .tdata : { *(.tdata${RELOCATING+ .tdata.* .gnu.linkonce.td.*}) } + .tbss : { *(.tbss${RELOCATING+ .tbss.* .gnu.linkonce.tb.*})${RELOCATING+ *(.tcommon)} } - .preinit_array ${RELOCATING-0} : + .preinit_array : { ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__preinit_array_start = .);}} KEEP (*(.preinit_array)) ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__preinit_array_end = .);}} } - .init_array ${RELOCATING-0} : + .init_array : { ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_start = .);}} KEEP (*(SORT(.init_array.*))) KEEP (*(.init_array)) ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_end = .);}} } - .fini_array ${RELOCATING-0} : + .fini_array : { ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_start = .);}} KEEP (*(.fini_array)) @@ -470,7 +466,7 @@ cat <<EOF } ${SMALL_DATA_CTOR-${RELOCATING+${CTOR}}} ${SMALL_DATA_DTOR-${RELOCATING+${DTOR}}} - .jcr ${RELOCATING-0} : { KEEP (*(.jcr)) } + .jcr : { KEEP (*(.jcr)) } ${RELOCATING+${DATARELRO}} ${OTHER_RELRO_SECTIONS} @@ -484,13 +480,13 @@ cat <<EOF ${DATA_PLT+${PLT_BEFORE_GOT-${PLT}}} - .data ${RELOCATING-0} : + .data : { ${RELOCATING+${DATA_START_SYMBOLS}} *(.data${RELOCATING+ .data.* .gnu.linkonce.d.*}) ${CONSTRUCTING+SORT(CONSTRUCTORS)} } - .data1 ${RELOCATING-0} : { *(.data1) } + .data1 : { *(.data1) } ${WRITABLE_RODATA+${RODATA}} ${OTHER_READWRITE_SECTIONS} ${SMALL_DATA_CTOR+${RELOCATING+${CTOR}}} @@ -506,7 +502,7 @@ cat <<EOF ${RELOCATING+${OTHER_BSS_SYMBOLS}} ${SBSS} ${BSS_PLT+${PLT}} - .bss ${RELOCATING-0} : + .bss : { *(.dynbss) *(.bss${RELOCATING+ .bss.* .gnu.linkonce.b.*}) diff --git a/ld/scripttempl/elf32cr16.sc b/ld/scripttempl/elf32cr16.sc index 61351c5..683420f 100644 --- a/ld/scripttempl/elf32cr16.sc +++ b/ld/scripttempl/elf32cr16.sc @@ -1,4 +1,5 @@ # Linker Script for National Semiconductor's CR16-ELF32. +test -z "$RELOCATING" && exit 0 # The next line should be uncommented if it is desired to link # without libstart.o and directly enter main. @@ -12,7 +13,7 @@ cat <<EOF OUTPUT_FORMAT("${OUTPUT_FORMAT}") OUTPUT_ARCH(${ARCH}) -${RELOCATING+ENTRY(${ENTRY})} +ENTRY(${ENTRY}) /* Define memory regions. */ MEMORY diff --git a/ld/scripttempl/elf32cr16c.sc b/ld/scripttempl/elf32cr16c.sc index 84fc61c..392274a 100644 --- a/ld/scripttempl/elf32cr16c.sc +++ b/ld/scripttempl/elf32cr16c.sc @@ -1,4 +1,5 @@ # Linker Script for National Semiconductor's CR16C-ELF32. +test -z "$RELOCATING" && exit 0 test -z "$ENTRY" && ENTRY=_start cat <<EOF @@ -7,7 +8,7 @@ cat <<EOF elf32 files, which were compiled with either the near data model or the default data model. */ -${RELOCATING+ENTRY(${ENTRY})} +ENTRY(${ENTRY}) MEMORY { diff --git a/ld/scripttempl/elf32crx.sc b/ld/scripttempl/elf32crx.sc index c320bda..94b8644 100644 --- a/ld/scripttempl/elf32crx.sc +++ b/ld/scripttempl/elf32crx.sc @@ -1,4 +1,5 @@ # Linker Script for National Semiconductor's CRX-ELF32. +test -z "$RELOCATING" && exit 0 # The next line should be uncommented if it is desired to link # without libstart.o and directly enter main. @@ -12,7 +13,7 @@ cat <<EOF OUTPUT_FORMAT("${OUTPUT_FORMAT}") OUTPUT_ARCH(${ARCH}) -${RELOCATING+ENTRY(${ENTRY})} +ENTRY(${ENTRY}) /* Define memory regions. */ MEMORY diff --git a/ld/scripttempl/elf32msp430.sc b/ld/scripttempl/elf32msp430.sc index cbffe48..97d66ab 100644 --- a/ld/scripttempl/elf32msp430.sc +++ b/ld/scripttempl/elf32msp430.sc @@ -5,7 +5,7 @@ HEAP_MEMORY_MSP430=" " if test ${GOT_HEAP_MSP-0} -ne 0 then -HEAP_SECTION_MSP430=".heap ${RELOCATING-0} : +HEAP_SECTION_MSP430=".heap : { ${RELOCATING+ PROVIDE (__heap_data_start = .) ; } *(.heap*) @@ -37,63 +37,63 @@ SECTIONS { /* Read-only sections, merged into text segment. */ ${TEXT_DYNAMIC+${DYNAMIC}} - .hash ${RELOCATING-0} : { *(.hash) } - .dynsym ${RELOCATING-0} : { *(.dynsym) } - .dynstr ${RELOCATING-0} : { *(.dynstr) } - .gnu.version ${RELOCATING-0} : { *(.gnu.version) } - .gnu.version_d ${RELOCATING-0} : { *(.gnu.version_d) } - .gnu.version_r ${RELOCATING-0} : { *(.gnu.version_r) } - - .rel.init ${RELOCATING-0} : { *(.rel.init) } - .rela.init ${RELOCATING-0} : { *(.rela.init) } - .rel.text ${RELOCATING-0} : + .hash : { *(.hash) } + .dynsym : { *(.dynsym) } + .dynstr : { *(.dynstr) } + .gnu.version : { *(.gnu.version) } + .gnu.version_d : { *(.gnu.version_d) } + .gnu.version_r : { *(.gnu.version_r) } + + .rel.init : { *(.rel.init) } + .rela.init : { *(.rela.init) } + .rel.text : { *(.rel.text) ${RELOCATING+*(.rel.text.*)} ${RELOCATING+*(.rel.gnu.linkonce.t*)} } - .rela.text ${RELOCATING-0} : + .rela.text : { *(.rela.text) ${RELOCATING+*(.rela.text.*)} ${RELOCATING+*(.rela.gnu.linkonce.t*)} } - .rel.fini ${RELOCATING-0} : { *(.rel.fini) } - .rela.fini ${RELOCATING-0} : { *(.rela.fini) } - .rel.rodata ${RELOCATING-0} : + .rel.fini : { *(.rel.fini) } + .rela.fini : { *(.rela.fini) } + .rel.rodata : { *(.rel.rodata) ${RELOCATING+*(.rel.rodata.*)} ${RELOCATING+*(.rel.gnu.linkonce.r*)} } - .rela.rodata ${RELOCATING-0} : + .rela.rodata : { *(.rela.rodata) ${RELOCATING+*(.rela.rodata.*)} ${RELOCATING+*(.rela.gnu.linkonce.r*)} } - .rel.data ${RELOCATING-0} : + .rel.data : { *(.rel.data) ${RELOCATING+*(.rel.data.*)} ${RELOCATING+*(.rel.gnu.linkonce.d*)} } - .rela.data ${RELOCATING-0} : + .rela.data : { *(.rela.data) ${RELOCATING+*(.rela.data.*)} ${RELOCATING+*(.rela.gnu.linkonce.d*)} } - .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) } - .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) } - .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) } - .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) } - .rel.got ${RELOCATING-0} : { *(.rel.got) } - .rela.got ${RELOCATING-0} : { *(.rela.got) } - .rel.bss ${RELOCATING-0} : { *(.rel.bss) } - .rela.bss ${RELOCATING-0} : { *(.rela.bss) } - .rel.plt ${RELOCATING-0} : { *(.rel.plt) } - .rela.plt ${RELOCATING-0} : { *(.rela.plt) } + .rel.ctors : { *(.rel.ctors) } + .rela.ctors : { *(.rela.ctors) } + .rel.dtors : { *(.rel.dtors) } + .rela.dtors : { *(.rela.dtors) } + .rel.got : { *(.rel.got) } + .rela.got : { *(.rela.got) } + .rel.bss : { *(.rel.bss) } + .rela.bss : { *(.rela.bss) } + .rel.plt : { *(.rel.plt) } + .rela.plt : { *(.rela.plt) } /* Internal text space. */ .text : @@ -139,7 +139,7 @@ SECTIONS _etext = .; } ${RELOCATING+ > text} - .data ${RELOCATING-0} : ${RELOCATING+AT (ADDR (.text) + SIZEOF (.text))} + .data : ${RELOCATING+AT (ADDR (.text) + SIZEOF (.text))} { ${RELOCATING+ PROVIDE (__data_start = .) ; } ${RELOCATING+. = ALIGN(2);} @@ -151,7 +151,7 @@ SECTIONS } ${RELOCATING+ > data} /* Bootloader. */ - .bootloader ${RELOCATING-0} : + .bootloader : { ${RELOCATING+ PROVIDE (__boot_start = .) ; } *(.bootloader) @@ -160,7 +160,7 @@ SECTIONS } ${RELOCATING+ > bootloader} /* Information memory. */ - .infomem ${RELOCATING-0} : + .infomem : { *(.infomem) ${RELOCATING+. = ALIGN(2);} @@ -168,7 +168,7 @@ SECTIONS } ${RELOCATING+ > infomem} /* Information memory (not loaded into MPU). */ - .infomemnobits ${RELOCATING-0} : + .infomemnobits : { *(.infomemnobits) ${RELOCATING+. = ALIGN(2);} @@ -193,7 +193,7 @@ SECTIONS ${RELOCATING+ _end = . ; } } ${RELOCATING+ > data} - .vectors ${RELOCATING-0}: + .vectors : { ${RELOCATING+ PROVIDE (__vectors_start = .) ; } *(.vectors*) diff --git a/ld/scripttempl/elf32msp430_3.sc b/ld/scripttempl/elf32msp430_3.sc index 15eb517..66c8775 100644 --- a/ld/scripttempl/elf32msp430_3.sc +++ b/ld/scripttempl/elf32msp430_3.sc @@ -13,63 +13,63 @@ SECTIONS { /* Read-only sections, merged into text segment. */ ${TEXT_DYNAMIC+${DYNAMIC}} - .hash ${RELOCATING-0} : { *(.hash) } - .dynsym ${RELOCATING-0} : { *(.dynsym) } - .dynstr ${RELOCATING-0} : { *(.dynstr) } - .gnu.version ${RELOCATING-0} : { *(.gnu.version) } - .gnu.version_d ${RELOCATING-0} : { *(.gnu.version_d) } - .gnu.version_r ${RELOCATING-0} : { *(.gnu.version_r) } - - .rel.init ${RELOCATING-0} : { *(.rel.init) } - .rela.init ${RELOCATING-0} : { *(.rela.init) } - .rel.text ${RELOCATING-0} : + .hash : { *(.hash) } + .dynsym : { *(.dynsym) } + .dynstr : { *(.dynstr) } + .gnu.version : { *(.gnu.version) } + .gnu.version_d : { *(.gnu.version_d) } + .gnu.version_r : { *(.gnu.version_r) } + + .rel.init : { *(.rel.init) } + .rela.init : { *(.rela.init) } + .rel.text : { *(.rel.text) ${RELOCATING+*(.rel.text.*)} ${RELOCATING+*(.rel.gnu.linkonce.t*)} } - .rela.text ${RELOCATING-0} : + .rela.text : { *(.rela.text) ${RELOCATING+*(.rela.text.*)} ${RELOCATING+*(.rela.gnu.linkonce.t*)} } - .rel.fini ${RELOCATING-0} : { *(.rel.fini) } - .rela.fini ${RELOCATING-0} : { *(.rela.fini) } - .rel.rodata ${RELOCATING-0} : + .rel.fini : { *(.rel.fini) } + .rela.fini : { *(.rela.fini) } + .rel.rodata : { *(.rel.rodata) ${RELOCATING+*(.rel.rodata.*)} ${RELOCATING+*(.rel.gnu.linkonce.r*)} } - .rela.rodata ${RELOCATING-0} : + .rela.rodata : { *(.rela.rodata) ${RELOCATING+*(.rela.rodata.*)} ${RELOCATING+*(.rela.gnu.linkonce.r*)} } - .rel.data ${RELOCATING-0} : + .rel.data : { *(.rel.data) ${RELOCATING+*(.rel.data.*)} ${RELOCATING+*(.rel.gnu.linkonce.d*)} } - .rela.data ${RELOCATING-0} : + .rela.data : { *(.rela.data) ${RELOCATING+*(.rela.data.*)} ${RELOCATING+*(.rela.gnu.linkonce.d*)} } - .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) } - .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) } - .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) } - .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) } - .rel.got ${RELOCATING-0} : { *(.rel.got) } - .rela.got ${RELOCATING-0} : { *(.rela.got) } - .rel.bss ${RELOCATING-0} : { *(.rel.bss) } - .rela.bss ${RELOCATING-0} : { *(.rela.bss) } - .rel.plt ${RELOCATING-0} : { *(.rel.plt) } - .rela.plt ${RELOCATING-0} : { *(.rela.plt) } + .rel.ctors : { *(.rel.ctors) } + .rela.ctors : { *(.rela.ctors) } + .rel.dtors : { *(.rel.dtors) } + .rela.dtors : { *(.rela.dtors) } + .rel.got : { *(.rel.got) } + .rela.got : { *(.rela.got) } + .rel.bss : { *(.rel.bss) } + .rela.bss : { *(.rela.bss) } + .rel.plt : { *(.rel.plt) } + .rela.plt : { *(.rela.plt) } /* Internal text space. */ .text : @@ -115,7 +115,7 @@ SECTIONS ${RELOCATING+ _etext = . ; } } ${RELOCATING+ > text} - .data ${RELOCATING-0} : ${RELOCATING+AT (ADDR (.text) + SIZEOF (.text))} + .data : ${RELOCATING+AT (ADDR (.text) + SIZEOF (.text))} { ${RELOCATING+ PROVIDE (__data_start = .) ; } *(.data) @@ -142,7 +142,7 @@ SECTIONS ${RELOCATING+ _end = . ; } } ${RELOCATING+ > data} - .vectors ${RELOCATING-0}: + .vectors : { ${RELOCATING+ PROVIDE (__vectors_start = .) ; } *(.vectors*) diff --git a/ld/scripttempl/elf32sh-symbian.sc b/ld/scripttempl/elf32sh-symbian.sc index a0b6a4f..c8e3cf7 100644 --- a/ld/scripttempl/elf32sh-symbian.sc +++ b/ld/scripttempl/elf32sh-symbian.sc @@ -84,7 +84,7 @@ fi DYNAMIC=".dynamic : { *(.dynamic) } :dynamic :dyn" RODATA=".rodata ALIGN(4) : { *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.*}) }" DISCARDED="/DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.directive) *(.gnu.lto_*) }" -test -z "$GOT" && GOT=".got ${RELOCATING-0} : { *(.got.plt) *(.got) } :dynamic :dyn" +test -z "$GOT" && GOT=".got : { *(.got.plt) *(.got) } :dynamic :dyn" CTOR=".ctors ALIGN(4) : { ${CONSTRUCTING+${CTOR_START}} @@ -121,7 +121,7 @@ DTOR=".dtors ALIGN(4) : KEEP (*(.dtors)) ${CONSTRUCTING+${DTOR_END}} } :text" -STACK=" .stack ${RELOCATING-0}${RELOCATING+${STACK_ADDR}} : +STACK=" .stack ${RELOCATING+${STACK_ADDR}} : { ${RELOCATING+_stack = .;} *(.stack) @@ -145,10 +145,6 @@ ${RELOCATING+/* Do we need any of these for elf? __DYNAMIC = 0; ${STACKZERO+${STACKZERO}} ${SHLIB_PATH+${SHLIB_PATH}} */} ${RELOCATING+${EXECUTABLE_SYMBOLS}} ${RELOCATING+${INPUT_FILES}} -${RELOCATING- /* For some reason, the Solaris linker makes bad executables - if gld -r is used and the intermediate file has sections starting - at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld - bug. But for now assigning the zero vmas works. */} PHDRS { @@ -208,20 +204,20 @@ SECTIONS /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = ALIGN(128) + (. & (128 - 1)); - .preinit_array ${RELOCATING-0} : + .preinit_array : { ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__preinit_array_start = .);}} KEEP (*(.preinit_array)) ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__preinit_array_end = .);}} } - .init_array ${RELOCATING-0} : + .init_array : { ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__init_array_start = .);}} KEEP (*(SORT(.init_array.*))) KEEP (*(.init_array)) ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__init_array_end = .);}} } - .fini_array ${RELOCATING-0} : + .fini_array : { ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_start = .);}} KEEP (*(.fini_array)) @@ -273,14 +269,14 @@ SECTIONS ${TEXT_DYNAMIC-${DYNAMIC}} ${TEXT_DYNAMIC+${DYNAMIC}} - .hash ${RELOCATING-0} : { *(.hash) } :dynamic :dyn - .dynsym ${RELOCATING-0} : { *(.dynsym) } :dynamic :dyn - .dynstr ${RELOCATING-0} : { *(.dynstr) } :dynamic :dyn + .hash : { *(.hash) } :dynamic :dyn + .dynsym : { *(.dynsym) } :dynamic :dyn + .dynstr : { *(.dynstr) } :dynamic :dyn ${DATA_PLT-${BSS_PLT-${PLT}}} .got.plt : { *(.got.plt) } :dynamic :dyn - .gnu.version ${RELOCATING-0} : { *(.gnu.version) } - .gnu.version_d ${RELOCATING-0}: { *(.gnu.version_d) } - .gnu.version_r ${RELOCATING-0}: { *(.gnu.version_r) } + .gnu.version : { *(.gnu.version) } + .gnu.version_d : { *(.gnu.version_d) } + .gnu.version_r : { *(.gnu.version_r) } EOF if [ "x$COMBRELOC" = x ]; then COMBRELOCCAT=cat @@ -288,40 +284,40 @@ else COMBRELOCCAT="cat > $COMBRELOC" fi eval $COMBRELOCCAT <<EOF - .rel.init ${RELOCATING-0} : { *(.rel.init) } - .rela.init ${RELOCATING-0} : { *(.rela.init) } - .rel.text ${RELOCATING-0} : { *(.rel.text${RELOCATING+ .rel.text.* .rel.gnu.linkonce.t.*}) } - .rela.text ${RELOCATING-0} : { *(.rela.text${RELOCATING+ .rela.text.* .rela.gnu.linkonce.t.*}) } - .rel.fini ${RELOCATING-0} : { *(.rel.fini) } - .rela.fini ${RELOCATING-0} : { *(.rela.fini) } - .rel.rodata ${RELOCATING-0} : { *(.rel.rodata${RELOCATING+ .rel.rodata.* .rel.gnu.linkonce.r.*}) } - .rela.rodata ${RELOCATING-0} : { *(.rela.rodata${RELOCATING+ .rela.rodata.* .rela.gnu.linkonce.r.*}) } + .rel.init : { *(.rel.init) } + .rela.init : { *(.rela.init) } + .rel.text : { *(.rel.text${RELOCATING+ .rel.text.* .rel.gnu.linkonce.t.*}) } + .rela.text : { *(.rela.text${RELOCATING+ .rela.text.* .rela.gnu.linkonce.t.*}) } + .rel.fini : { *(.rel.fini) } + .rela.fini : { *(.rela.fini) } + .rel.rodata : { *(.rel.rodata${RELOCATING+ .rel.rodata.* .rel.gnu.linkonce.r.*}) } + .rela.rodata : { *(.rela.rodata${RELOCATING+ .rela.rodata.* .rela.gnu.linkonce.r.*}) } ${OTHER_READONLY_RELOC_SECTIONS} - .rel.data ${RELOCATING-0} : { *(.rel.data${RELOCATING+ .rel.data.* .rel.gnu.linkonce.d.*}) } - .rela.data ${RELOCATING-0} : { *(.rela.data${RELOCATING+ .rela.data.* .rela.gnu.linkonce.d.*}) } - .rel.tdata ${RELOCATING-0} : { *(.rel.tdata${RELOCATING+ .rel.tdata.* .rel.gnu.linkonce.td.*}) } - .rela.tdata ${RELOCATING-0} : { *(.rela.tdata${RELOCATING+ .rela.tdata.* .rela.gnu.linkonce.td.*}) } - .rel.tbss ${RELOCATING-0} : { *(.rel.tbss${RELOCATING+ .rel.tbss.* .rel.gnu.linkonce.tb.*}) } - .rela.tbss ${RELOCATING-0} : { *(.rela.tbss${RELOCATING+ .rela.tbss.* .rela.gnu.linkonce.tb.*}) } - .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) } - .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) } - .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) } - .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) } - .rel.got ${RELOCATING-0} : { *(.rel.got) } - .rela.got ${RELOCATING-0} : { *(.rela.got) } + .rel.data : { *(.rel.data${RELOCATING+ .rel.data.* .rel.gnu.linkonce.d.*}) } + .rela.data : { *(.rela.data${RELOCATING+ .rela.data.* .rela.gnu.linkonce.d.*}) } + .rel.tdata : { *(.rel.tdata${RELOCATING+ .rel.tdata.* .rel.gnu.linkonce.td.*}) } + .rela.tdata : { *(.rela.tdata${RELOCATING+ .rela.tdata.* .rela.gnu.linkonce.td.*}) } + .rel.tbss : { *(.rel.tbss${RELOCATING+ .rel.tbss.* .rel.gnu.linkonce.tb.*}) } + .rela.tbss : { *(.rela.tbss${RELOCATING+ .rela.tbss.* .rela.gnu.linkonce.tb.*}) } + .rel.ctors : { *(.rel.ctors) } + .rela.ctors : { *(.rela.ctors) } + .rel.dtors : { *(.rel.dtors) } + .rela.dtors : { *(.rela.dtors) } + .rel.got : { *(.rel.got) } + .rela.got : { *(.rela.got) } ${OTHER_GOT_RELOC_SECTIONS} - .rel.bss ${RELOCATING-0} : { *(.rel.bss${RELOCATING+ .rel.bss.* .rel.gnu.linkonce.b.*}) } - .rela.bss ${RELOCATING-0} : { *(.rela.bss${RELOCATING+ .rela.bss.* .rela.gnu.linkonce.b.*}) } + .rel.bss : { *(.rel.bss${RELOCATING+ .rel.bss.* .rel.gnu.linkonce.b.*}) } + .rela.bss : { *(.rela.bss${RELOCATING+ .rela.bss.* .rela.gnu.linkonce.b.*}) } EOF if [ -n "$COMBRELOC" ]; then cat <<EOF - .rel.dyn ${RELOCATING-0} : + .rel.dyn : { EOF sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rela\./d;s/^.*: { *\(.*\)}$/ \1/' $COMBRELOC cat <<EOF } - .rela.dyn ${RELOCATING-0} : + .rela.dyn : { EOF sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rel\./d;s/^.*: { *\(.*\)}/ \1/' $COMBRELOC @@ -330,8 +326,8 @@ cat <<EOF EOF fi cat <<EOF - .rel.plt ${RELOCATING-0} : { *(.rel.plt) } - .rela.plt ${RELOCATING-0} : { *(.rela.plt) } + .rel.plt : { *(.rel.plt) } + .rela.plt : { *(.rela.plt) } ${OTHER_PLT_RELOC_SECTIONS} diff --git a/ld/scripttempl/elf64hppa.sc b/ld/scripttempl/elf64hppa.sc index 90aedb8..aa1b04d 100644 --- a/ld/scripttempl/elf64hppa.sc +++ b/ld/scripttempl/elf64hppa.sc @@ -110,26 +110,26 @@ if test -n "${COMMONPAGESIZE}"; then DATA_SEGMENT_RELRO_END=". = DATA_SEGMENT_RELRO_END (${SEPARATE_GOTPLT-0}, .);" fi if test -z "${INITIAL_READONLY_SECTIONS}${CREATE_SHLIB}"; then - INITIAL_READONLY_SECTIONS=".interp ${RELOCATING-0} : { *(.interp) }" + INITIAL_READONLY_SECTIONS=".interp : { *(.interp) }" fi if test -z "$PLT"; then - PLT=".plt ${RELOCATING-0} : { *(.plt) }" + PLT=".plt : { *(.plt) }" fi test -n "${DATA_PLT-${BSS_PLT-text}}" && TEXT_PLT=yes if test -z "$GOT"; then if test -z "$SEPARATE_GOTPLT"; then - GOT=".got ${RELOCATING-0} : { *(.got.plt) *(.got) }" + GOT=".got : { *(.got.plt) *(.got) }" else - GOT=".got ${RELOCATING-0} : { *(.got) }" - GOTPLT=".got.plt ${RELOCATING-0} : { *(.got.plt) }" + GOT=".got : { *(.got) }" + GOTPLT=".got.plt : { *(.got.plt) }" fi fi -DYNAMIC=".dynamic ${RELOCATING-0} : { *(.dynamic) }" -RODATA=".rodata ${RELOCATING-0} : { *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.*}) }" +DYNAMIC=".dynamic : { *(.dynamic) }" +RODATA=".rodata : { *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.*}) }" DATARELRO=".data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) }" DISCARDED="/DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }" if test -z "${NO_SMALL_DATA}"; then - SBSS=".sbss ${RELOCATING-0} : + SBSS=".sbss : { ${RELOCATING+${SBSS_START_SYMBOLS}} ${CREATE_SHLIB+*(.sbss2 .sbss2.* .gnu.linkonce.sb2.*)} @@ -138,29 +138,29 @@ if test -z "${NO_SMALL_DATA}"; then *(.scommon) ${RELOCATING+${SBSS_END_SYMBOLS}} }" - SBSS2=".sbss2 ${RELOCATING-0} : { *(.sbss2${RELOCATING+ .sbss2.* .gnu.linkonce.sb2.*}) }" + SBSS2=".sbss2 : { *(.sbss2${RELOCATING+ .sbss2.* .gnu.linkonce.sb2.*}) }" SDATA="/* 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 ${RELOCATING-0} : + .sdata : { ${RELOCATING+${SDATA_START_SYMBOLS}} ${CREATE_SHLIB+*(.sdata2 .sdata2.* .gnu.linkonce.s2.*)} *(.sdata${RELOCATING+ .sdata.* .gnu.linkonce.s.*}) }" - SDATA2=".sdata2 ${RELOCATING-0} : + SDATA2=".sdata2 : { ${RELOCATING+${SDATA2_START_SYMBOLS}} *(.sdata2${RELOCATING+ .sdata2.* .gnu.linkonce.s2.*}) }" - REL_SDATA=".rel.sdata ${RELOCATING-0} : { *(.rel.sdata${RELOCATING+ .rel.sdata.* .rel.gnu.linkonce.s.*}) } - .rela.sdata ${RELOCATING-0} : { *(.rela.sdata${RELOCATING+ .rela.sdata.* .rela.gnu.linkonce.s.*}) }" - REL_SBSS=".rel.sbss ${RELOCATING-0} : { *(.rel.sbss${RELOCATING+ .rel.sbss.* .rel.gnu.linkonce.sb.*}) } - .rela.sbss ${RELOCATING-0} : { *(.rela.sbss${RELOCATING+ .rela.sbss.* .rela.gnu.linkonce.sb.*}) }" - REL_SDATA2=".rel.sdata2 ${RELOCATING-0} : { *(.rel.sdata2${RELOCATING+ .rel.sdata2.* .rel.gnu.linkonce.s2.*}) } - .rela.sdata2 ${RELOCATING-0} : { *(.rela.sdata2${RELOCATING+ .rela.sdata2.* .rela.gnu.linkonce.s2.*}) }" - REL_SBSS2=".rel.sbss2 ${RELOCATING-0} : { *(.rel.sbss2${RELOCATING+ .rel.sbss2.* .rel.gnu.linkonce.sb2.*}) } - .rela.sbss2 ${RELOCATING-0} : { *(.rela.sbss2${RELOCATING+ .rela.sbss2.* .rela.gnu.linkonce.sb2.*}) }" + REL_SDATA=".rel.sdata : { *(.rel.sdata${RELOCATING+ .rel.sdata.* .rel.gnu.linkonce.s.*}) } + .rela.sdata : { *(.rela.sdata${RELOCATING+ .rela.sdata.* .rela.gnu.linkonce.s.*}) }" + REL_SBSS=".rel.sbss : { *(.rel.sbss${RELOCATING+ .rel.sbss.* .rel.gnu.linkonce.sb.*}) } + .rela.sbss : { *(.rela.sbss${RELOCATING+ .rela.sbss.* .rela.gnu.linkonce.sb.*}) }" + REL_SDATA2=".rel.sdata2 : { *(.rel.sdata2${RELOCATING+ .rel.sdata2.* .rel.gnu.linkonce.s2.*}) } + .rela.sdata2 : { *(.rela.sdata2${RELOCATING+ .rela.sdata2.* .rela.gnu.linkonce.s2.*}) }" + REL_SBSS2=".rel.sbss2 : { *(.rel.sbss2${RELOCATING+ .rel.sbss2.* .rel.gnu.linkonce.sb2.*}) } + .rela.sbss2 : { *(.rela.sbss2${RELOCATING+ .rela.sbss2.* .rela.gnu.linkonce.sb2.*}) }" else NO_SMALL_DATA=" " fi @@ -176,31 +176,31 @@ if test -z "${SDATA_GOT}"; then fi test -n "$SEPARATE_GOTPLT" && SEPARATE_GOTPLT=" " test "${LARGE_SECTIONS}" = "yes" && REL_LARGE=" - .rel.ldata ${RELOCATING-0} : { *(.rel.ldata${RELOCATING+ .rel.ldata.* .rel.gnu.linkonce.l.*}) } - .rela.ldata ${RELOCATING-0} : { *(.rela.ldata${RELOCATING+ .rela.ldata.* .rela.gnu.linkonce.l.*}) } - .rel.lbss ${RELOCATING-0} : { *(.rel.lbss${RELOCATING+ .rel.lbss.* .rel.gnu.linkonce.lb.*}) } - .rela.lbss ${RELOCATING-0} : { *(.rela.lbss${RELOCATING+ .rela.lbss.* .rela.gnu.linkonce.lb.*}) } - .rel.lrodata ${RELOCATING-0} : { *(.rel.lrodata${RELOCATING+ .rel.lrodata.* .rel.gnu.linkonce.lr.*}) } - .rela.lrodata ${RELOCATING-0} : { *(.rela.lrodata${RELOCATING+ .rela.lrodata.* .rela.gnu.linkonce.lr.*}) }" + .rel.ldata : { *(.rel.ldata${RELOCATING+ .rel.ldata.* .rel.gnu.linkonce.l.*}) } + .rela.ldata : { *(.rela.ldata${RELOCATING+ .rela.ldata.* .rela.gnu.linkonce.l.*}) } + .rel.lbss : { *(.rel.lbss${RELOCATING+ .rel.lbss.* .rel.gnu.linkonce.lb.*}) } + .rela.lbss : { *(.rela.lbss${RELOCATING+ .rela.lbss.* .rela.gnu.linkonce.lb.*}) } + .rel.lrodata : { *(.rel.lrodata${RELOCATING+ .rel.lrodata.* .rel.gnu.linkonce.lr.*}) } + .rela.lrodata : { *(.rela.lrodata${RELOCATING+ .rela.lrodata.* .rela.gnu.linkonce.lr.*}) }" test "${LARGE_SECTIONS}" = "yes" && OTHER_BSS_SECTIONS=" ${OTHER_BSS_SECTIONS} - .lbss ${RELOCATING-0} : + .lbss : { *(.dynlbss) *(.lbss${RELOCATING+ .lbss.* .gnu.linkonce.lb.*}) *(LARGE_COMMON) }" test "${LARGE_SECTIONS}" = "yes" && LARGE_SECTIONS=" - .lrodata ${RELOCATING-0} ${RELOCATING+ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))} : + .lrodata ${RELOCATING+ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))} : { *(.lrodata${RELOCATING+ .lrodata.* .gnu.linkonce.lr.*}) } - .ldata ${RELOCATING-0} ${RELOCATING+ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))} : + .ldata ${RELOCATING+ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))} : { *(.ldata${RELOCATING+ .ldata.* .gnu.linkonce.l.*}) ${RELOCATING+. = ALIGN(. != 0 ? ${ALIGNMENT} : 1);} }" -CTOR=".ctors ${CONSTRUCTING-0} : +CTOR=".ctors : { ${CONSTRUCTING+${CTOR_START}} /* gcc uses crtbegin.o to find the start of @@ -226,7 +226,7 @@ CTOR=".ctors ${CONSTRUCTING-0} : KEEP (*(.ctors)) ${CONSTRUCTING+${CTOR_END}} }" -DTOR=".dtors ${CONSTRUCTING-0} : +DTOR=".dtors : { ${CONSTRUCTING+${DTOR_START}} KEEP (*crtbegin.o(.dtors)) @@ -236,7 +236,7 @@ DTOR=".dtors ${CONSTRUCTING-0} : KEEP (*(.dtors)) ${CONSTRUCTING+${DTOR_END}} }" -STACK=" .stack ${RELOCATING-0}${RELOCATING+${STACK_ADDR}} : +STACK=" .stack ${RELOCATING+${STACK_ADDR}} : { ${RELOCATING+_stack = .;} *(.stack) @@ -261,10 +261,6 @@ ${RELOCATING+ENTRY(${ENTRY})} ${RELOCATING+${LIB_SEARCH_DIRS}} ${RELOCATING+${EXECUTABLE_SYMBOLS}} ${RELOCATING+${INPUT_FILES}} -${RELOCATING- /* For some reason, the Solaris linker makes bad executables - if gld -r is used and the intermediate file has sections starting - at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld - bug. But for now assigning the zero vmas works. */} SECTIONS { @@ -280,13 +276,13 @@ test -n "${RELOCATING+0}" || unset NON_ALLOC_DYN test -z "${NON_ALLOC_DYN}" || TEXT_DYNAMIC= cat > ldscripts/dyntmp.$$ <<EOF ${TEXT_DYNAMIC+${DYNAMIC}} - .hash ${RELOCATING-0} : { *(.hash) } - .gnu.hash ${RELOCATING-0} : { *(.gnu.hash) } - .dynsym ${RELOCATING-0} : { *(.dynsym) } - .dynstr ${RELOCATING-0} : { *(.dynstr) } - .gnu.version ${RELOCATING-0} : { *(.gnu.version) } - .gnu.version_d ${RELOCATING-0}: { *(.gnu.version_d) } - .gnu.version_r ${RELOCATING-0}: { *(.gnu.version_r) } + .hash : { *(.hash) } + .gnu.hash : { *(.gnu.hash) } + .dynsym : { *(.dynsym) } + .dynstr : { *(.dynstr) } + .gnu.version : { *(.gnu.version) } + .gnu.version_d : { *(.gnu.version_d) } + .gnu.version_r : { *(.gnu.version_r) } EOF if [ "x$COMBRELOC" = x ]; then @@ -295,58 +291,58 @@ else COMBRELOCCAT="cat > $COMBRELOC" fi eval $COMBRELOCCAT <<EOF - .rel.init ${RELOCATING-0} : { *(.rel.init) } - .rela.init ${RELOCATING-0} : { *(.rela.init) } - .rel.text ${RELOCATING-0} : { *(.rel.text${RELOCATING+ .rel.text.* .rel.gnu.linkonce.t.*}) } - .rela.text ${RELOCATING-0} : { *(.rela.text${RELOCATING+ .rela.text.* .rela.gnu.linkonce.t.*}) } - .rel.fini ${RELOCATING-0} : { *(.rel.fini) } - .rela.fini ${RELOCATING-0} : { *(.rela.fini) } - .rel.rodata ${RELOCATING-0} : { *(.rel.rodata${RELOCATING+ .rel.rodata.* .rel.gnu.linkonce.r.*}) } - .rela.rodata ${RELOCATING-0} : { *(.rela.rodata${RELOCATING+ .rela.rodata.* .rela.gnu.linkonce.r.*}) } + .rel.init : { *(.rel.init) } + .rela.init : { *(.rela.init) } + .rel.text : { *(.rel.text${RELOCATING+ .rel.text.* .rel.gnu.linkonce.t.*}) } + .rela.text : { *(.rela.text${RELOCATING+ .rela.text.* .rela.gnu.linkonce.t.*}) } + .rel.fini : { *(.rel.fini) } + .rela.fini : { *(.rela.fini) } + .rel.rodata : { *(.rel.rodata${RELOCATING+ .rel.rodata.* .rel.gnu.linkonce.r.*}) } + .rela.rodata : { *(.rela.rodata${RELOCATING+ .rela.rodata.* .rela.gnu.linkonce.r.*}) } ${OTHER_READONLY_RELOC_SECTIONS} - .rel.data.rel.ro ${RELOCATING-0} : { *(.rel.data.rel.ro${RELOCATING+* .rel.gnu.linkonce.d.rel.ro.*}) } - .rela.data.rel.ro ${RELOCATING-0} : { *(.rela.data.rel.ro${RELOCATING+* .rela.gnu.linkonce.d.rel.ro.*}) } - .rel.data ${RELOCATING-0} : { *(.rel.data${RELOCATING+ .rel.data.* .rel.gnu.linkonce.d.*}) } - .rela.data ${RELOCATING-0} : { *(.rela.data${RELOCATING+ .rela.data.* .rela.gnu.linkonce.d.*}) } - .rel.tdata ${RELOCATING-0} : { *(.rel.tdata${RELOCATING+ .rel.tdata.* .rel.gnu.linkonce.td.*}) } - .rela.tdata ${RELOCATING-0} : { *(.rela.tdata${RELOCATING+ .rela.tdata.* .rela.gnu.linkonce.td.*}) } - .rel.tbss ${RELOCATING-0} : { *(.rel.tbss${RELOCATING+ .rel.tbss.* .rel.gnu.linkonce.tb.*}) } - .rela.tbss ${RELOCATING-0} : { *(.rela.tbss${RELOCATING+ .rela.tbss.* .rela.gnu.linkonce.tb.*}) } - .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) } - .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) } - .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) } - .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) } - .rel.got ${RELOCATING-0} : { *(.rel.got) } - .rela.got ${RELOCATING-0} : { *(.rela.got) } + .rel.data.rel.ro : { *(.rel.data.rel.ro${RELOCATING+* .rel.gnu.linkonce.d.rel.ro.*}) } + .rela.data.rel.ro : { *(.rela.data.rel.ro${RELOCATING+* .rela.gnu.linkonce.d.rel.ro.*}) } + .rel.data : { *(.rel.data${RELOCATING+ .rel.data.* .rel.gnu.linkonce.d.*}) } + .rela.data : { *(.rela.data${RELOCATING+ .rela.data.* .rela.gnu.linkonce.d.*}) } + .rel.tdata : { *(.rel.tdata${RELOCATING+ .rel.tdata.* .rel.gnu.linkonce.td.*}) } + .rela.tdata : { *(.rela.tdata${RELOCATING+ .rela.tdata.* .rela.gnu.linkonce.td.*}) } + .rel.tbss : { *(.rel.tbss${RELOCATING+ .rel.tbss.* .rel.gnu.linkonce.tb.*}) } + .rela.tbss : { *(.rela.tbss${RELOCATING+ .rela.tbss.* .rela.gnu.linkonce.tb.*}) } + .rel.ctors : { *(.rel.ctors) } + .rela.ctors : { *(.rela.ctors) } + .rel.dtors : { *(.rel.dtors) } + .rela.dtors : { *(.rela.dtors) } + .rel.got : { *(.rel.got) } + .rela.got : { *(.rela.got) } ${OTHER_GOT_RELOC_SECTIONS} ${REL_SDATA} ${REL_SBSS} ${REL_SDATA2} ${REL_SBSS2} - .rel.bss ${RELOCATING-0} : { *(.rel.bss${RELOCATING+ .rel.bss.* .rel.gnu.linkonce.b.*}) } - .rela.bss ${RELOCATING-0} : { *(.rela.bss${RELOCATING+ .rela.bss.* .rela.gnu.linkonce.b.*}) } + .rel.bss : { *(.rel.bss${RELOCATING+ .rel.bss.* .rel.gnu.linkonce.b.*}) } + .rela.bss : { *(.rela.bss${RELOCATING+ .rela.bss.* .rela.gnu.linkonce.b.*}) } ${REL_LARGE} EOF if [ -n "$COMBRELOC" ]; then cat >> ldscripts/dyntmp.$$ <<EOF - .rel.dyn ${RELOCATING-0} : + .rel.dyn : { EOF sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rela\./d;s/^.*: { *\(.*\)}$/ \1/' $COMBRELOC >> ldscripts/dyntmp.$$ cat >> ldscripts/dyntmp.$$ <<EOF } - .rel.ifunc.dyn ${RELOCATING-0} : + .rel.ifunc.dyn : { *(.rel.ifunc.*) } - .rela.dyn ${RELOCATING-0} : + .rela.dyn : { EOF sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rel\./d;s/^.*: { *\(.*\)}/ \1/' $COMBRELOC >> ldscripts/dyntmp.$$ cat >> ldscripts/dyntmp.$$ <<EOF } - .rela.ifunc.dyn ${RELOCATING-0} : + .rela.ifunc.dyn : { *(.rela.ifunc.*) } @@ -354,8 +350,8 @@ EOF fi cat >> ldscripts/dyntmp.$$ <<EOF - .rel.plt ${RELOCATING-0} : { *(.rel.plt) } - .rela.plt ${RELOCATING-0} : { *(.rela.plt) } + .rel.plt : { *(.rel.plt) } + .rela.plt : { *(.rela.plt) } ${OTHER_PLT_RELOC_SECTIONS} EOF @@ -374,7 +370,7 @@ if test -z "${NON_ALLOC_DYN}"; then fi cat <<EOF - .init ${RELOCATING-0} : + .init : { ${RELOCATING+${INIT_START}} KEEP (*(.init)) @@ -383,7 +379,7 @@ cat <<EOF ${TEXT_PLT+${PLT}} ${TINY_READONLY_SECTION} - .text ${RELOCATING-0} : + .text : { ${RELOCATING+${TEXT_START_SYMBOLS}} *(.text .stub${RELOCATING+ .text.* .gnu.linkonce.t.*}) @@ -391,7 +387,7 @@ cat <<EOF *(.gnu.warning) ${RELOCATING+${OTHER_TEXT_SECTIONS}} } =${NOP-0} - .fini ${RELOCATING-0} : + .fini : { ${RELOCATING+${FINI_START}} KEEP (*(.fini)) @@ -401,13 +397,13 @@ cat <<EOF ${RELOCATING+PROVIDE (_${ETEXT_NAME} = .);} ${RELOCATING+PROVIDE (${ETEXT_NAME} = .);} ${WRITABLE_RODATA-${RODATA}} - .rodata1 ${RELOCATING-0} : { *(.rodata1) } + .rodata1 : { *(.rodata1) } ${CREATE_SHLIB-${SDATA2}} ${CREATE_SHLIB-${SBSS2}} ${OTHER_READONLY_SECTIONS} .eh_frame_hdr : { *(.eh_frame_hdr) } - .eh_frame ${RELOCATING-0} : ONLY_IF_RO { KEEP (*(.eh_frame)) } - .gcc_except_table ${RELOCATING-0} : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } + .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) } + .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ @@ -416,26 +412,26 @@ cat <<EOF ${CREATE_PIE+${RELOCATING+. = ${SHLIB_DATA_ADDR-${DATA_SEGMENT_ALIGN}};}} /* Exception handling */ - .eh_frame ${RELOCATING-0} : ONLY_IF_RW { KEEP (*(.eh_frame)) } - .gcc_except_table ${RELOCATING-0} : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } + .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) } + .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } /* Thread Local Storage sections */ - .tdata ${RELOCATING-0} : { *(.tdata${RELOCATING+ .tdata.* .gnu.linkonce.td.*}) } + .tdata : { *(.tdata${RELOCATING+ .tdata.* .gnu.linkonce.td.*}) } - .preinit_array ${RELOCATING-0} : + .preinit_array : { ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__preinit_array_start = .);}} KEEP (*(.preinit_array)) ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__preinit_array_end = .);}} } - .init_array ${RELOCATING-0} : + .init_array : { ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_start = .);}} KEEP (*(SORT(.init_array.*))) KEEP (*(.init_array)) ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_end = .);}} } - .fini_array ${RELOCATING-0} : + .fini_array : { ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_start = .);}} KEEP (*(.fini_array)) @@ -444,7 +440,7 @@ cat <<EOF } ${SMALL_DATA_CTOR-${RELOCATING+${CTOR}}} ${SMALL_DATA_DTOR-${RELOCATING+${DTOR}}} - .jcr ${RELOCATING-0} : { KEEP (*(.jcr)) } + .jcr : { KEEP (*(.jcr)) } ${RELOCATING+${DATARELRO}} ${OTHER_RELRO_SECTIONS} @@ -458,13 +454,13 @@ cat <<EOF ${DATA_PLT+${PLT_BEFORE_GOT-${PLT}}} - .data ${RELOCATING-0} : + .data : { ${RELOCATING+${DATA_START_SYMBOLS}} *(.data${RELOCATING+ .data.* .gnu.linkonce.d.*}) ${CONSTRUCTING+SORT(CONSTRUCTORS)} } - .data1 ${RELOCATING-0} : { *(.data1) } + .data1 : { *(.data1) } ${WRITABLE_RODATA+${RODATA}} ${OTHER_READWRITE_SECTIONS} ${SMALL_DATA_CTOR+${RELOCATING+${CTOR}}} @@ -480,7 +476,7 @@ cat <<EOF ${RELOCATING+${OTHER_BSS_SYMBOLS}} ${SBSS} ${BSS_PLT+${PLT}} - .bss ${RELOCATING-0} : + .bss : { *(.dynbss) *(.bss${RELOCATING+ .bss.* .gnu.linkonce.b.*}) diff --git a/ld/scripttempl/elf_chaos.sc b/ld/scripttempl/elf_chaos.sc index 379c739..cbaf95b 100644 --- a/ld/scripttempl/elf_chaos.sc +++ b/ld/scripttempl/elf_chaos.sc @@ -71,12 +71,12 @@ test -z "${ELFSIZE}" && ELFSIZE=32 test -z "${ALIGNMENT}" && ALIGNMENT="${ELFSIZE} / 8" test -z "$ATTRS_SECTIONS" && ATTRS_SECTIONS=".gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }" test "$LD_FLAG" = "N" && DATA_ADDR=. -INTERP=".interp ${RELOCATING-0} : { *(.interp) }" -PLT=".plt ${RELOCATING-0} : { *(.plt) }" -DYNAMIC=".dynamic ${RELOCATING-0} : { *(.dynamic) }" -RODATA=".rodata ${RELOCATING-0} : { *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.*}) }" +INTERP=".interp : { *(.interp) }" +PLT=".plt : { *(.plt) }" +DYNAMIC=".dynamic : { *(.dynamic) }" +RODATA=".rodata : { *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.*}) }" if test -z "${NO_SMALL_DATA}"; then - SBSS=".sbss ${RELOCATING-0} : + SBSS=".sbss : { ${RELOCATING+PROVIDE (__sbss_start = .);} ${RELOCATING+PROVIDE (___sbss_start = .);} @@ -86,24 +86,24 @@ if test -z "${NO_SMALL_DATA}"; then ${RELOCATING+PROVIDE (__sbss_end = .);} ${RELOCATING+PROVIDE (___sbss_end = .);} }" - SBSS2=".sbss2 ${RELOCATING-0} : { *(.sbss2${RELOCATING+ .sbss2.* .gnu.linkonce.sb2.*}) }" + SBSS2=".sbss2 : { *(.sbss2${RELOCATING+ .sbss2.* .gnu.linkonce.sb2.*}) }" SDATA="/* 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 ${RELOCATING-0} : + .sdata : { ${RELOCATING+${SDATA_START_SYMBOLS}} *(.sdata${RELOCATING+ .sdata.* .gnu.linkonce.s.*}) }" - SDATA2=".sdata2 ${RELOCATING-0} : { *(.sdata2${RELOCATING+ .sdata2.* .gnu.linkonce.s2.*}) }" - REL_SDATA=".rel.sdata ${RELOCATING-0} : { *(.rel.sdata${RELOCATING+ .rel.sdata.* .rel.gnu.linkonce.s.*}) } - .rela.sdata ${RELOCATING-0} : { *(.rela.sdata${RELOCATING+ .rela.sdata.* .rela.gnu.linkonce.s.*}) }" - REL_SBSS=".rel.sbss ${RELOCATING-0} : { *(.rel.sbss${RELOCATING+ .rel.sbss.* .rel.gnu.linkonce.sb.*}) } - .rela.sbss ${RELOCATING-0} : { *(.rela.sbss${RELOCATING+ .rela.sbss.* .rela.gnu.linkonce.sb.*}) }" - REL_SDATA2=".rel.sdata2 ${RELOCATING-0} : { *(.rel.sdata2${RELOCATING+ .rel.sdata2.* .rel.gnu.linkonce.s2.*}) } - .rela.sdata2 ${RELOCATING-0} : { *(.rela.sdata2${RELOCATING+ .rela.sdata2.* .rela.gnu.linkonce.s2.*}) }" - REL_SBSS2=".rel.sbss2 ${RELOCATING-0} : { *(.rel.sbss2${RELOCATING+ .rel.sbss2.* .rel.gnu.linkonce.sb2.*}) } - .rela.sbss2 ${RELOCATING-0} : { *(.rela.sbss2${RELOCATING+ .rela.sbss2.* .rela.gnu.linkonce.sb2.*}) }" + SDATA2=".sdata2 : { *(.sdata2${RELOCATING+ .sdata2.* .gnu.linkonce.s2.*}) }" + REL_SDATA=".rel.sdata : { *(.rel.sdata${RELOCATING+ .rel.sdata.* .rel.gnu.linkonce.s.*}) } + .rela.sdata : { *(.rela.sdata${RELOCATING+ .rela.sdata.* .rela.gnu.linkonce.s.*}) }" + REL_SBSS=".rel.sbss : { *(.rel.sbss${RELOCATING+ .rel.sbss.* .rel.gnu.linkonce.sb.*}) } + .rela.sbss : { *(.rela.sbss${RELOCATING+ .rela.sbss.* .rela.gnu.linkonce.sb.*}) }" + REL_SDATA2=".rel.sdata2 : { *(.rel.sdata2${RELOCATING+ .rel.sdata2.* .rel.gnu.linkonce.s2.*}) } + .rela.sdata2 : { *(.rela.sdata2${RELOCATING+ .rela.sdata2.* .rela.gnu.linkonce.s2.*}) }" + REL_SBSS2=".rel.sbss2 : { *(.rel.sbss2${RELOCATING+ .rel.sbss2.* .rel.gnu.linkonce.sb2.*}) } + .rela.sbss2 : { *(.rela.sbss2${RELOCATING+ .rela.sbss2.* .rela.gnu.linkonce.sb2.*}) }" fi CTOR=" ${CONSTRUCTING+${CTOR_START}} @@ -139,7 +139,7 @@ DTOR=" KEEP (*(.dtors)) ${CONSTRUCTING+${DTOR_END}} " -STACK=" .stack ${RELOCATING-0}${RELOCATING+${STACK_ADDR}} : +STACK=" .stack ${RELOCATING+${STACK_ADDR}} : { ${RELOCATING+_stack = .;} *(.stack) @@ -158,10 +158,6 @@ ${RELOCATING+/* Do we need any of these for elf? __DYNAMIC = 0; ${STACKZERO+${STACKZERO}} ${SHLIB_PATH+${SHLIB_PATH}} */} ${RELOCATING+${EXECUTABLE_SYMBOLS}} ${RELOCATING+${INPUT_FILES}} -${RELOCATING- /* For some reason, the Solaris linker makes bad executables - if gld -r is used and the intermediate file has sections starting - at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld - bug. But for now assigning the zero vmas works. */} SECTIONS { @@ -171,12 +167,12 @@ SECTIONS ${CREATE_SHLIB-${INTERP}} ${INITIAL_READONLY_SECTIONS} ${TEXT_DYNAMIC+${DYNAMIC}} - .hash ${RELOCATING-0} : { *(.hash) } - .dynsym ${RELOCATING-0} : { *(.dynsym) } - .dynstr ${RELOCATING-0} : { *(.dynstr) } - .gnu.version ${RELOCATING-0} : { *(.gnu.version) } - .gnu.version_d ${RELOCATING-0}: { *(.gnu.version_d) } - .gnu.version_r ${RELOCATING-0}: { *(.gnu.version_r) } + .hash : { *(.hash) } + .dynsym : { *(.dynsym) } + .dynstr : { *(.dynstr) } + .gnu.version : { *(.gnu.version) } + .gnu.version_d : { *(.gnu.version_d) } + .gnu.version_r : { *(.gnu.version_r) } EOF if [ "x$COMBRELOC" = x ]; then @@ -185,40 +181,40 @@ else COMBRELOCCAT="cat > $COMBRELOC" fi eval $COMBRELOCCAT <<EOF - .rel.init ${RELOCATING-0} : { *(.rel.init) } - .rela.init ${RELOCATING-0} : { *(.rela.init) } - .rel.text ${RELOCATING-0} : { *(.rel.text${RELOCATING+ .rel.text.* .rel.gnu.linkonce.t.*}) } - .rela.text ${RELOCATING-0} : { *(.rela.text${RELOCATING+ .rela.text.* .rela.gnu.linkonce.t.*}) } - .rel.fini ${RELOCATING-0} : { *(.rel.fini) } - .rela.fini ${RELOCATING-0} : { *(.rela.fini) } - .rel.rodata ${RELOCATING-0} : { *(.rel.rodata${RELOCATING+ .rel.rodata.* .rel.gnu.linkonce.r.*}) } - .rela.rodata ${RELOCATING-0} : { *(.rela.rodata${RELOCATING+ .rela.rodata.* .rela.gnu.linkonce.r.*}) } + .rel.init : { *(.rel.init) } + .rela.init : { *(.rela.init) } + .rel.text : { *(.rel.text${RELOCATING+ .rel.text.* .rel.gnu.linkonce.t.*}) } + .rela.text : { *(.rela.text${RELOCATING+ .rela.text.* .rela.gnu.linkonce.t.*}) } + .rel.fini : { *(.rel.fini) } + .rela.fini : { *(.rela.fini) } + .rel.rodata : { *(.rel.rodata${RELOCATING+ .rel.rodata.* .rel.gnu.linkonce.r.*}) } + .rela.rodata : { *(.rela.rodata${RELOCATING+ .rela.rodata.* .rela.gnu.linkonce.r.*}) } ${OTHER_READONLY_RELOC_SECTIONS} - .rel.data ${RELOCATING-0} : { *(.rel.data${RELOCATING+ .rel.data.* .rel.gnu.linkonce.d.*}) } - .rela.data ${RELOCATING-0} : { *(.rela.data${RELOCATING+ .rela.data.* .rela.gnu.linkonce.d.*}) } - .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) } - .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) } - .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) } - .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) } - .rel.got ${RELOCATING-0} : { *(.rel.got) } - .rela.got ${RELOCATING-0} : { *(.rela.got) } + .rel.data : { *(.rel.data${RELOCATING+ .rel.data.* .rel.gnu.linkonce.d.*}) } + .rela.data : { *(.rela.data${RELOCATING+ .rela.data.* .rela.gnu.linkonce.d.*}) } + .rel.ctors : { *(.rel.ctors) } + .rela.ctors : { *(.rela.ctors) } + .rel.dtors : { *(.rel.dtors) } + .rela.dtors : { *(.rela.dtors) } + .rel.got : { *(.rel.got) } + .rela.got : { *(.rela.got) } ${OTHER_GOT_RELOC_SECTIONS} ${REL_SDATA} ${REL_SBSS} ${REL_SDATA2} ${REL_SBSS2} - .rel.bss ${RELOCATING-0} : { *(.rel.bss${RELOCATING+ .rel.bss.* .rel.gnu.linkonce.b.*}) } - .rela.bss ${RELOCATING-0} : { *(.rela.bss${RELOCATING+ .rela.bss.* .rela.gnu.linkonce.b.*}) } + .rel.bss : { *(.rel.bss${RELOCATING+ .rel.bss.* .rel.gnu.linkonce.b.*}) } + .rela.bss : { *(.rela.bss${RELOCATING+ .rela.bss.* .rela.gnu.linkonce.b.*}) } EOF if [ -n "$COMBRELOC" ]; then cat <<EOF - .rel.dyn ${RELOCATING-0} : + .rel.dyn : { EOF sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rela\./d;s/^.*: { *\(.*\)}$/ \1/' $COMBRELOC cat <<EOF } - .rela.dyn ${RELOCATING-0} : + .rela.dyn : { EOF sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rel\./d;s/^.*: { *\(.*\)}/ \1/' $COMBRELOC @@ -228,11 +224,11 @@ EOF fi cat <<EOF . = ALIGN(0x1000); - .rel.plt ${RELOCATING-0} : { *(.rel.plt) } - .rela.plt ${RELOCATING-0} : { *(.rela.plt) } + .rel.plt : { *(.rel.plt) } + .rela.plt : { *(.rela.plt) } ${OTHER_PLT_RELOC_SECTIONS} ${DATA_PLT-${BSS_PLT-${PLT}}} - .text ${RELOCATING-0} : + .text : { ${RELOCATING+${TEXT_START_SYMBOLS}} *(.text .stub${RELOCATING+ .text.* .gnu.linkonce.t.*}) @@ -240,7 +236,7 @@ cat <<EOF *(.gnu.warning) ${RELOCATING+${OTHER_TEXT_SECTIONS}} } =${NOP-0} - .fini ${RELOCATING-0} : + .fini : { ${RELOCATING+${FINI_START}} KEEP (*(.fini)) @@ -256,7 +252,7 @@ cat <<EOF .eh_frame_hdr : { *(.eh_frame_hdr) } . = ALIGN(0x1000); - .data ${RELOCATING-0} : + .data : { *(.rodata .rodata.*) *(.rodata1) @@ -270,15 +266,15 @@ cat <<EOF ${DTOR} KEEP (*(.jcr)) } - .data1 ${RELOCATING-0} : { *(.data1) } + .data1 : { *(.data1) } . = ALIGN(0x1000); - .gcc_except_table ${RELOCATING-0} : { *(.gcc_except_table) } + .gcc_except_table : { *(.gcc_except_table) } ${WRITABLE_RODATA+${RODATA}} ${OTHER_READWRITE_SECTIONS} ${TEXT_DYNAMIC-${DYNAMIC}} ${DATA_PLT+${PLT}} ${RELOCATING+${OTHER_GOT_SYMBOLS}} - .got ${RELOCATING-0} : { *(.got.plt) *(.got) } + .got : { *(.got.plt) *(.got) } ${OTHER_GOT_SECTIONS} ${CREATE_SHLIB+${SDATA2}} ${CREATE_SHLIB+${SBSS2}} @@ -291,7 +287,7 @@ cat <<EOF ${SBSS} ${BSS_PLT+${PLT}} . = ALIGN(0x1000); - .bss ${RELOCATING-0} : + .bss : { *(.dynbss) *(.bss${RELOCATING+ .bss.* .gnu.linkonce.b.*}) diff --git a/ld/scripttempl/elfd10v.sc b/ld/scripttempl/elfd10v.sc index c5f9631..40ffe16 100644 --- a/ld/scripttempl/elfd10v.sc +++ b/ld/scripttempl/elfd10v.sc @@ -3,11 +3,11 @@ test -z "${BIG_OUTPUT_FORMAT}" && BIG_OUTPUT_FORMAT=${OUTPUT_FORMAT} test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT} if [ -z "$MACHINE" ]; then OUTPUT_ARCH=${ARCH}; else OUTPUT_ARCH=${ARCH}:${MACHINE}; fi test "$LD_FLAG" = "N" && DATA_ADDR=. -INTERP=".interp ${RELOCATING-0} : { *(.interp) }" -PLT=".plt ${RELOCATING-0} : { *(.plt) }" +INTERP=".interp : { *(.interp) }" +PLT=".plt : { *(.plt) }" -CTOR=".ctors ${CONSTRUCTING-0} : +CTOR=".ctors : { ${CONSTRUCTING+${CTOR_START}} /* gcc uses crtbegin.o to find the start of @@ -34,7 +34,7 @@ CTOR=".ctors ${CONSTRUCTING-0} : ${CONSTRUCTING+${CTOR_END}} }" -DTOR=" .dtors ${CONSTRUCTING-0} : +DTOR=" .dtors : { ${CONSTRUCTING+${DTOR_START}} KEEP (*crtbegin.o(.dtors)) @@ -106,12 +106,12 @@ SECTIONS *(.rodata.*) } ${RELOCATING+ >DATA} - .rodata1 ${RELOCATING-0} : { + .rodata1 : { *(.rodata1) *(.rodata1.*) } ${RELOCATING+ >DATA} - .data ${RELOCATING-0} : + .data : { ${RELOCATING+${DATA_START_SYMBOLS}} *(.data) @@ -120,7 +120,7 @@ SECTIONS ${CONSTRUCTING+CONSTRUCTORS} } ${RELOCATING+ >DATA} - .data1 ${RELOCATING-0} : { + .data1 : { *(.data1) *(.data1.*) } ${RELOCATING+ >DATA} @@ -131,7 +131,7 @@ 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 ${RELOCATING-0} : { + .sdata : { *(.sdata) *(.sdata.*) } ${RELOCATING+ >DATA} @@ -139,8 +139,8 @@ SECTIONS ${RELOCATING+_edata = .;} ${RELOCATING+PROVIDE (edata = .);} ${RELOCATING+__bss_start = .;} - .sbss ${RELOCATING-0} : { *(.sbss) *(.scommon) } ${RELOCATING+ >DATA} - .bss ${RELOCATING-0} : + .sbss : { *(.sbss) *(.scommon) } ${RELOCATING+ >DATA} + .bss : { *(.dynbss) *(.dynbss.*) diff --git a/ld/scripttempl/elfd30v.sc b/ld/scripttempl/elfd30v.sc index b5db0e6..d4eddbe 100644 --- a/ld/scripttempl/elfd30v.sc +++ b/ld/scripttempl/elfd30v.sc @@ -1,5 +1,5 @@ -CTOR=".ctors ${CONSTRUCTING-0} : +CTOR=".ctors : { ${CONSTRUCTING+ __CTOR_LIST__ = .; } /* gcc uses crtbegin.o to find the start of @@ -26,7 +26,7 @@ CTOR=".ctors ${CONSTRUCTING-0} : ${CONSTRUCTING+ __CTOR_END__ = .; } } ${RELOCATING+ > ${DATA_MEMORY}}" -DTOR=" .dtors ${CONSTRUCTING-0} : +DTOR=" .dtors : { ${CONSTRUCTING+ __DTOR_LIST__ = .; } KEEP (*crtbegin.o(.dtors)) @@ -53,57 +53,57 @@ SECTIONS { /* Read-only sections, merged into text segment: */ ${TEXT_DYNAMIC+${DYNAMIC}} - .hash ${RELOCATING-0} : { *(.hash) } - .dynsym ${RELOCATING-0} : { *(.dynsym) } - .dynstr ${RELOCATING-0} : { *(.dynstr) } - .gnu.version ${RELOCATING-0} : { *(.gnu.version) } - .gnu.version_d ${RELOCATING-0} : { *(.gnu.version_d) } - .gnu.version_r ${RELOCATING-0} : { *(.gnu.version_r) } - - .rel.text ${RELOCATING-0} : { *(.rel.text) *(.rel.gnu.linkonce.t*) } - .rela.text ${RELOCATING-0} : { *(.rela.text) *(.rela.gnu.linkonce.t*) } - .rel.data ${RELOCATING-0} : { *(.rel.data) *(.rel.gnu.linkonce.d*) } - .rela.data ${RELOCATING-0} : { *(.rela.data) *(.rela.gnu.linkonce.d*) } - .rel.rodata ${RELOCATING-0} : { *(.rel.rodata) *(.rel.gnu.linkonce.r*) } - .rela.rodata ${RELOCATING-0} : { *(.rela.rodata) *(.rela.gnu.linkonce.r*) } - .rel.stext ${RELOCATING-0} : { *(.rel.stest) } - .rela.stext ${RELOCATING-0} : { *(.rela.stest) } - .rel.etext ${RELOCATING-0} : { *(.rel.etest) } - .rela.etext ${RELOCATING-0} : { *(.rela.etest) } - .rel.sdata ${RELOCATING-0} : { *(.rel.sdata) } - .rela.sdata ${RELOCATING-0} : { *(.rela.sdata) } - .rel.edata ${RELOCATING-0} : { *(.rel.edata) } - .rela.edata ${RELOCATING-0} : { *(.rela.edata) } - .rel.eit_v ${RELOCATING-0} : { *(.rel.eit_v) } - .rela.eit_v ${RELOCATING-0} : { *(.rela.eit_v) } - .rel.sbss ${RELOCATING-0} : { *(.rel.sbss) } - .rela.sbss ${RELOCATING-0} : { *(.rela.sbss) } - .rel.ebss ${RELOCATING-0} : { *(.rel.ebss) } - .rela.ebss ${RELOCATING-0} : { *(.rela.ebss) } - .rel.srodata ${RELOCATING-0} : { *(.rel.srodata) } - .rela.srodata ${RELOCATING-0} : { *(.rela.srodata) } - .rel.erodata ${RELOCATING-0} : { *(.rel.erodata) } - .rela.erodata ${RELOCATING-0} : { *(.rela.erodata) } - .rel.got ${RELOCATING-0} : { *(.rel.got) } - .rela.got ${RELOCATING-0} : { *(.rela.got) } - .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) } - .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) } - .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) } - .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) } - .rel.init ${RELOCATING-0} : { *(.rel.init) } - .rela.init ${RELOCATING-0} : { *(.rela.init) } - .rel.fini ${RELOCATING-0} : { *(.rel.fini) } - .rela.fini ${RELOCATING-0} : { *(.rela.fini) } - .rel.bss ${RELOCATING-0} : { *(.rel.bss) } - .rela.bss ${RELOCATING-0} : { *(.rela.bss) } - .rel.plt ${RELOCATING-0} : { *(.rel.plt) } - .rela.plt ${RELOCATING-0} : { *(.rela.plt) } - - .init ${RELOCATING-0} : { *(.init) } =${NOP-0} + .hash : { *(.hash) } + .dynsym : { *(.dynsym) } + .dynstr : { *(.dynstr) } + .gnu.version : { *(.gnu.version) } + .gnu.version_d : { *(.gnu.version_d) } + .gnu.version_r : { *(.gnu.version_r) } + + .rel.text : { *(.rel.text) *(.rel.gnu.linkonce.t*) } + .rela.text : { *(.rela.text) *(.rela.gnu.linkonce.t*) } + .rel.data : { *(.rel.data) *(.rel.gnu.linkonce.d*) } + .rela.data : { *(.rela.data) *(.rela.gnu.linkonce.d*) } + .rel.rodata : { *(.rel.rodata) *(.rel.gnu.linkonce.r*) } + .rela.rodata : { *(.rela.rodata) *(.rela.gnu.linkonce.r*) } + .rel.stext : { *(.rel.stest) } + .rela.stext : { *(.rela.stest) } + .rel.etext : { *(.rel.etest) } + .rela.etext : { *(.rela.etest) } + .rel.sdata : { *(.rel.sdata) } + .rela.sdata : { *(.rela.sdata) } + .rel.edata : { *(.rel.edata) } + .rela.edata : { *(.rela.edata) } + .rel.eit_v : { *(.rel.eit_v) } + .rela.eit_v : { *(.rela.eit_v) } + .rel.sbss : { *(.rel.sbss) } + .rela.sbss : { *(.rela.sbss) } + .rel.ebss : { *(.rel.ebss) } + .rela.ebss : { *(.rela.ebss) } + .rel.srodata : { *(.rel.srodata) } + .rela.srodata : { *(.rela.srodata) } + .rel.erodata : { *(.rel.erodata) } + .rela.erodata : { *(.rela.erodata) } + .rel.got : { *(.rel.got) } + .rela.got : { *(.rela.got) } + .rel.ctors : { *(.rel.ctors) } + .rela.ctors : { *(.rela.ctors) } + .rel.dtors : { *(.rel.dtors) } + .rela.dtors : { *(.rela.dtors) } + .rel.init : { *(.rel.init) } + .rela.init : { *(.rela.init) } + .rel.fini : { *(.rel.fini) } + .rela.fini : { *(.rela.fini) } + .rel.bss : { *(.rel.bss) } + .rela.bss : { *(.rela.bss) } + .rel.plt : { *(.rel.plt) } + .rela.plt : { *(.rela.plt) } + + .init : { *(.init) } =${NOP-0} ${DATA_PLT-${PLT}} /* Internal text space */ - .stext ${RELOCATING-0} : { *(.stext) } ${RELOCATING+ > text} + .stext : { *(.stext) } ${RELOCATING+ > text} /* Internal text space or external memory */ .text : @@ -116,23 +116,23 @@ SECTIONS } ${RELOCATING+ > ${TEXT_MEMORY}} /* Internal data space */ - .srodata ${RELOCATING-0} : { *(.srodata) } ${RELOCATING+ > data} - .sdata ${RELOCATING-0} : { *(.sdata) } ${RELOCATING+ > data} + .srodata : { *(.srodata) } ${RELOCATING+ > data} + .sdata : { *(.sdata) } ${RELOCATING+ > data} /* Internal data space or external memory */ - .rodata ${RELOCATING-0} : { *(.rodata) } ${RELOCATING+ > ${DATA_MEMORY}} + .rodata : { *(.rodata) } ${RELOCATING+ > ${DATA_MEMORY}} /* C++ exception support. */ - .eh_frame ${RELOCATING-0} : { KEEP (*(.eh_frame)) } ${RELOCATING+ > ${DATA_MEMORY}} - .gcc_except_table ${RELOCATING-0} : { *(.gcc_except_table) } ${RELOCATING+ > ${DATA_MEMORY}} + .eh_frame : { KEEP (*(.eh_frame)) } ${RELOCATING+ > ${DATA_MEMORY}} + .gcc_except_table : { *(.gcc_except_table) } ${RELOCATING+ > ${DATA_MEMORY}} /* Java class registration support. */ - .jcr ${RELOCATING-0} : { KEEP (*(.jcr)) } ${RELOCATING+ >${DATA_MEMORY}} + .jcr : { KEEP (*(.jcr)) } ${RELOCATING+ >${DATA_MEMORY}} ${RELOCATING+${CTOR}} ${RELOCATING+${DTOR}} - .data ${RELOCATING-0} : + .data : { *(.data) *(.gnu.linkonce.d*) @@ -141,31 +141,31 @@ SECTIONS } ${RELOCATING+ > ${DATA_MEMORY}} /* External memory */ - .etext ${RELOCATING-0} : + .etext : { ${RELOCATING+ PROVIDE (__etext_start = .) ; } *(.etext) ${RELOCATING+ PROVIDE (__etext_end = .) ; } } ${RELOCATING+ > emem} - .erodata ${RELOCATING-0} : { *(.erodata) } ${RELOCATING+ > emem} - .edata ${RELOCATING-0} : { *(.edata) } ${RELOCATING+ > emem} + .erodata : { *(.erodata) } ${RELOCATING+ > emem} + .edata : { *(.edata) } ${RELOCATING+ > emem} - .sbss ${RELOCATING-0} : + .sbss : { ${RELOCATING+ PROVIDE (__sbss_start = .) ; } *(.sbss) ${RELOCATING+ PROVIDE (__sbss_end = .) ; } } ${RELOCATING+ > data} - .ebss ${RELOCATING-0} : + .ebss : { ${RELOCATING+ PROVIDE (__ebss_start = .) ; } *(.ebss) ${RELOCATING+ PROVIDE (__ebss_end = .) ; } } ${RELOCATING+ > data} - .bss ${RELOCATING-0} : + .bss : { ${RELOCATING+ PROVIDE (__bss_start = .) ; } *(.bss) @@ -174,7 +174,7 @@ SECTIONS ${RELOCATING+ _end = . ; } } ${RELOCATING+ > ${DATA_MEMORY}} - .eit_v ${RELOCATING-0} : + .eit_v : { ${RELOCATING+ PROVIDE (__eit_start = .) ; } *(.eit_v) diff --git a/ld/scripttempl/elfi370.sc b/ld/scripttempl/elfi370.sc index 140021a..26c5e9e 100644 --- a/ld/scripttempl/elfi370.sc +++ b/ld/scripttempl/elfi370.sc @@ -27,10 +27,10 @@ test -z "${BIG_OUTPUT_FORMAT}" && BIG_OUTPUT_FORMAT=${OUTPUT_FORMAT} test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT} test -z "$ATTRS_SECTIONS" && ATTRS_SECTIONS=".gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }" test "$LD_FLAG" = "N" && DATA_ADDR=. -SBSS2=".sbss2 ${RELOCATING-0} : { *(.sbss2) }" -SDATA2=".sdata2 ${RELOCATING-0} : { *(.sdata2) }" -INTERP=".interp ${RELOCATING-0} : { *(.interp) }" -PLT=".plt ${RELOCATING-0} : { *(.plt) }" +SBSS2=".sbss2 : { *(.sbss2) }" +SDATA2=".sdata2 : { *(.sdata2) }" +INTERP=".interp : { *(.interp) }" +PLT=".plt : { *(.plt) }" cat <<EOF OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}", "${LITTLE_OUTPUT_FORMAT}") @@ -41,10 +41,6 @@ ${RELOCATING+${LIB_SEARCH_DIRS}} ${RELOCATING+/* Do we need any of these for elf? __DYNAMIC = 0; ${STACKZERO+${STACKZERO}} ${SHLIB_PATH+${SHLIB_PATH}} */} ${RELOCATING+${EXECUTABLE_SYMBOLS}} -${RELOCATING- /* For some reason, the Solaris linker makes bad executables - if gld -r is used and the intermediate file has sections starting - at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld - bug. But for now assigning the zero vmas works. */} ${RELOCATING+PROVIDE (__stack = 0);} SECTIONS @@ -53,32 +49,32 @@ SECTIONS ${CREATE_SHLIB-${RELOCATING+. = ${TEXT_START_ADDR} + SIZEOF_HEADERS;}} ${CREATE_SHLIB+${RELOCATING+. = SIZEOF_HEADERS;}} ${CREATE_SHLIB-${INTERP}} - .hash ${RELOCATING-0} : { *(.hash) } - .dynsym ${RELOCATING-0} : { *(.dynsym) } - .dynstr ${RELOCATING-0} : { *(.dynstr) } - .gnu.version ${RELOCATING-0} : { *(.gnu.version) } - .gnu.version_d ${RELOCATING-0} : { *(.gnu.version_d) } - .gnu.version_r ${RELOCATING-0} : { *(.gnu.version_r) } - .rela.text ${RELOCATING-0} : + .hash : { *(.hash) } + .dynsym : { *(.dynsym) } + .dynstr : { *(.dynstr) } + .gnu.version : { *(.gnu.version) } + .gnu.version_d : { *(.gnu.version_d) } + .gnu.version_r : { *(.gnu.version_r) } + .rela.text : { *(.rela.text) *(.rela.gnu.linkonce.t*) } - .rela.data ${RELOCATING-0} : + .rela.data : { *(.rela.data) *(.rela.gnu.linkonce.d*) } - .rela.rodata ${RELOCATING-0} : + .rela.rodata : { *(.rela.rodata) *(.rela.gnu.linkonce.r*) } - .rela.got ${RELOCATING-0} : { *(.rela.got) } - .rela.got1 ${RELOCATING-0} : { *(.rela.got1) } - .rela.got2 ${RELOCATING-0} : { *(.rela.got2) } - .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) } - .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) } - .rela.init ${RELOCATING-0} : { *(.rela.init) } - .rela.fini ${RELOCATING-0} : { *(.rela.fini) } - .rela.bss ${RELOCATING-0} : { *(.rela.bss) } - .rela.plt ${RELOCATING-0} : { *(.rela.plt) } - .rela.sdata ${RELOCATING-0} : { *(.rela.sdata) } - .rela.sbss ${RELOCATING-0} : { *(.rela.sbss) } - .rela.sdata2 ${RELOCATING-0} : { *(.rela.sdata2) } - .rela.sbss2 ${RELOCATING-0} : { *(.rela.sbss2) } - .text ${RELOCATING-0} : + .rela.got : { *(.rela.got) } + .rela.got1 : { *(.rela.got1) } + .rela.got2 : { *(.rela.got2) } + .rela.ctors : { *(.rela.ctors) } + .rela.dtors : { *(.rela.dtors) } + .rela.init : { *(.rela.init) } + .rela.fini : { *(.rela.fini) } + .rela.bss : { *(.rela.bss) } + .rela.plt : { *(.rela.plt) } + .rela.sdata : { *(.rela.sdata) } + .rela.sbss : { *(.rela.sbss) } + .rela.sdata2 : { *(.rela.sdata2) } + .rela.sbss2 : { *(.rela.sbss2) } + .text : { ${RELOCATING+${TEXT_START_SYMBOLS}} *(.text) @@ -86,10 +82,10 @@ SECTIONS *(.gnu.warning) *(.gnu.linkonce.t*) } =${NOP-0} - .init ${RELOCATING-0} : { *(.init) } =${NOP-0} - .fini ${RELOCATING-0} : { *(.fini) } =${NOP-0} - .rodata ${RELOCATING-0} : { *(.rodata) *(.gnu.linkonce.r*) } - .rodata1 ${RELOCATING-0} : { *(.rodata1) } + .init : { *(.init) } =${NOP-0} + .fini : { *(.fini) } =${NOP-0} + .rodata : { *(.rodata) *(.gnu.linkonce.r*) } + .rodata1 : { *(.rodata1) } ${RELOCATING+_etext = .;} ${RELOCATING+PROVIDE (etext = .);} ${CREATE_SHLIB-${SDATA2}} @@ -112,42 +108,42 @@ SECTIONS be referenced). */ ${RELOCATING+. = ${DATA_ADDR- ALIGN(8) + ${MAXPAGESIZE}};} - .data ${RELOCATING-0} : + .data : { ${RELOCATING+${DATA_START_SYMBOLS}} *(.data) *(.gnu.linkonce.d*) ${CONSTRUCTING+CONSTRUCTORS} } - .data1 ${RELOCATING-0} : { *(.data1) } + .data1 : { *(.data1) } ${OTHER_READWRITE_SECTIONS} - .got1 ${RELOCATING-0} : { *(.got1) } - .dynamic ${RELOCATING-0} : { *(.dynamic) } + .got1 : { *(.got1) } + .dynamic : { *(.dynamic) } /* Put .ctors and .dtors next to the .got2 section, so that the pointers get relocated with -mrelocatable. Also put in the .fixup pointers. The current compiler no longer needs this, but keep it around for 2.7.2 */ ${RELOCATING+PROVIDE (_GOT2_START_ = .);} - .got2 ${RELOCATING-0} : { *(.got2) } + .got2 : { *(.got2) } ${RELOCATING+PROVIDE (__CTOR_LIST__ = .);} - .ctors ${RELOCATING-0} : { *(.ctors) } + .ctors : { *(.ctors) } ${RELOCATING+PROVIDE (__CTOR_END__ = .);} ${RELOCATING+PROVIDE (__DTOR_LIST__ = .);} - .dtors ${RELOCATING-0} : { *(.dtors) } + .dtors : { *(.dtors) } ${RELOCATING+PROVIDE (__DTOR_END__ = .);} ${RELOCATING+PROVIDE (_FIXUP_START_ = .);} - .fixup ${RELOCATING-0} : { *(.fixup) } + .fixup : { *(.fixup) } ${RELOCATING+PROVIDE (_FIXUP_END_ = .);} ${RELOCATING+PROVIDE (_GOT2_END_ = .);} ${RELOCATING+PROVIDE (_GOT_START_ = .);} - .got ${RELOCATING-0} : { *(.got) } - .got.plt ${RELOCATING-0} : { *(.got.plt) } + .got : { *(.got) } + .got.plt : { *(.got.plt) } ${CREATE_SHLIB+${SDATA2}} ${CREATE_SHLIB+${SBSS2}} ${RELOCATING+PROVIDE (_GOT_END_ = .);} @@ -155,10 +151,10 @@ 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 ${RELOCATING-0} : { *(.sdata) } + .sdata : { *(.sdata) } ${RELOCATING+_edata = .;} ${RELOCATING+PROVIDE (edata = .);} - .sbss ${RELOCATING-0} : + .sbss : { ${RELOCATING+PROVIDE (__sbss_start = .);} *(.sbss) @@ -167,7 +163,7 @@ SECTIONS ${RELOCATING+PROVIDE (__sbss_end = .);} } ${PLT} - .bss ${RELOCATING-0} : + .bss : { ${RELOCATING+${OTHER_BSS_SYMBOLS}} ${RELOCATING+PROVIDE (__bss_start = .);} diff --git a/ld/scripttempl/elfm68hc11.sc b/ld/scripttempl/elfm68hc11.sc index a6f2cce..98187a9 100644 --- a/ld/scripttempl/elfm68hc11.sc +++ b/ld/scripttempl/elfm68hc11.sc @@ -24,7 +24,7 @@ test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT} if [ -z "$MACHINE" ]; then OUTPUT_ARCH=${ARCH}; else OUTPUT_ARCH=${ARCH}:${MACHINE}; fi test "$LD_FLAG" = "N" && DATA_ADDR=. -CTOR=".ctors ${CONSTRUCTING-0} : +CTOR=".ctors : { ${CONSTRUCTING+ PROVIDE (__CTOR_LIST__ = .); } ${CONSTRUCTING+${CTOR_START}} @@ -34,7 +34,7 @@ CTOR=".ctors ${CONSTRUCTING-0} : ${CONSTRUCTING+ PROVIDE(__CTOR_END__ = .); } } ${RELOCATING+ > ${TEXT_MEMORY}}" -DTOR=" .dtors ${CONSTRUCTING-0} : +DTOR=" .dtors : { ${CONSTRUCTING+ PROVIDE(__DTOR_LIST__ = .); } KEEP (*(.dtors)) @@ -127,34 +127,34 @@ PRE_COMPUTE_DATA_SIZE=" " INSTALL_RELOC=" - .install0 0 : { *(.install0) } - .install1 0 : { *(.install1) } - .install2 0 : { *(.install2) } - .install3 0 : { *(.install3) } - .install4 0 : { *(.install4) } + .install0 : { *(.install0) } + .install1 : { *(.install1) } + .install2 : { *(.install2) } + .install3 : { *(.install3) } + .install4 : { *(.install4) } " FINISH_RELOC=" - .fini0 0 : { *(.fini0) } - .fini1 0 : { *(.fini1) } - .fini2 0 : { *(.fini2) } - .fini3 0 : { *(.fini3) } - .fini4 0 : { *(.fini4) } + .fini0 : { *(.fini0) } + .fini1 : { *(.fini1) } + .fini2 : { *(.fini2) } + .fini3 : { *(.fini3) } + .fini4 : { *(.fini4) } " BSS_DATA_RELOC=" - .data1 0 : { *(.data1) } + .data1 : { *(.data1) } /* 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 0 : { *(.sdata) } - .sbss 0 : { *(.sbss) } - .scommon 0 : { *(.scommon) } + .sdata : { *(.sdata) } + .sbss : { *(.sbss) } + .scommon : { *(.scommon) } " SOFT_REGS_RELOC=" - .softregs 0 : { *(.softregs) } + .softregs : { *(.softregs) } " cat <<EOF @@ -172,113 +172,113 @@ ${RELOCATING+${MEMORY_DEF}} SECTIONS { - .hash ${RELOCATING-0} : { *(.hash) } - .dynsym ${RELOCATING-0} : { *(.dynsym) } - .dynstr ${RELOCATING-0} : { *(.dynstr) } - .gnu.version ${RELOCATING-0} : { *(.gnu.version) } - .gnu.version_d ${RELOCATING-0} : { *(.gnu.version_d) } - .gnu.version_r ${RELOCATING-0} : { *(.gnu.version_r) } - - .rel.text ${RELOCATING-0} : + .hash : { *(.hash) } + .dynsym : { *(.dynsym) } + .dynstr : { *(.dynstr) } + .gnu.version : { *(.gnu.version) } + .gnu.version_d : { *(.gnu.version_d) } + .gnu.version_r : { *(.gnu.version_r) } + + .rel.text : { *(.rel.text) ${RELOCATING+*(.rel.text.*)} ${RELOCATING+*(.rel.gnu.linkonce.t.*)} } - .rela.text ${RELOCATING-0} : + .rela.text : { *(.rela.text) ${RELOCATING+*(.rela.text.*)} ${RELOCATING+*(.rela.gnu.linkonce.t.*)} } - .rel.data ${RELOCATING-0} : + .rel.data : { *(.rel.data) ${RELOCATING+*(.rel.data.*)} ${RELOCATING+*(.rel.gnu.linkonce.d.*)} } - .rela.data ${RELOCATING-0} : + .rela.data : { *(.rela.data) ${RELOCATING+*(.rela.data.*)} ${RELOCATING+*(.rela.gnu.linkonce.d.*)} } - .rel.rodata ${RELOCATING-0} : + .rel.rodata : { *(.rel.rodata) ${RELOCATING+*(.rel.rodata.*)} ${RELOCATING+*(.rel.gnu.linkonce.r.*)} } - .rela.rodata ${RELOCATING-0} : + .rela.rodata : { *(.rela.rodata) ${RELOCATING+*(.rela.rodata.*)} ${RELOCATING+*(.rela.gnu.linkonce.r.*)} } - .rel.sdata ${RELOCATING-0} : + .rel.sdata : { *(.rel.sdata) ${RELOCATING+*(.rel.sdata.*)} ${RELOCATING+*(.rel.gnu.linkonce.s.*)} } - .rela.sdata ${RELOCATING-0} : + .rela.sdata : { *(.rela.sdata) ${RELOCATING+*(.rela.sdata.*)} ${RELOCATING+*(.rela.gnu.linkonce.s.*)} } - .rel.sbss ${RELOCATING-0} : + .rel.sbss : { *(.rel.sbss) ${RELOCATING+*(.rel.sbss.*)} ${RELOCATING+*(.rel.gnu.linkonce.sb.*)} } - .rela.sbss ${RELOCATING-0} : + .rela.sbss : { *(.rela.sbss) ${RELOCATING+*(.rela.sbss.*)} ${RELOCATING+*(.rel.gnu.linkonce.sb.*)} } - .rel.bss ${RELOCATING-0} : + .rel.bss : { *(.rel.bss) ${RELOCATING+*(.rel.bss.*)} ${RELOCATING+*(.rel.gnu.linkonce.b.*)} } - .rela.bss ${RELOCATING-0} : + .rela.bss : { *(.rela.bss) ${RELOCATING+*(.rela.bss.*)} ${RELOCATING+*(.rela.gnu.linkonce.b.*)} } - .rel.stext ${RELOCATING-0} : { *(.rel.stest) } - .rela.stext ${RELOCATING-0} : { *(.rela.stest) } - .rel.etext ${RELOCATING-0} : { *(.rel.etest) } - .rela.etext ${RELOCATING-0} : { *(.rela.etest) } - .rel.sdata ${RELOCATING-0} : { *(.rel.sdata) } - .rela.sdata ${RELOCATING-0} : { *(.rela.sdata) } - .rel.edata ${RELOCATING-0} : { *(.rel.edata) } - .rela.edata ${RELOCATING-0} : { *(.rela.edata) } - .rel.eit_v ${RELOCATING-0} : { *(.rel.eit_v) } - .rela.eit_v ${RELOCATING-0} : { *(.rela.eit_v) } - .rel.ebss ${RELOCATING-0} : { *(.rel.ebss) } - .rela.ebss ${RELOCATING-0} : { *(.rela.ebss) } - .rel.srodata ${RELOCATING-0} : { *(.rel.srodata) } - .rela.srodata ${RELOCATING-0} : { *(.rela.srodata) } - .rel.erodata ${RELOCATING-0} : { *(.rel.erodata) } - .rela.erodata ${RELOCATING-0} : { *(.rela.erodata) } - .rel.got ${RELOCATING-0} : { *(.rel.got) } - .rela.got ${RELOCATING-0} : { *(.rela.got) } - .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) } - .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) } - .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) } - .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) } - .rel.init ${RELOCATING-0} : { *(.rel.init) } - .rela.init ${RELOCATING-0} : { *(.rela.init) } - .rel.fini ${RELOCATING-0} : { *(.rel.fini) } - .rela.fini ${RELOCATING-0} : { *(.rela.fini) } - .rel.plt ${RELOCATING-0} : { *(.rel.plt) } - .rela.plt ${RELOCATING-0} : { *(.rela.plt) } + .rel.stext : { *(.rel.stest) } + .rela.stext : { *(.rela.stest) } + .rel.etext : { *(.rel.etest) } + .rela.etext : { *(.rela.etest) } + .rel.sdata : { *(.rel.sdata) } + .rela.sdata : { *(.rela.sdata) } + .rel.edata : { *(.rel.edata) } + .rela.edata : { *(.rela.edata) } + .rel.eit_v : { *(.rel.eit_v) } + .rela.eit_v : { *(.rela.eit_v) } + .rel.ebss : { *(.rel.ebss) } + .rela.ebss : { *(.rela.ebss) } + .rel.srodata : { *(.rel.srodata) } + .rela.srodata : { *(.rela.srodata) } + .rel.erodata : { *(.rel.erodata) } + .rela.erodata : { *(.rela.erodata) } + .rel.got : { *(.rel.got) } + .rela.got : { *(.rela.got) } + .rel.ctors : { *(.rel.ctors) } + .rela.ctors : { *(.rela.ctors) } + .rel.dtors : { *(.rel.dtors) } + .rela.dtors : { *(.rela.dtors) } + .rel.init : { *(.rel.init) } + .rela.init : { *(.rela.init) } + .rel.fini : { *(.rel.fini) } + .rela.fini : { *(.rela.fini) } + .rel.plt : { *(.rel.plt) } + .rela.plt : { *(.rela.plt) } /* Concatenate .page0 sections. Put them in the page0 memory bank unless we are creating a relocatable file. */ @@ -289,12 +289,12 @@ SECTIONS } ${RELOCATING+ > page0} /* Start of text section. */ - .stext ${RELOCATING-0} : + .stext : { *(.stext) } ${RELOCATING+ > ${TEXT_MEMORY}} - .init ${RELOCATING-0} : + .init : { *(.init) } ${RELOCATING+=${NOP-0}} @@ -302,7 +302,7 @@ SECTIONS ${RELOCATING-${INSTALL_RELOC}} ${RELOCATING-${FINISH_RELOC}} - .text ${RELOCATING-0}: + .text : { /* Put startup code at beginning so that _start keeps same address. */ ${RELOCATING+${STARTUP_CODE}} @@ -323,24 +323,24 @@ SECTIONS } ${RELOCATING+ > ${TEXT_MEMORY}} - .eh_frame ${RELOCATING-0} : + .eh_frame : { KEEP (*(.eh_frame)) } ${RELOCATING+ > ${TEXT_MEMORY}} - .gcc_except_table ${RELOCATING-0} : + .gcc_except_table : { *(.gcc_except_table) } ${RELOCATING+ > ${TEXT_MEMORY}} - .rodata ${RELOCATING-0} : + .rodata : { *(.rodata) ${RELOCATING+*(.rodata.*)} ${RELOCATING+*(.gnu.linkonce.r*)} } ${RELOCATING+ > ${TEXT_MEMORY}} - .rodata1 ${RELOCATING-0} : + .rodata1 : { *(.rodata1) } ${RELOCATING+ > ${TEXT_MEMORY}} @@ -349,7 +349,7 @@ SECTIONS ${RELOCATING+${CTOR}} ${RELOCATING+${DTOR}} - .jcr ${RELOCATING-0} : + .jcr : { KEEP (*(.jcr)) } ${RELOCATING+ > ${TEXT_MEMORY}} @@ -362,7 +362,7 @@ SECTIONS We construct the DATA image section in PROM at end of all these read-only sections. The data image must be copied at init time. Refer to GNU ld, Section 3.6.8.2 Output Section LMA. */ - .data ${RELOCATING-0} : ${RELOCATING+AT (__data_image)} + .data : ${RELOCATING+AT (__data_image)} { ${RELOCATING+__data_section_start = .;} ${RELOCATING+PROVIDE (__data_section_start = .);} @@ -385,7 +385,7 @@ SECTIONS ${RELOCATING+${PRE_COMPUTE_DATA_SIZE}} - /* .install ${RELOCATING-0}: + /* .install : { . = _data_image_end; } ${RELOCATING+ > ${TEXT_MEMORY}} */ @@ -394,7 +394,7 @@ SECTIONS ${RELOCATING-${BSS_DATA_RELOC}} ${RELOCATING-${SOFT_REGS_RELOC}} - .bss ${RELOCATING-0} : + .bss : { ${RELOCATING+__bss_start = .;} ${RELOCATING+*(.sbss)} @@ -410,7 +410,7 @@ SECTIONS ${RELOCATING+__bss_size = SIZEOF(.bss);} ${RELOCATING+PROVIDE (__bss_size = SIZEOF(.bss));} - .eeprom ${RELOCATING-0} : + .eeprom : { *(.eeprom) *(.eeprom.*) diff --git a/ld/scripttempl/elfm68hc12.sc b/ld/scripttempl/elfm68hc12.sc index 0774eb2..b2b4e6d 100644 --- a/ld/scripttempl/elfm68hc12.sc +++ b/ld/scripttempl/elfm68hc12.sc @@ -24,7 +24,7 @@ test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT} if [ -z "$MACHINE" ]; then OUTPUT_ARCH=${ARCH}; else OUTPUT_ARCH=${ARCH}:${MACHINE}; fi test "$LD_FLAG" = "N" && DATA_ADDR=. -CTOR=".ctors ${CONSTRUCTING-0} : +CTOR=".ctors : { ${CONSTRUCTING+ PROVIDE (__CTOR_LIST__ = .); } ${CONSTRUCTING+${CTOR_START}} @@ -34,7 +34,7 @@ CTOR=".ctors ${CONSTRUCTING-0} : ${CONSTRUCTING+ PROVIDE(__CTOR_END__ = .); } } ${RELOCATING+ > ${TEXT_MEMORY}}" -DTOR=" .dtors ${CONSTRUCTING-0} : +DTOR=" .dtors : { ${CONSTRUCTING+ PROVIDE(__DTOR_LIST__ = .); } KEEP (*(.dtors)) @@ -127,34 +127,34 @@ PRE_COMPUTE_DATA_SIZE=" " INSTALL_RELOC=" - .install0 0 : { *(.install0) } - .install1 0 : { *(.install1) } - .install2 0 : { *(.install2) } - .install3 0 : { *(.install3) } - .install4 0 : { *(.install4) } + .install0 : { *(.install0) } + .install1 : { *(.install1) } + .install2 : { *(.install2) } + .install3 : { *(.install3) } + .install4 : { *(.install4) } " FINISH_RELOC=" - .fini0 0 : { *(.fini0) } - .fini1 0 : { *(.fini1) } - .fini2 0 : { *(.fini2) } - .fini3 0 : { *(.fini3) } - .fini4 0 : { *(.fini4) } + .fini0 : { *(.fini0) } + .fini1 : { *(.fini1) } + .fini2 : { *(.fini2) } + .fini3 : { *(.fini3) } + .fini4 : { *(.fini4) } " BSS_DATA_RELOC=" - .data1 0 : { *(.data1) } + .data1 : { *(.data1) } /* 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 0 : { *(.sdata) } - .sbss 0 : { *(.sbss) } - .scommon 0 : { *(.scommon) } + .sdata : { *(.sdata) } + .sbss : { *(.sbss) } + .scommon : { *(.scommon) } " SOFT_REGS_RELOC=" - .softregs 0 : { *(.softregs) } + .softregs : { *(.softregs) } " cat <<EOF @@ -172,113 +172,113 @@ ${RELOCATING+${MEMORY_DEF}} SECTIONS { - .hash ${RELOCATING-0} : { *(.hash) } - .dynsym ${RELOCATING-0} : { *(.dynsym) } - .dynstr ${RELOCATING-0} : { *(.dynstr) } - .gnu.version ${RELOCATING-0} : { *(.gnu.version) } - .gnu.version_d ${RELOCATING-0} : { *(.gnu.version_d) } - .gnu.version_r ${RELOCATING-0} : { *(.gnu.version_r) } - - .rel.text ${RELOCATING-0} : + .hash : { *(.hash) } + .dynsym : { *(.dynsym) } + .dynstr : { *(.dynstr) } + .gnu.version : { *(.gnu.version) } + .gnu.version_d : { *(.gnu.version_d) } + .gnu.version_r : { *(.gnu.version_r) } + + .rel.text : { *(.rel.text) ${RELOCATING+*(.rel.text.*)} ${RELOCATING+*(.rel.gnu.linkonce.t.*)} } - .rela.text ${RELOCATING-0} : + .rela.text : { *(.rela.text) ${RELOCATING+*(.rela.text.*)} ${RELOCATING+*(.rela.gnu.linkonce.t.*)} } - .rel.data ${RELOCATING-0} : + .rel.data : { *(.rel.data) ${RELOCATING+*(.rel.data.*)} ${RELOCATING+*(.rel.gnu.linkonce.d.*)} } - .rela.data ${RELOCATING-0} : + .rela.data : { *(.rela.data) ${RELOCATING+*(.rela.data.*)} ${RELOCATING+*(.rela.gnu.linkonce.d.*)} } - .rel.rodata ${RELOCATING-0} : + .rel.rodata : { *(.rel.rodata) ${RELOCATING+*(.rel.rodata.*)} ${RELOCATING+*(.rel.gnu.linkonce.r.*)} } - .rela.rodata ${RELOCATING-0} : + .rela.rodata : { *(.rela.rodata) ${RELOCATING+*(.rela.rodata.*)} ${RELOCATING+*(.rela.gnu.linkonce.r.*)} } - .rel.sdata ${RELOCATING-0} : + .rel.sdata : { *(.rel.sdata) ${RELOCATING+*(.rel.sdata.*)} ${RELOCATING+*(.rel.gnu.linkonce.s.*)} } - .rela.sdata ${RELOCATING-0} : + .rela.sdata : { *(.rela.sdata) ${RELOCATING+*(.rela.sdata.*)} ${RELOCATING+*(.rela.gnu.linkonce.s.*)} } - .rel.sbss ${RELOCATING-0} : + .rel.sbss : { *(.rel.sbss) ${RELOCATING+*(.rel.sbss.*)} ${RELOCATING+*(.rel.gnu.linkonce.sb.*)} } - .rela.sbss ${RELOCATING-0} : + .rela.sbss : { *(.rela.sbss) ${RELOCATING+*(.rela.sbss.*)} ${RELOCATING+*(.rel.gnu.linkonce.sb.*)} } - .rel.bss ${RELOCATING-0} : + .rel.bss : { *(.rel.bss) ${RELOCATING+*(.rel.bss.*)} ${RELOCATING+*(.rel.gnu.linkonce.b.*)} } - .rela.bss ${RELOCATING-0} : + .rela.bss : { *(.rela.bss) ${RELOCATING+*(.rela.bss.*)} ${RELOCATING+*(.rela.gnu.linkonce.b.*)} } - .rel.stext ${RELOCATING-0} : { *(.rel.stest) } - .rela.stext ${RELOCATING-0} : { *(.rela.stest) } - .rel.etext ${RELOCATING-0} : { *(.rel.etest) } - .rela.etext ${RELOCATING-0} : { *(.rela.etest) } - .rel.sdata ${RELOCATING-0} : { *(.rel.sdata) } - .rela.sdata ${RELOCATING-0} : { *(.rela.sdata) } - .rel.edata ${RELOCATING-0} : { *(.rel.edata) } - .rela.edata ${RELOCATING-0} : { *(.rela.edata) } - .rel.eit_v ${RELOCATING-0} : { *(.rel.eit_v) } - .rela.eit_v ${RELOCATING-0} : { *(.rela.eit_v) } - .rel.ebss ${RELOCATING-0} : { *(.rel.ebss) } - .rela.ebss ${RELOCATING-0} : { *(.rela.ebss) } - .rel.srodata ${RELOCATING-0} : { *(.rel.srodata) } - .rela.srodata ${RELOCATING-0} : { *(.rela.srodata) } - .rel.erodata ${RELOCATING-0} : { *(.rel.erodata) } - .rela.erodata ${RELOCATING-0} : { *(.rela.erodata) } - .rel.got ${RELOCATING-0} : { *(.rel.got) } - .rela.got ${RELOCATING-0} : { *(.rela.got) } - .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) } - .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) } - .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) } - .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) } - .rel.init ${RELOCATING-0} : { *(.rel.init) } - .rela.init ${RELOCATING-0} : { *(.rela.init) } - .rel.fini ${RELOCATING-0} : { *(.rel.fini) } - .rela.fini ${RELOCATING-0} : { *(.rela.fini) } - .rel.plt ${RELOCATING-0} : { *(.rel.plt) } - .rela.plt ${RELOCATING-0} : { *(.rela.plt) } + .rel.stext : { *(.rel.stest) } + .rela.stext : { *(.rela.stest) } + .rel.etext : { *(.rel.etest) } + .rela.etext : { *(.rela.etest) } + .rel.sdata : { *(.rel.sdata) } + .rela.sdata : { *(.rela.sdata) } + .rel.edata : { *(.rel.edata) } + .rela.edata : { *(.rela.edata) } + .rel.eit_v : { *(.rel.eit_v) } + .rela.eit_v : { *(.rela.eit_v) } + .rel.ebss : { *(.rel.ebss) } + .rela.ebss : { *(.rela.ebss) } + .rel.srodata : { *(.rel.srodata) } + .rela.srodata : { *(.rela.srodata) } + .rel.erodata : { *(.rel.erodata) } + .rela.erodata : { *(.rela.erodata) } + .rel.got : { *(.rel.got) } + .rela.got : { *(.rela.got) } + .rel.ctors : { *(.rel.ctors) } + .rela.ctors : { *(.rela.ctors) } + .rel.dtors : { *(.rel.dtors) } + .rela.dtors : { *(.rela.dtors) } + .rel.init : { *(.rel.init) } + .rela.init : { *(.rela.init) } + .rel.fini : { *(.rel.fini) } + .rela.fini : { *(.rela.fini) } + .rel.plt : { *(.rel.plt) } + .rela.plt : { *(.rela.plt) } /* Concatenate .page0 sections. Put them in the page0 memory bank unless we are creating a relocatable file. */ @@ -288,12 +288,12 @@ SECTIONS } ${RELOCATING+ > page0} /* Start of text section. */ - .stext ${RELOCATING-0} : + .stext : { *(.stext) } ${RELOCATING+ > ${TEXT_MEMORY}} - .init ${RELOCATING-0} : + .init : { *(.init) } ${RELOCATING+=${NOP-0}} @@ -301,7 +301,7 @@ SECTIONS ${RELOCATING-${INSTALL_RELOC}} ${RELOCATING-${FINISH_RELOC}} - .text ${RELOCATING-0}: + .text : { /* Put startup code at beginning so that _start keeps same address. */ ${RELOCATING+${STARTUP_CODE}} @@ -322,17 +322,17 @@ SECTIONS ${RELOCATING+. = ALIGN(2);} } ${RELOCATING+ > ${TEXT_MEMORY} =0xa7a7a7a7} - .eh_frame ${RELOCATING-0} : + .eh_frame : { KEEP (*(.eh_frame)) } ${RELOCATING+ > ${TEXT_MEMORY}} - .gcc_except_table ${RELOCATING-0} : + .gcc_except_table : { *(.gcc_except_table) } ${RELOCATING+ > ${TEXT_MEMORY}} - .rodata ${RELOCATING-0} : + .rodata : { *(.rodata) ${RELOCATING+*(.rodata.*)} @@ -340,7 +340,7 @@ SECTIONS ${RELOCATING+. = ALIGN(2);} } ${RELOCATING+ > ${TEXT_MEMORY} =0xffffffff} - .rodata1 ${RELOCATING-0} : + .rodata1 : { *(.rodata1) ${RELOCATING+. = ALIGN(2);} @@ -350,7 +350,7 @@ SECTIONS ${RELOCATING+${CTOR}} ${RELOCATING+${DTOR}} - .jcr ${RELOCATING-0} : + .jcr : { KEEP (*(.jcr)) } ${RELOCATING+ > ${TEXT_MEMORY}} @@ -363,7 +363,7 @@ SECTIONS We construct the DATA image section in PROM at end of all these read-only sections. The data image must be copied at init time. Refer to GNU ld, Section 3.6.8.2 Output Section LMA. */ - .data ${RELOCATING-0} : ${RELOCATING+AT (__data_image)} + .data : ${RELOCATING+AT (__data_image)} { ${RELOCATING+__data_section_start = .;} ${RELOCATING+PROVIDE (__data_section_start = .);} @@ -387,7 +387,7 @@ SECTIONS ${RELOCATING+${PRE_COMPUTE_DATA_SIZE}} - /* .install ${RELOCATING-0}: + /* .install : { . = _data_image_end; } ${RELOCATING+ > ${TEXT_MEMORY}} */ @@ -396,7 +396,7 @@ SECTIONS ${RELOCATING-${BSS_DATA_RELOC}} ${RELOCATING-${SOFT_REGS_RELOC}} - .bss ${RELOCATING-0} : + .bss : { ${RELOCATING+__bss_start = .;} ${RELOCATING+*(.softregs)} @@ -413,7 +413,7 @@ SECTIONS ${RELOCATING+__bss_size = SIZEOF(.bss);} ${RELOCATING+PROVIDE (__bss_size = SIZEOF(.bss));} - .eeprom ${RELOCATING-0} : + .eeprom : { *(.eeprom) *(.eeprom.*) diff --git a/ld/scripttempl/elfmicroblaze.sc b/ld/scripttempl/elfmicroblaze.sc index a54b891..62de661 100644 --- a/ld/scripttempl/elfmicroblaze.sc +++ b/ld/scripttempl/elfmicroblaze.sc @@ -5,7 +5,7 @@ test -z "$ENTRY" && ENTRY=_start #test -z "$TEXT_START_ADDR" && TEXT_START_ADDR="0x0" -CTOR=".ctors ${CONSTRUCTING-0} : +CTOR=".ctors : { ${CONSTRUCTING+${CTOR_START}} /* gcc uses crtbegin.o to find the start of @@ -31,7 +31,7 @@ CTOR=".ctors ${CONSTRUCTING-0} : ${CONSTRUCTING+${CTOR_END}} }" -DTOR=" .dtors ${CONSTRUCTING-0} : +DTOR=" .dtors : { ${CONSTRUCTING+${DTOR_START}} KEEP (*crtbegin.o(.dtors)) diff --git a/ld/scripttempl/elfxtensa.sc b/ld/scripttempl/elfxtensa.sc index 588ec0c..9671c8e 100644 --- a/ld/scripttempl/elfxtensa.sc +++ b/ld/scripttempl/elfxtensa.sc @@ -123,30 +123,30 @@ if test -n "${COMMONPAGESIZE}"; then DATA_SEGMENT_RELRO_END=". = DATA_SEGMENT_RELRO_END (${SEPARATE_GOTPLT-0}, .);" fi if test -z "${INITIAL_READONLY_SECTIONS}${CREATE_SHLIB}"; then - INITIAL_READONLY_SECTIONS=".interp ${RELOCATING-0} : { *(.interp) }" + INITIAL_READONLY_SECTIONS=".interp : { *(.interp) }" fi if test -z "$PLT"; then - PLT=".plt ${RELOCATING-0} : { *(.plt) }" + PLT=".plt : { *(.plt) }" fi test -n "${DATA_PLT-${BSS_PLT-text}}" && TEXT_PLT=yes if test -z "$GOT"; then if test -z "$SEPARATE_GOTPLT"; then - GOT=".got ${RELOCATING-0} : { *(.got.plt) *(.got) }" + GOT=".got : { *(.got.plt) *(.got) }" else - GOT=".got ${RELOCATING-0} : { *(.got) }" - GOTPLT=".got.plt ${RELOCATING-0} : { *(.got.plt) }" + GOT=".got : { *(.got) }" + GOTPLT=".got.plt : { *(.got.plt) }" fi fi -DYNAMIC=".dynamic ${RELOCATING-0} : { *(.dynamic) }" -RODATA=".rodata ${RELOCATING-0} : { *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.*}) }" +DYNAMIC=".dynamic : { *(.dynamic) }" +RODATA=".rodata : { *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.*}) }" DATARELRO=".data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) }" DISCARDED="/DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }" -INIT_LIT=".init.literal 0 : { *(.init.literal) }" -INIT=".init 0 : { *(.init) }" -FINI_LIT=".fini.literal 0 : { *(.fini.literal) }" -FINI=".fini 0 : { *(.fini) }" +INIT_LIT=".init.literal : { *(.init.literal) }" +INIT=".init : { *(.init) }" +FINI_LIT=".fini.literal : { *(.fini.literal) }" +FINI=".fini : { *(.fini) }" if test -z "${NO_SMALL_DATA}"; then - SBSS=".sbss ${RELOCATING-0} : + SBSS=".sbss : { ${RELOCATING+${SBSS_START_SYMBOLS}} ${CREATE_SHLIB+*(.sbss2 .sbss2.* .gnu.linkonce.sb2.*)} @@ -155,29 +155,29 @@ if test -z "${NO_SMALL_DATA}"; then *(.scommon) ${RELOCATING+${SBSS_END_SYMBOLS}} }" - SBSS2=".sbss2 ${RELOCATING-0} : { *(.sbss2${RELOCATING+ .sbss2.* .gnu.linkonce.sb2.*}) }" + SBSS2=".sbss2 : { *(.sbss2${RELOCATING+ .sbss2.* .gnu.linkonce.sb2.*}) }" SDATA="/* 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 ${RELOCATING-0} : + .sdata : { ${RELOCATING+${SDATA_START_SYMBOLS}} ${CREATE_SHLIB+*(.sdata2 .sdata2.* .gnu.linkonce.s2.*)} *(.sdata${RELOCATING+ .sdata.* .gnu.linkonce.s.*}) }" - SDATA2=".sdata2 ${RELOCATING-0} : + SDATA2=".sdata2 : { ${RELOCATING+${SDATA2_START_SYMBOLS}} *(.sdata2${RELOCATING+ .sdata2.* .gnu.linkonce.s2.*}) }" - REL_SDATA=".rel.sdata ${RELOCATING-0} : { *(.rel.sdata${RELOCATING+ .rel.sdata.* .rel.gnu.linkonce.s.*}) } - .rela.sdata ${RELOCATING-0} : { *(.rela.sdata${RELOCATING+ .rela.sdata.* .rela.gnu.linkonce.s.*}) }" - REL_SBSS=".rel.sbss ${RELOCATING-0} : { *(.rel.sbss${RELOCATING+ .rel.sbss.* .rel.gnu.linkonce.sb.*}) } - .rela.sbss ${RELOCATING-0} : { *(.rela.sbss${RELOCATING+ .rela.sbss.* .rela.gnu.linkonce.sb.*}) }" - REL_SDATA2=".rel.sdata2 ${RELOCATING-0} : { *(.rel.sdata2${RELOCATING+ .rel.sdata2.* .rel.gnu.linkonce.s2.*}) } - .rela.sdata2 ${RELOCATING-0} : { *(.rela.sdata2${RELOCATING+ .rela.sdata2.* .rela.gnu.linkonce.s2.*}) }" - REL_SBSS2=".rel.sbss2 ${RELOCATING-0} : { *(.rel.sbss2${RELOCATING+ .rel.sbss2.* .rel.gnu.linkonce.sb2.*}) } - .rela.sbss2 ${RELOCATING-0} : { *(.rela.sbss2${RELOCATING+ .rela.sbss2.* .rela.gnu.linkonce.sb2.*}) }" + REL_SDATA=".rel.sdata : { *(.rel.sdata${RELOCATING+ .rel.sdata.* .rel.gnu.linkonce.s.*}) } + .rela.sdata : { *(.rela.sdata${RELOCATING+ .rela.sdata.* .rela.gnu.linkonce.s.*}) }" + REL_SBSS=".rel.sbss : { *(.rel.sbss${RELOCATING+ .rel.sbss.* .rel.gnu.linkonce.sb.*}) } + .rela.sbss : { *(.rela.sbss${RELOCATING+ .rela.sbss.* .rela.gnu.linkonce.sb.*}) }" + REL_SDATA2=".rel.sdata2 : { *(.rel.sdata2${RELOCATING+ .rel.sdata2.* .rel.gnu.linkonce.s2.*}) } + .rela.sdata2 : { *(.rela.sdata2${RELOCATING+ .rela.sdata2.* .rela.gnu.linkonce.s2.*}) }" + REL_SBSS2=".rel.sbss2 : { *(.rel.sbss2${RELOCATING+ .rel.sbss2.* .rel.gnu.linkonce.sb2.*}) } + .rela.sbss2 : { *(.rela.sbss2${RELOCATING+ .rela.sbss2.* .rela.gnu.linkonce.sb2.*}) }" else NO_SMALL_DATA=" " fi @@ -193,31 +193,31 @@ if test -z "${SDATA_GOT}"; then fi test -n "$SEPARATE_GOTPLT" && SEPARATE_GOTPLT=" " test "${LARGE_SECTIONS}" = "yes" && REL_LARGE=" - .rel.ldata ${RELOCATING-0} : { *(.rel.ldata${RELOCATING+ .rel.ldata.* .rel.gnu.linkonce.l.*}) } - .rela.ldata ${RELOCATING-0} : { *(.rela.ldata${RELOCATING+ .rela.ldata.* .rela.gnu.linkonce.l.*}) } - .rel.lbss ${RELOCATING-0} : { *(.rel.lbss${RELOCATING+ .rel.lbss.* .rel.gnu.linkonce.lb.*}) } - .rela.lbss ${RELOCATING-0} : { *(.rela.lbss${RELOCATING+ .rela.lbss.* .rela.gnu.linkonce.lb.*}) } - .rel.lrodata ${RELOCATING-0} : { *(.rel.lrodata${RELOCATING+ .rel.lrodata.* .rel.gnu.linkonce.lr.*}) } - .rela.lrodata ${RELOCATING-0} : { *(.rela.lrodata${RELOCATING+ .rela.lrodata.* .rela.gnu.linkonce.lr.*}) }" + .rel.ldata : { *(.rel.ldata${RELOCATING+ .rel.ldata.* .rel.gnu.linkonce.l.*}) } + .rela.ldata : { *(.rela.ldata${RELOCATING+ .rela.ldata.* .rela.gnu.linkonce.l.*}) } + .rel.lbss : { *(.rel.lbss${RELOCATING+ .rel.lbss.* .rel.gnu.linkonce.lb.*}) } + .rela.lbss : { *(.rela.lbss${RELOCATING+ .rela.lbss.* .rela.gnu.linkonce.lb.*}) } + .rel.lrodata : { *(.rel.lrodata${RELOCATING+ .rel.lrodata.* .rel.gnu.linkonce.lr.*}) } + .rela.lrodata : { *(.rela.lrodata${RELOCATING+ .rela.lrodata.* .rela.gnu.linkonce.lr.*}) }" test "${LARGE_SECTIONS}" = "yes" && OTHER_BSS_SECTIONS=" ${OTHER_BSS_SECTIONS} - .lbss ${RELOCATING-0} : + .lbss : { *(.dynlbss) *(.lbss${RELOCATING+ .lbss.* .gnu.linkonce.lb.*}) *(LARGE_COMMON) }" test "${LARGE_SECTIONS}" = "yes" && LARGE_SECTIONS=" - .lrodata ${RELOCATING-0} ${RELOCATING+ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))} : + .lrodata ${RELOCATING+ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))} : { *(.lrodata${RELOCATING+ .lrodata.* .gnu.linkonce.lr.*}) } - .ldata ${RELOCATING-0} ${RELOCATING+ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))} : + .ldata ${RELOCATING+ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))} : { *(.ldata${RELOCATING+ .ldata.* .gnu.linkonce.l.*}) ${RELOCATING+. = ALIGN(. != 0 ? ${ALIGNMENT} : 1);} }" -CTOR=".ctors ${CONSTRUCTING-0} : +CTOR=".ctors : { ${CONSTRUCTING+${CTOR_START}} /* gcc uses crtbegin.o to find the start of @@ -243,7 +243,7 @@ CTOR=".ctors ${CONSTRUCTING-0} : KEEP (*(.ctors)) ${CONSTRUCTING+${CTOR_END}} }" -DTOR=".dtors ${CONSTRUCTING-0} : +DTOR=".dtors : { ${CONSTRUCTING+${DTOR_START}} KEEP (*crtbegin.o(.dtors)) @@ -253,7 +253,7 @@ DTOR=".dtors ${CONSTRUCTING-0} : KEEP (*(.dtors)) ${CONSTRUCTING+${DTOR_END}} }" -STACK=" .stack ${RELOCATING-0}${RELOCATING+${STACK_ADDR}} : +STACK=" .stack ${RELOCATING+${STACK_ADDR}} : { ${RELOCATING+_stack = .;} *(.stack) @@ -272,10 +272,6 @@ ${RELOCATING+ENTRY(${ENTRY})} ${RELOCATING+${LIB_SEARCH_DIRS}} ${RELOCATING+${EXECUTABLE_SYMBOLS}} ${RELOCATING+${INPUT_FILES}} -${RELOCATING- /* For some reason, the Solaris linker makes bad executables - if gld -r is used and the intermediate file has sections starting - at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld - bug. But for now assigning the zero vmas works. */} SECTIONS { @@ -291,13 +287,13 @@ test -n "${RELOCATING+0}" || unset NON_ALLOC_DYN test -z "${NON_ALLOC_DYN}" || TEXT_DYNAMIC= cat > ldscripts/dyntmp.$$ <<EOF ${TEXT_DYNAMIC+${DYNAMIC}} - .hash ${RELOCATING-0} : { *(.hash) } - .gnu.hash ${RELOCATING-0} : { *(.gnu.hash) } - .dynsym ${RELOCATING-0} : { *(.dynsym) } - .dynstr ${RELOCATING-0} : { *(.dynstr) } - .gnu.version ${RELOCATING-0} : { *(.gnu.version) } - .gnu.version_d ${RELOCATING-0}: { *(.gnu.version_d) } - .gnu.version_r ${RELOCATING-0}: { *(.gnu.version_r) } + .hash : { *(.hash) } + .gnu.hash : { *(.gnu.hash) } + .dynsym : { *(.dynsym) } + .dynstr : { *(.dynstr) } + .gnu.version : { *(.gnu.version) } + .gnu.version_d : { *(.gnu.version_d) } + .gnu.version_r : { *(.gnu.version_r) } EOF if [ "x$COMBRELOC" = x ]; then @@ -306,48 +302,48 @@ else COMBRELOCCAT="cat > $COMBRELOC" fi eval $COMBRELOCCAT <<EOF - .rel.init ${RELOCATING-0} : { *(.rel.init) } - .rela.init ${RELOCATING-0} : { *(.rela.init) } - .rel.text ${RELOCATING-0} : { *(.rel.text${RELOCATING+ .rel.text.* .rel.gnu.linkonce.t.*}) } - .rela.text ${RELOCATING-0} : { *(.rela.text${RELOCATING+ .rela.text.* .rela.gnu.linkonce.t.*}) } - .rel.fini ${RELOCATING-0} : { *(.rel.fini) } - .rela.fini ${RELOCATING-0} : { *(.rela.fini) } - .rel.rodata ${RELOCATING-0} : { *(.rel.rodata${RELOCATING+ .rel.rodata.* .rel.gnu.linkonce.r.*}) } - .rela.rodata ${RELOCATING-0} : { *(.rela.rodata${RELOCATING+ .rela.rodata.* .rela.gnu.linkonce.r.*}) } + .rel.init : { *(.rel.init) } + .rela.init : { *(.rela.init) } + .rel.text : { *(.rel.text${RELOCATING+ .rel.text.* .rel.gnu.linkonce.t.*}) } + .rela.text : { *(.rela.text${RELOCATING+ .rela.text.* .rela.gnu.linkonce.t.*}) } + .rel.fini : { *(.rel.fini) } + .rela.fini : { *(.rela.fini) } + .rel.rodata : { *(.rel.rodata${RELOCATING+ .rel.rodata.* .rel.gnu.linkonce.r.*}) } + .rela.rodata : { *(.rela.rodata${RELOCATING+ .rela.rodata.* .rela.gnu.linkonce.r.*}) } ${OTHER_READONLY_RELOC_SECTIONS} - .rel.data.rel.ro ${RELOCATING-0} : { *(.rel.data.rel.ro${RELOCATING+* .rel.gnu.linkonce.d.rel.ro.*}) } - .rela.data.rel.ro ${RELOCATING-0} : { *(.rela.data.rel.ro${RELOCATING+* .rela.gnu.linkonce.d.rel.ro.*}) } - .rel.data ${RELOCATING-0} : { *(.rel.data${RELOCATING+ .rel.data.* .rel.gnu.linkonce.d.*}) } - .rela.data ${RELOCATING-0} : { *(.rela.data${RELOCATING+ .rela.data.* .rela.gnu.linkonce.d.*}) } - .rel.tdata ${RELOCATING-0} : { *(.rel.tdata${RELOCATING+ .rel.tdata.* .rel.gnu.linkonce.td.*}) } - .rela.tdata ${RELOCATING-0} : { *(.rela.tdata${RELOCATING+ .rela.tdata.* .rela.gnu.linkonce.td.*}) } - .rel.tbss ${RELOCATING-0} : { *(.rel.tbss${RELOCATING+ .rel.tbss.* .rel.gnu.linkonce.tb.*}) } - .rela.tbss ${RELOCATING-0} : { *(.rela.tbss${RELOCATING+ .rela.tbss.* .rela.gnu.linkonce.tb.*}) } - .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) } - .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) } - .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) } - .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) } - .rel.got ${RELOCATING-0} : { *(.rel.got) } - .rela.got ${RELOCATING-0} : { *(.rela.got) } + .rel.data.rel.ro : { *(.rel.data.rel.ro${RELOCATING+* .rel.gnu.linkonce.d.rel.ro.*}) } + .rela.data.rel.ro : { *(.rela.data.rel.ro${RELOCATING+* .rela.gnu.linkonce.d.rel.ro.*}) } + .rel.data : { *(.rel.data${RELOCATING+ .rel.data.* .rel.gnu.linkonce.d.*}) } + .rela.data : { *(.rela.data${RELOCATING+ .rela.data.* .rela.gnu.linkonce.d.*}) } + .rel.tdata : { *(.rel.tdata${RELOCATING+ .rel.tdata.* .rel.gnu.linkonce.td.*}) } + .rela.tdata : { *(.rela.tdata${RELOCATING+ .rela.tdata.* .rela.gnu.linkonce.td.*}) } + .rel.tbss : { *(.rel.tbss${RELOCATING+ .rel.tbss.* .rel.gnu.linkonce.tb.*}) } + .rela.tbss : { *(.rela.tbss${RELOCATING+ .rela.tbss.* .rela.gnu.linkonce.tb.*}) } + .rel.ctors : { *(.rel.ctors) } + .rela.ctors : { *(.rela.ctors) } + .rel.dtors : { *(.rel.dtors) } + .rela.dtors : { *(.rela.dtors) } + .rel.got : { *(.rel.got) } + .rela.got : { *(.rela.got) } ${OTHER_GOT_RELOC_SECTIONS} ${REL_SDATA} ${REL_SBSS} ${REL_SDATA2} ${REL_SBSS2} - .rel.bss ${RELOCATING-0} : { *(.rel.bss${RELOCATING+ .rel.bss.* .rel.gnu.linkonce.b.*}) } - .rela.bss ${RELOCATING-0} : { *(.rela.bss${RELOCATING+ .rela.bss.* .rela.gnu.linkonce.b.*}) } + .rel.bss : { *(.rel.bss${RELOCATING+ .rel.bss.* .rel.gnu.linkonce.b.*}) } + .rela.bss : { *(.rela.bss${RELOCATING+ .rela.bss.* .rela.gnu.linkonce.b.*}) } ${REL_LARGE} EOF if [ -n "$COMBRELOC" ]; then cat >> ldscripts/dyntmp.$$ <<EOF - .rel.dyn ${RELOCATING-0} : + .rel.dyn : { EOF sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rela\./d;s/^.*: { *\(.*\)}$/ \1/' $COMBRELOC >> ldscripts/dyntmp.$$ cat >> ldscripts/dyntmp.$$ <<EOF } - .rela.dyn ${RELOCATING-0} : + .rela.dyn : { EOF sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rel\./d;s/^.*: { *\(.*\)}/ \1/' $COMBRELOC >> ldscripts/dyntmp.$$ @@ -357,8 +353,8 @@ EOF fi cat >> ldscripts/dyntmp.$$ <<EOF - .rel.plt ${RELOCATING-0} : { *(.rel.plt) } - .rela.plt ${RELOCATING-0} : { *(.rela.plt) } + .rel.plt : { *(.rel.plt) } + .rela.plt : { *(.rela.plt) } ${OTHER_PLT_RELOC_SECTIONS} EOF @@ -382,7 +378,7 @@ cat <<EOF ${TEXT_PLT+${PLT}} ${TINY_READONLY_SECTION} - .text ${RELOCATING-0} : + .text : { *(.got.plt* .plt*) @@ -410,13 +406,13 @@ cat <<EOF ${RELOCATING+PROVIDE (_${ETEXT_NAME} = .);} ${RELOCATING+PROVIDE (${ETEXT_NAME} = .);} ${WRITABLE_RODATA-${RODATA}} - .rodata1 ${RELOCATING-0} : { *(.rodata1) } + .rodata1 : { *(.rodata1) } ${CREATE_SHLIB-${SDATA2}} ${CREATE_SHLIB-${SBSS2}} ${OTHER_READONLY_SECTIONS} .eh_frame_hdr : { *(.eh_frame_hdr) } - .eh_frame ${RELOCATING-0} : ONLY_IF_RO { KEEP (*(.eh_frame)) } - .gcc_except_table ${RELOCATING-0} : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } + .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) } + .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ @@ -425,27 +421,27 @@ cat <<EOF ${CREATE_PIE+${RELOCATING+. = ${SHLIB_DATA_ADDR-${DATA_SEGMENT_ALIGN}};}} /* Exception handling */ - .eh_frame ${RELOCATING-0} : ONLY_IF_RW { KEEP (*(.eh_frame)) } - .gcc_except_table ${RELOCATING-0} : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } + .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) } + .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } /* Thread Local Storage sections */ - .tdata ${RELOCATING-0} : { *(.tdata${RELOCATING+ .tdata.* .gnu.linkonce.td.*}) } - .tbss ${RELOCATING-0} : { *(.tbss${RELOCATING+ .tbss.* .gnu.linkonce.tb.*})${RELOCATING+ *(.tcommon)} } + .tdata : { *(.tdata${RELOCATING+ .tdata.* .gnu.linkonce.td.*}) } + .tbss : { *(.tbss${RELOCATING+ .tbss.* .gnu.linkonce.tb.*})${RELOCATING+ *(.tcommon)} } - .preinit_array ${RELOCATING-0} : + .preinit_array : { ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__preinit_array_start = .);}} KEEP (*(.preinit_array)) ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__preinit_array_end = .);}} } - .init_array ${RELOCATING-0} : + .init_array : { ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_start = .);}} KEEP (*(SORT(.init_array.*))) KEEP (*(.init_array)) ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_end = .);}} } - .fini_array ${RELOCATING-0} : + .fini_array : { ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_start = .);}} KEEP (*(.fini_array)) @@ -454,7 +450,7 @@ cat <<EOF } ${SMALL_DATA_CTOR-${RELOCATING+${CTOR}}} ${SMALL_DATA_DTOR-${RELOCATING+${DTOR}}} - .jcr ${RELOCATING-0} : { KEEP (*(.jcr)) } + .jcr : { KEEP (*(.jcr)) } ${RELOCATING+${DATARELRO}} ${OTHER_RELRO_SECTIONS} @@ -468,13 +464,13 @@ cat <<EOF ${DATA_PLT+${PLT_BEFORE_GOT-${PLT}}} - .data ${RELOCATING-0} : + .data : { ${RELOCATING+${DATA_START_SYMBOLS}} *(.data${RELOCATING+ .data.* .gnu.linkonce.d.*}) ${CONSTRUCTING+SORT(CONSTRUCTORS)} } - .data1 ${RELOCATING-0} : { *(.data1) } + .data1 : { *(.data1) } ${WRITABLE_RODATA+${RODATA}} ${OTHER_READWRITE_SECTIONS} ${SMALL_DATA_CTOR+${RELOCATING+${CTOR}}} @@ -490,7 +486,7 @@ cat <<EOF ${RELOCATING+${OTHER_BSS_SYMBOLS}} ${SBSS} ${BSS_PLT+${PLT}} - .bss ${RELOCATING-0} : + .bss : { *(.dynbss) *(.bss${RELOCATING+ .bss.* .gnu.linkonce.b.*}) diff --git a/ld/scripttempl/iq2000.sc b/ld/scripttempl/iq2000.sc index e571a58..e9b2560 100644 --- a/ld/scripttempl/iq2000.sc +++ b/ld/scripttempl/iq2000.sc @@ -64,13 +64,13 @@ if [ -z "$MACHINE" ]; then OUTPUT_ARCH=${ARCH}; else OUTPUT_ARCH=${ARCH}:${MACHI test -z "${ELFSIZE}" && ELFSIZE=32 test -z "${ALIGNMENT}" && ALIGNMENT="${ELFSIZE} / 8" test "$LD_FLAG" = "N" && DATA_ADDR=. -INTERP=".interp ${RELOCATING-0} : { *(.interp) }" -PLT=".plt ${RELOCATING-0} : { *(.plt) }" -DYNAMIC=".dynamic ${RELOCATING-0} : { *(.dynamic) }" -RODATA=".rodata ${RELOCATING-0} : { *(.rodata) ${RELOCATING+*(.rodata.*)} ${RELOCATING+*(.gnu.linkonce.r.*)} }" -SBSS2=".sbss2 ${RELOCATING-0} : { *(.sbss2) ${RELOCATING+*(.sbss2.*)} ${RELOCATING+*(.gnu.linkonce.sb2.*)} }" -SDATA2=".sdata2 ${RELOCATING-0} : { *(.sdata2) ${RELOCATING+*(.sdata2.*)} ${RELOCATING+*(.gnu.linkonce.s2.*)} }" -CTOR=".ctors ${CONSTRUCTING-0} : +INTERP=".interp : { *(.interp) }" +PLT=".plt : { *(.plt) }" +DYNAMIC=".dynamic : { *(.dynamic) }" +RODATA=".rodata : { *(.rodata) ${RELOCATING+*(.rodata.*)} ${RELOCATING+*(.gnu.linkonce.r.*)} }" +SBSS2=".sbss2 : { *(.sbss2) ${RELOCATING+*(.sbss2.*)} ${RELOCATING+*(.gnu.linkonce.sb2.*)} }" +SDATA2=".sdata2 : { *(.sdata2) ${RELOCATING+*(.sdata2.*)} ${RELOCATING+*(.gnu.linkonce.s2.*)} }" +CTOR=".ctors : { ${CONSTRUCTING+${CTOR_START}} /* gcc uses crtbegin.o to find the start of @@ -97,7 +97,7 @@ CTOR=".ctors ${CONSTRUCTING-0} : ${CONSTRUCTING+${CTOR_END}} }" -DTOR=" .dtors ${CONSTRUCTING-0} : +DTOR=" .dtors : { ${CONSTRUCTING+${DTOR_START}} KEEP (*crtbegin.o(.dtors)) @@ -126,10 +126,6 @@ ${RELOCATING+/* Do we need any of these for elf? __DYNAMIC = 0; ${STACKZERO+${STACKZERO}} ${SHLIB_PATH+${SHLIB_PATH}} */} ${RELOCATING+${EXECUTABLE_SYMBOLS}} ${RELOCATING+${INPUT_FILES}} -${RELOCATING- /* For some reason, the Solaris linker makes bad executables - if gld -r is used and the intermediate file has sections starting - at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld - bug. But for now assigning the zero vmas works. */} SECTIONS { @@ -145,109 +141,109 @@ else COMBRELOCCAT="cat > $COMBRELOC" fi eval $COMBRELOCCAT <<EOF - .rel.init ${RELOCATING-0} : { *(.rel.init) } - .rela.init ${RELOCATING-0} : { *(.rela.init) } - .rel.text ${RELOCATING-0} : + .rel.init : { *(.rel.init) } + .rela.init : { *(.rela.init) } + .rel.text : { *(.rel.text) ${RELOCATING+*(.rel.text.*)} ${RELOCATING+*(.rel.gnu.linkonce.t.*)} } - .rela.text ${RELOCATING-0} : + .rela.text : { *(.rela.text) ${RELOCATING+*(.rela.text.*)} ${RELOCATING+*(.rela.gnu.linkonce.t.*)} } - .rel.fini ${RELOCATING-0} : { *(.rel.fini) } - .rela.fini ${RELOCATING-0} : { *(.rela.fini) } - .rel.rodata ${RELOCATING-0} : + .rel.fini : { *(.rel.fini) } + .rela.fini : { *(.rela.fini) } + .rel.rodata : { *(.rel.rodata) ${RELOCATING+*(.rel.rodata.*)} ${RELOCATING+*(.rel.gnu.linkonce.r.*)} } - .rela.rodata ${RELOCATING-0} : + .rela.rodata : { *(.rela.rodata) ${RELOCATING+*(.rela.rodata.*)} ${RELOCATING+*(.rela.gnu.linkonce.r.*)} } ${OTHER_READONLY_RELOC_SECTIONS} - .rel.data ${RELOCATING-0} : + .rel.data : { *(.rel.data) ${RELOCATING+*(.rel.data.*)} ${RELOCATING+*(.rel.gnu.linkonce.d.*)} } - .rela.data ${RELOCATING-0} : + .rela.data : { *(.rela.data) ${RELOCATING+*(.rela.data.*)} ${RELOCATING+*(.rela.gnu.linkonce.d.*)} } - .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) } - .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) } - .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) } - .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) } - .rel.got ${RELOCATING-0} : { *(.rel.got) } - .rela.got ${RELOCATING-0} : { *(.rela.got) } + .rel.ctors : { *(.rel.ctors) } + .rela.ctors : { *(.rela.ctors) } + .rel.dtors : { *(.rel.dtors) } + .rela.dtors : { *(.rela.dtors) } + .rel.got : { *(.rel.got) } + .rela.got : { *(.rela.got) } ${OTHER_GOT_RELOC_SECTIONS} - .rel.sdata ${RELOCATING-0} : + .rel.sdata : { *(.rel.sdata) ${RELOCATING+*(.rel.sdata.*)} ${RELOCATING+*(.rel.gnu.linkonce.s.*)} } - .rela.sdata ${RELOCATING-0} : + .rela.sdata : { *(.rela.sdata) ${RELOCATING+*(.rela.sdata.*)} ${RELOCATING+*(.rela.gnu.linkonce.s.*)} } - .rel.sbss ${RELOCATING-0} : + .rel.sbss : { *(.rel.sbss) ${RELOCATING+*(.rel.sbss.*)} ${RELOCATING+*(.rel.gnu.linkonce.sb.*)} } - .rela.sbss ${RELOCATING-0} : + .rela.sbss : { *(.rela.sbss) ${RELOCATING+*(.rela.sbss.*)} ${RELOCATING+*(.rela.gnu.linkonce.sb.*)} } - .rel.sdata2 ${RELOCATING-0} : + .rel.sdata2 : { *(.rel.sdata2) ${RELOCATING+*(.rel.sdata2.*)} ${RELOCATING+*(.rel.gnu.linkonce.s2.*)} } - .rela.sdata2 ${RELOCATING-0} : + .rela.sdata2 : { *(.rela.sdata2) ${RELOCATING+*(.rela.sdata2.*)} ${RELOCATING+*(.rela.gnu.linkonce.s2.*)} } - .rel.sbss2 ${RELOCATING-0} : + .rel.sbss2 : { *(.rel.sbss2) ${RELOCATING+*(.rel.sbss2.*)} ${RELOCATING+*(.rel.gnu.linkonce.sb2.*)} } - .rela.sbss2 ${RELOCATING-0} : + .rela.sbss2 : { *(.rela.sbss2) ${RELOCATING+*(.rela.sbss2.*)} ${RELOCATING+*(.rela.gnu.linkonce.sb2.*)} } - .rel.bss ${RELOCATING-0} : + .rel.bss : { *(.rel.bss) ${RELOCATING+*(.rel.bss.*)} ${RELOCATING+*(.rel.gnu.linkonce.b.*)} } - .rela.bss ${RELOCATING-0} : + .rela.bss : { *(.rela.bss) ${RELOCATING+*(.rela.bss.*)} @@ -271,11 +267,11 @@ cat <<EOF EOF fi cat <<EOF - .rel.plt ${RELOCATING-0} : { *(.rel.plt) } - .rela.plt ${RELOCATING-0} : { *(.rela.plt) } + .rel.plt : { *(.rel.plt) } + .rela.plt : { *(.rela.plt) } ${OTHER_PLT_RELOC_SECTIONS} - .init ${RELOCATING-0} : + .init : { ${RELOCATING+${INIT_START}} KEEP (*(.init)) @@ -283,7 +279,7 @@ cat <<EOF } =${NOP-0} ${DATA_PLT-${BSS_PLT-${PLT}}} - .text ${RELOCATING-0} : + .text : { ${RELOCATING+${TEXT_START_SYMBOLS}} *(.text) @@ -294,7 +290,7 @@ cat <<EOF ${RELOCATING+*(.gnu.linkonce.t.*)} ${RELOCATING+${OTHER_TEXT_SECTIONS}} } =${NOP-0} - .fini ${RELOCATING-0} : + .fini : { ${RELOCATING+${FINI_START}} KEEP (*(.fini)) @@ -309,7 +305,7 @@ cat <<EOF ${CREATE_SHLIB-${RELOCATING+. = ${DATA_ADDR-ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))};}} ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_DATA_ADDR-ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))};}} - .data ${RELOCATING-0} : + .data : { ${RELOCATING+${DATA_START_SYMBOLS}} *(.data) @@ -317,8 +313,8 @@ cat <<EOF ${RELOCATING+*(.gnu.linkonce.d.*)} ${CONSTRUCTING+SORT(CONSTRUCTORS)} } - .data1 ${RELOCATING-0} : { *(.data1) } - .eh_frame ${RELOCATING-0} : + .data1 : { *(.data1) } + .eh_frame : { ${RELOCATING+PROVIDE (__eh_frame_begin = .);} *(.eh_frame) @@ -327,14 +323,14 @@ cat <<EOF } ${RELOCATING+} .gcc_except_table : { *(.gcc_except_table) } ${INITIAL_READONLY_SECTIONS} - .hash ${RELOCATING-0} : { *(.hash) } - .dynsym ${RELOCATING-0} : { *(.dynsym) } - .dynstr ${RELOCATING-0} : { *(.dynstr) } - .gnu.version ${RELOCATING-0} : { *(.gnu.version) } - .gnu.version_d ${RELOCATING-0} : { *(.gnu.version_d) } - .gnu.version_r ${RELOCATING-0} : { *(.gnu.version_r) } + .hash : { *(.hash) } + .dynsym : { *(.dynsym) } + .dynstr : { *(.dynstr) } + .gnu.version : { *(.gnu.version) } + .gnu.version_d : { *(.gnu.version_d) } + .gnu.version_r : { *(.gnu.version_r) } ${RODATA} - .rodata1 ${RELOCATING-0} : { *(.rodata1) } + .rodata1 : { *(.rodata1) } ${CREATE_SHLIB-${SDATA2}} ${CREATE_SHLIB-${SBSS2}} ${RELOCATING+${OTHER_READONLY_SECTIONS}} @@ -345,14 +341,14 @@ cat <<EOF .jcr : { KEEP (*(.jcr)) } ${DATA_PLT+${PLT}} ${RELOCATING+${OTHER_GOT_SYMBOLS}} - .got ${RELOCATING-0} : { *(.got.plt) *(.got) } + .got : { *(.got.plt) *(.got) } ${RELOCATING+${OTHER_GOT_SECTIONS}} ${CREATE_SHLIB+${SDATA2}} ${CREATE_SHLIB+${SBSS2}} /* 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 ${RELOCATING-0} : + .sdata : { ${RELOCATING+${SDATA_START_SYMBOLS}} *(.sdata) @@ -364,7 +360,7 @@ cat <<EOF ${RELOCATING+PROVIDE (edata = .);} ${RELOCATING+__bss_start = .;} ${RELOCATING+${OTHER_BSS_SYMBOLS}} - .sbss ${RELOCATING-0} : + .sbss : { ${RELOCATING+PROVIDE (__sbss_start = .);} ${RELOCATING+PROVIDE (___sbss_start = .);} @@ -377,7 +373,7 @@ cat <<EOF ${RELOCATING+PROVIDE (___sbss_end = .);} } ${BSS_PLT+${PLT}} - .bss ${RELOCATING-0} : + .bss : { *(.dynbss) *(.bss) diff --git a/ld/scripttempl/mep.sc b/ld/scripttempl/mep.sc index e61342d..9b9fa4e 100644 --- a/ld/scripttempl/mep.sc +++ b/ld/scripttempl/mep.sc @@ -100,23 +100,23 @@ if test -n "${COMMONPAGESIZE}"; then DATA_SEGMENT_RELRO_END=". = DATA_SEGMENT_RELRO_END (0, .);" fi fi -INTERP=".interp ${RELOCATING-0} : { *(.interp) }" -PLT=".plt ${RELOCATING-0} : { *(.plt) }" +INTERP=".interp : { *(.interp) }" +PLT=".plt : { *(.plt) }" if test -z "$GOT"; then if test -z "$SEPARATE_GOTPLT"; then - GOT=".got ${RELOCATING-0} : { *(.got.plt) *(.got) }" + GOT=".got : { *(.got.plt) *(.got) }" else - GOT=".got ${RELOCATING-0} : { *(.got) }" + GOT=".got : { *(.got) }" GOTPLT="${RELOCATING+${DATA_SEGMENT_RELRO_GOTPLT_END}} - .got.plt ${RELOCATING-0} : { *(.got.plt) }" + .got.plt : { *(.got.plt) }" fi fi -DYNAMIC=".dynamic ${RELOCATING-0} : { *(.dynamic) }" -RODATA=".rodata ${RELOCATING-0} : { *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.*}) }" +DYNAMIC=".dynamic : { *(.dynamic) }" +RODATA=".rodata : { *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.*}) }" DATARELRO=".data.rel.ro : { *(.data.rel.ro.local) *(.data.rel.ro*) }" DISCARDED="/DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }" if test -z "${NO_SMALL_DATA}"; then - SBSS=".sbss ${RELOCATING-0} : + SBSS=".sbss : { ${RELOCATING+PROVIDE (__sbss_start = .);} ${RELOCATING+PROVIDE (___sbss_start = .);} @@ -127,30 +127,30 @@ if test -z "${NO_SMALL_DATA}"; then ${RELOCATING+PROVIDE (__sbss_end = .);} ${RELOCATING+PROVIDE (___sbss_end = .);} }" - SBSS2=".sbss2 ${RELOCATING-0} : { *(.sbss2${RELOCATING+ .sbss2.* .gnu.linkonce.sb2.*}) }" + SBSS2=".sbss2 : { *(.sbss2${RELOCATING+ .sbss2.* .gnu.linkonce.sb2.*}) }" SDATA="/* 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 ${RELOCATING-0} : + .sdata : { ${RELOCATING+${SDATA_START_SYMBOLS}} ${CREATE_SHLIB+*(.sdata2 .sdata2.* .gnu.linkonce.s2.*)} *(.sdata${RELOCATING+ .sdata.* .gnu.linkonce.s.*}) }" - SDATA2=".sdata2 ${RELOCATING-0} : { *(.sdata2${RELOCATING+ .sdata2.* .gnu.linkonce.s2.*}) }" - REL_SDATA=".rel.sdata ${RELOCATING-0} : { *(.rel.sdata${RELOCATING+ .rel.sdata.* .rel.gnu.linkonce.s.*}) } - .rela.sdata ${RELOCATING-0} : { *(.rela.sdata${RELOCATING+ .rela.sdata.* .rela.gnu.linkonce.s.*}) }" - REL_SBSS=".rel.sbss ${RELOCATING-0} : { *(.rel.sbss${RELOCATING+ .rel.sbss.* .rel.gnu.linkonce.sb.*}) } - .rela.sbss ${RELOCATING-0} : { *(.rela.sbss${RELOCATING+ .rela.sbss.* .rela.gnu.linkonce.sb.*}) }" - REL_SDATA2=".rel.sdata2 ${RELOCATING-0} : { *(.rel.sdata2${RELOCATING+ .rel.sdata2.* .rel.gnu.linkonce.s2.*}) } - .rela.sdata2 ${RELOCATING-0} : { *(.rela.sdata2${RELOCATING+ .rela.sdata2.* .rela.gnu.linkonce.s2.*}) }" - REL_SBSS2=".rel.sbss2 ${RELOCATING-0} : { *(.rel.sbss2${RELOCATING+ .rel.sbss2.* .rel.gnu.linkonce.sb2.*}) } - .rela.sbss2 ${RELOCATING-0} : { *(.rela.sbss2${RELOCATING+ .rela.sbss2.* .rela.gnu.linkonce.sb2.*}) }" + SDATA2=".sdata2 : { *(.sdata2${RELOCATING+ .sdata2.* .gnu.linkonce.s2.*}) }" + REL_SDATA=".rel.sdata : { *(.rel.sdata${RELOCATING+ .rel.sdata.* .rel.gnu.linkonce.s.*}) } + .rela.sdata : { *(.rela.sdata${RELOCATING+ .rela.sdata.* .rela.gnu.linkonce.s.*}) }" + REL_SBSS=".rel.sbss : { *(.rel.sbss${RELOCATING+ .rel.sbss.* .rel.gnu.linkonce.sb.*}) } + .rela.sbss : { *(.rela.sbss${RELOCATING+ .rela.sbss.* .rela.gnu.linkonce.sb.*}) }" + REL_SDATA2=".rel.sdata2 : { *(.rel.sdata2${RELOCATING+ .rel.sdata2.* .rel.gnu.linkonce.s2.*}) } + .rela.sdata2 : { *(.rela.sdata2${RELOCATING+ .rela.sdata2.* .rela.gnu.linkonce.s2.*}) }" + REL_SBSS2=".rel.sbss2 : { *(.rel.sbss2${RELOCATING+ .rel.sbss2.* .rel.gnu.linkonce.sb2.*}) } + .rela.sbss2 : { *(.rela.sbss2${RELOCATING+ .rela.sbss2.* .rela.gnu.linkonce.sb2.*}) }" else NO_SMALL_DATA=" " fi test -n "$SEPARATE_GOTPLT" && SEPARATE_GOTPLT=" " -CTOR=".ctors ${CONSTRUCTING-0} : +CTOR=".ctors : { ${CONSTRUCTING+${CTOR_START}} /* gcc uses crtbegin.o to find the start of @@ -175,7 +175,7 @@ CTOR=".ctors ${CONSTRUCTING-0} : KEEP (*(.ctors)) ${CONSTRUCTING+${CTOR_END}} }" -DTOR=".dtors ${CONSTRUCTING-0} : +DTOR=".dtors : { ${CONSTRUCTING+${DTOR_START}} KEEP (*crtbegin*.o(.dtors)) @@ -184,7 +184,7 @@ DTOR=".dtors ${CONSTRUCTING-0} : KEEP (*(.dtors)) ${CONSTRUCTING+${DTOR_END}} }" -STACK=" .stack ${RELOCATING-0}${RELOCATING+${STACK_ADDR}} : +STACK=" .stack ${RELOCATING+${STACK_ADDR}} : { ${RELOCATING+_stack = .;} *(.stack) @@ -208,10 +208,6 @@ ${RELOCATING+/* Do we need any of these for elf? __DYNAMIC = 0; ${STACKZERO+${STACKZERO}} ${SHLIB_PATH+${SHLIB_PATH}} */} ${RELOCATING+${EXECUTABLE_SYMBOLS}} ${RELOCATING+${INPUT_FILES}} -${RELOCATING- /* For some reason, the Solaris linker makes bad executables - if gld -r is used and the intermediate file has sections starting - at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld - bug. But for now assigning the zero vmas works. */} SECTIONS { @@ -222,12 +218,12 @@ SECTIONS ${CREATE_SHLIB-${INTERP}} ${INITIAL_READONLY_SECTIONS} ${TEXT_DYNAMIC+${DYNAMIC}} - .hash ${RELOCATING-0} : { *(.hash) } - .dynsym ${RELOCATING-0} : { *(.dynsym) } - .dynstr ${RELOCATING-0} : { *(.dynstr) } - .gnu.version ${RELOCATING-0} : { *(.gnu.version) } - .gnu.version_d ${RELOCATING-0}: { *(.gnu.version_d) } - .gnu.version_r ${RELOCATING-0}: { *(.gnu.version_r) } + .hash : { *(.hash) } + .dynsym : { *(.dynsym) } + .dynstr : { *(.dynstr) } + .gnu.version : { *(.gnu.version) } + .gnu.version_d : { *(.gnu.version_d) } + .gnu.version_r : { *(.gnu.version_r) } EOF if [ "x$COMBRELOC" = x ]; then @@ -236,46 +232,46 @@ else COMBRELOCCAT="cat > $COMBRELOC" fi eval $COMBRELOCCAT <<EOF - .rel.init ${RELOCATING-0} : { *(.rel.init) } - .rela.init ${RELOCATING-0} : { *(.rela.init) } - .rel.text ${RELOCATING-0} : { *(.rel.text${RELOCATING+ .rel.text.* .rel.gnu.linkonce.t.*}) } - .rela.text ${RELOCATING-0} : { *(.rela.text${RELOCATING+ .rela.text.* .rela.gnu.linkonce.t.*}) } - .rel.fini ${RELOCATING-0} : { *(.rel.fini) } - .rela.fini ${RELOCATING-0} : { *(.rela.fini) } - .rel.rodata ${RELOCATING-0} : { *(.rel.rodata${RELOCATING+ .rel.rodata.* .rel.gnu.linkonce.r.*}) } - .rela.rodata ${RELOCATING-0} : { *(.rela.rodata${RELOCATING+ .rela.rodata.* .rela.gnu.linkonce.r.*}) } + .rel.init : { *(.rel.init) } + .rela.init : { *(.rela.init) } + .rel.text : { *(.rel.text${RELOCATING+ .rel.text.* .rel.gnu.linkonce.t.*}) } + .rela.text : { *(.rela.text${RELOCATING+ .rela.text.* .rela.gnu.linkonce.t.*}) } + .rel.fini : { *(.rel.fini) } + .rela.fini : { *(.rela.fini) } + .rel.rodata : { *(.rel.rodata${RELOCATING+ .rel.rodata.* .rel.gnu.linkonce.r.*}) } + .rela.rodata : { *(.rela.rodata${RELOCATING+ .rela.rodata.* .rela.gnu.linkonce.r.*}) } ${OTHER_READONLY_RELOC_SECTIONS} - .rel.data.rel.ro ${RELOCATING-0} : { *(.rel.data.rel.ro${RELOCATING+*}) } - .rela.data.rel.ro ${RELOCATING-0} : { *(.rel.data.rel.ro${RELOCATING+*}) } - .rel.data ${RELOCATING-0} : { *(.rel.data${RELOCATING+ .rel.data.* .rel.gnu.linkonce.d.*}) } - .rela.data ${RELOCATING-0} : { *(.rela.data${RELOCATING+ .rela.data.* .rela.gnu.linkonce.d.*}) } - .rel.tdata ${RELOCATING-0} : { *(.rel.tdata${RELOCATING+ .rel.tdata.* .rel.gnu.linkonce.td.*}) } - .rela.tdata ${RELOCATING-0} : { *(.rela.tdata${RELOCATING+ .rela.tdata.* .rela.gnu.linkonce.td.*}) } - .rel.tbss ${RELOCATING-0} : { *(.rel.tbss${RELOCATING+ .rel.tbss.* .rel.gnu.linkonce.tb.*}) } - .rela.tbss ${RELOCATING-0} : { *(.rela.tbss${RELOCATING+ .rela.tbss.* .rela.gnu.linkonce.tb.*}) } - .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) } - .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) } - .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) } - .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) } - .rel.got ${RELOCATING-0} : { *(.rel.got) } - .rela.got ${RELOCATING-0} : { *(.rela.got) } + .rel.data.rel.ro : { *(.rel.data.rel.ro${RELOCATING+*}) } + .rela.data.rel.ro : { *(.rel.data.rel.ro${RELOCATING+*}) } + .rel.data : { *(.rel.data${RELOCATING+ .rel.data.* .rel.gnu.linkonce.d.*}) } + .rela.data : { *(.rela.data${RELOCATING+ .rela.data.* .rela.gnu.linkonce.d.*}) } + .rel.tdata : { *(.rel.tdata${RELOCATING+ .rel.tdata.* .rel.gnu.linkonce.td.*}) } + .rela.tdata : { *(.rela.tdata${RELOCATING+ .rela.tdata.* .rela.gnu.linkonce.td.*}) } + .rel.tbss : { *(.rel.tbss${RELOCATING+ .rel.tbss.* .rel.gnu.linkonce.tb.*}) } + .rela.tbss : { *(.rela.tbss${RELOCATING+ .rela.tbss.* .rela.gnu.linkonce.tb.*}) } + .rel.ctors : { *(.rel.ctors) } + .rela.ctors : { *(.rela.ctors) } + .rel.dtors : { *(.rel.dtors) } + .rela.dtors : { *(.rela.dtors) } + .rel.got : { *(.rel.got) } + .rela.got : { *(.rela.got) } ${OTHER_GOT_RELOC_SECTIONS} ${REL_SDATA} ${REL_SBSS} ${REL_SDATA2} ${REL_SBSS2} - .rel.bss ${RELOCATING-0} : { *(.rel.bss${RELOCATING+ .rel.bss.* .rel.gnu.linkonce.b.*}) } - .rela.bss ${RELOCATING-0} : { *(.rela.bss${RELOCATING+ .rela.bss.* .rela.gnu.linkonce.b.*}) } + .rel.bss : { *(.rel.bss${RELOCATING+ .rel.bss.* .rel.gnu.linkonce.b.*}) } + .rela.bss : { *(.rela.bss${RELOCATING+ .rela.bss.* .rela.gnu.linkonce.b.*}) } EOF if [ -n "$COMBRELOC" ]; then cat <<EOF - .rel.dyn ${RELOCATING-0} : + .rel.dyn : { EOF sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rela\./d;s/^.*: { *\(.*\)}$/ \1/' $COMBRELOC cat <<EOF } - .rela.dyn ${RELOCATING-0} : + .rela.dyn : { EOF sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rel\./d;s/^.*: { *\(.*\)}/ \1/' $COMBRELOC @@ -284,11 +280,11 @@ cat <<EOF EOF fi cat <<EOF - .rel.plt ${RELOCATING-0} : { *(.rel.plt) } - .rela.plt ${RELOCATING-0} : { *(.rela.plt) } + .rel.plt : { *(.rel.plt) } + .rela.plt : { *(.rela.plt) } ${OTHER_PLT_RELOC_SECTIONS} - .init ${RELOCATING-0} : + .init : { ${RELOCATING+${INIT_START}} KEEP (*(.init)) @@ -296,7 +292,7 @@ cat <<EOF } =${NOP-0} ${DATA_PLT-${BSS_PLT-${PLT}}} - .text ${RELOCATING-0} : + .text : { ${RELOCATING+${TEXT_START_SYMBOLS}} *(.text .stub${RELOCATING+ .text.* .gnu.linkonce.t.*}) @@ -304,7 +300,7 @@ cat <<EOF *(.gnu.warning) ${RELOCATING+${OTHER_TEXT_SECTIONS}} } =${NOP-0} - .fini ${RELOCATING-0} : + .fini : { ${RELOCATING+${FINI_START}} KEEP (*(.fini)) @@ -314,13 +310,13 @@ cat <<EOF ${RELOCATING+PROVIDE (_etext = .);} ${RELOCATING+PROVIDE (etext = .);} ${WRITABLE_RODATA-${RODATA}} - .rodata1 ${RELOCATING-0} : { *(.rodata1) } + .rodata1 : { *(.rodata1) } ${CREATE_SHLIB-${SDATA2}} ${CREATE_SHLIB-${SBSS2}} ${OTHER_READONLY_SECTIONS} .eh_frame_hdr : { *(.eh_frame_hdr) } - .eh_frame ${RELOCATING-0} : ONLY_IF_RO { KEEP (*(.eh_frame)) } - .gcc_except_table ${RELOCATING-0} : ONLY_IF_RO { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) } + .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) } + .gcc_except_table : ONLY_IF_RO { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ @@ -329,20 +325,20 @@ cat <<EOF ${CREATE_PIE+${RELOCATING+. = ${SHLIB_DATA_ADDR-${DATA_SEGMENT_ALIGN}};}} /* Exception handling */ - .eh_frame ${RELOCATING-0} : ONLY_IF_RW { KEEP (*(.eh_frame)) } - .gcc_except_table ${RELOCATING-0} : ONLY_IF_RW { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) } + .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) } + .gcc_except_table : ONLY_IF_RW { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) } /* Thread Local Storage sections */ - .tdata ${RELOCATING-0} : { *(.tdata${RELOCATING+ .tdata.* .gnu.linkonce.td.*}) } - .tbss ${RELOCATING-0} : { *(.tbss${RELOCATING+ .tbss.* .gnu.linkonce.tb.*})${RELOCATING+ *(.tcommon)} } + .tdata : { *(.tdata${RELOCATING+ .tdata.* .gnu.linkonce.td.*}) } + .tbss : { *(.tbss${RELOCATING+ .tbss.* .gnu.linkonce.tb.*})${RELOCATING+ *(.tcommon)} } - .preinit_array ${RELOCATING-0} : { KEEP (*(.preinit_array)) } - .init_array ${RELOCATING-0} : { KEEP (*(.init_array)) } - .fini_array ${RELOCATING-0} : { KEEP (*(.fini_array)) } + .preinit_array : { KEEP (*(.preinit_array)) } + .init_array : { KEEP (*(.init_array)) } + .fini_array : { KEEP (*(.fini_array)) } ${SMALL_DATA_CTOR-${RELOCATING+${CTOR}}} ${SMALL_DATA_DTOR-${RELOCATING+${DTOR}}} - .jcr ${RELOCATING-0} : { KEEP (*(.jcr)) } + .jcr : { KEEP (*(.jcr)) } ${RELOCATING+${DATARELRO}} ${OTHER_RELRO_SECTIONS} @@ -355,13 +351,13 @@ cat <<EOF ${DATA_PLT+${PLT_BEFORE_GOT-${PLT}}} - .data ${RELOCATING-0} : + .data : { ${RELOCATING+${DATA_START_SYMBOLS}} *(.data${RELOCATING+ .data.* .gnu.linkonce.d.*}) ${CONSTRUCTING+SORT(CONSTRUCTORS)} } - .data1 ${RELOCATING-0} : { *(.data1) } + .data1 : { *(.data1) } ${WRITABLE_RODATA+${RODATA}} ${OTHER_READWRITE_SECTIONS} ${SMALL_DATA_CTOR+${RELOCATING+${CTOR}}} @@ -378,7 +374,7 @@ cat <<EOF ${RELOCATING+${OTHER_BSS_SYMBOLS}} ${SBSS} ${BSS_PLT+${PLT}} - .bss ${RELOCATING-0} : + .bss : { *(.dynbss) *(.bss${RELOCATING+ .bss.* .gnu.linkonce.b.*}) diff --git a/ld/scripttempl/nw.sc b/ld/scripttempl/nw.sc index 3fb9bce..38174ab 100644 --- a/ld/scripttempl/nw.sc +++ b/ld/scripttempl/nw.sc @@ -23,8 +23,8 @@ test -z "${BIG_OUTPUT_FORMAT}" && BIG_OUTPUT_FORMAT=${OUTPUT_FORMAT} test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT} test "$LD_FLAG" = "N" && DATA_ADDR=. -INTERP=".interp ${RELOCATING-0} : { *(.interp) }" -PLT=".plt ${RELOCATING-0} : { *(.plt) }" +INTERP=".interp : { *(.interp) }" +PLT=".plt : { *(.plt) }" cat <<EOF OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}", "${LITTLE_OUTPUT_FORMAT}") @@ -34,38 +34,35 @@ ${RELOCATING+${LIB_SEARCH_DIRS}} ${RELOCATING+/* Do we need any of these for elf? __DYNAMIC = 0; ${STACKZERO+${STACKZERO}} ${SHLIB_PATH+${SHLIB_PATH}} */} ${RELOCATING+${EXECUTABLE_SYMBOLS}} -${RELOCATING- /* For some reason, the Solaris linker makes bad executables - if gld -r is used and the intermediate file has sections starting - at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld - bug. But for now assigning the zero vmas works. */} + SECTIONS { /* Read-only sections, merged into text segment: */ ${CREATE_SHLIB-${RELOCATING+. = ${TEXT_START_ADDR} + SIZEOF_HEADERS;}} ${CREATE_SHLIB+${RELOCATING+. = SIZEOF_HEADERS;}} ${CREATE_SHLIB-${INTERP}} - .hash ${RELOCATING-0} : { *(.hash) } - .dynsym ${RELOCATING-0} : { *(.dynsym) } - .dynstr ${RELOCATING-0} : { *(.dynstr) } - .rel.text ${RELOCATING-0} : { *(.rel.text) } - .rela.text ${RELOCATING-0} : { *(.rela.text) } - .rel.data ${RELOCATING-0} : { *(.rel.data) } - .rela.data ${RELOCATING-0} : { *(.rela.data) } - .rel.rodata ${RELOCATING-0} : { *(.rel.rodata) } - .rela.rodata ${RELOCATING-0} : { *(.rela.rodata) } - .rel.got ${RELOCATING-0} : { *(.rel.got) } - .rela.got ${RELOCATING-0} : { *(.rela.got) } - .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) } - .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) } - .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) } - .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) } - .rel.bss ${RELOCATING-0} : { *(.rel.bss) } - .rela.bss ${RELOCATING-0} : { *(.rela.bss) } - .rel.plt ${RELOCATING-0} : { *(.rel.plt) } - .rela.plt ${RELOCATING-0} : { *(.rela.plt) } - .init ${RELOCATING-0} : { *(.init) } =${NOP-0} + .hash : { *(.hash) } + .dynsym : { *(.dynsym) } + .dynstr : { *(.dynstr) } + .rel.text : { *(.rel.text) } + .rela.text : { *(.rela.text) } + .rel.data : { *(.rel.data) } + .rela.data : { *(.rela.data) } + .rel.rodata : { *(.rel.rodata) } + .rela.rodata : { *(.rela.rodata) } + .rel.got : { *(.rel.got) } + .rela.got : { *(.rela.got) } + .rel.ctors : { *(.rel.ctors) } + .rela.ctors : { *(.rela.ctors) } + .rel.dtors : { *(.rel.dtors) } + .rela.dtors : { *(.rela.dtors) } + .rel.bss : { *(.rel.bss) } + .rela.bss : { *(.rela.bss) } + .rel.plt : { *(.rel.plt) } + .rela.plt : { *(.rela.plt) } + .init : { *(.init) } =${NOP-0} ${DATA_PLT-${PLT}} - .text ${RELOCATING-0} : + .text : { ${RELOCATING+${TEXT_START_SYMBOLS}} *(.text) @@ -82,36 +79,36 @@ SECTIONS } ${RELOCATING+_etext = .;} ${RELOCATING+PROVIDE (etext = .);} - .fini ${RELOCATING-0} : { *(.fini) } =${NOP-0} - .ctors ${RELOCATING-0} : { *(.ctors) } - .dtors ${RELOCATING-0} : { *(.dtors) } - .rodata ${RELOCATING-0} : { *(.rodata) } - .rodata1 ${RELOCATING-0} : { *(.rodata1) } + .fini : { *(.fini) } =${NOP-0} + .ctors : { *(.ctors) } + .dtors : { *(.dtors) } + .rodata : { *(.rodata) } + .rodata1 : { *(.rodata1) } ${OTHER_READONLY_SECTIONS} /* Read-write section, merged into data segment: */ ${RELOCATING+. = ${DATA_ADDR- ALIGN(8) + ${MAXPAGESIZE}};} - .data ${RELOCATING-0} : + .data : { ${RELOCATING+${DATA_START_SYMBOLS}} *(.data) ${CONSTRUCTING+CONSTRUCTORS} } - .data1 ${RELOCATING-0} : { *(.data1) } + .data1 : { *(.data1) } ${OTHER_READWRITE_SECTIONS} - .got ${RELOCATING-0} : { *(.got.plt) *(.got) } - .dynamic ${RELOCATING-0} : { *(.dynamic) } + .got : { *(.got.plt) *(.got) } + .dynamic : { *(.dynamic) } ${DATA_PLT+${PLT}} /* 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 ${RELOCATING-0} : { *(.sdata) } + .sdata : { *(.sdata) } ${RELOCATING+_edata = .;} ${RELOCATING+PROVIDE (edata = .);} ${RELOCATING+__bss_start = .;} ${RELOCATING+${OTHER_BSS_SYMBOLS}} - .sbss ${RELOCATING-0} : { *(.sbss) *(.scommon) } - .bss ${RELOCATING-0} : + .sbss : { *(.sbss) *(.scommon) } + .bss : { *(.dynbss) *(.bss) diff --git a/ld/scripttempl/psos.sc b/ld/scripttempl/psos.sc index ab8c6c7..bc99fdd 100644 --- a/ld/scripttempl/psos.sc +++ b/ld/scripttempl/psos.sc @@ -5,7 +5,7 @@ ${RELOCATING+${LIB_SEARCH_DIRS}} SECTIONS { - .text ${RELOCATING:-0} ${RELOCATING+${TEXT_START_ADDR}} : { + .text ${RELOCATING+${TEXT_START_ADDR}} : { ${RELOCATING+ start = DEFINED(_START) ? _START : DEFINED(_start) ? _start : .;} ${RELOCATING+ PROVIDE(__text = .);} *(.text); @@ -31,14 +31,14 @@ SECTIONS ${RELOCATING+ PROVIDE(__etext = .);} ${RELOCATING+ PROVIDE(_etext = .);} } - .data ${RELOCATING:-0} : ${RELOCATING+ AT(ADDR(.text) + SIZEOF(.text))} { + .data : ${RELOCATING+ AT(ADDR(.text) + SIZEOF(.text))} { ${RELOCATING+ PROVIDE(__data = .);} *(.data); *(vars); ${RELOCATING+ PROVIDE(__edata = .);} ${RELOCATING+ PROVIDE(_edata = .);} } - .bss ${RELOCATING:-0} : + .bss : { ${RELOCATING+ PROVIDE(__bss = .);} *(.bss); diff --git a/ld/scripttempl/tic54xcoff.sc b/ld/scripttempl/tic54xcoff.sc index f17b480..6cfcd4c 100644 --- a/ld/scripttempl/tic54xcoff.sc +++ b/ld/scripttempl/tic54xcoff.sc @@ -1,5 +1,6 @@ # default linker script for c54x, TI COFF(1). # patterned after description in TI Assembler Tools PDF, SPRU102C, 7-53 +test -z "$RELOCATING" && exit 0 test -z "$ENTRY" && ENTRY=_c_int00 cat <<EOF @@ -12,7 +13,7 @@ MEMORY /*PAGE 1 : */ data (W) : ORIGIN = 0x01000080, LENGTH = 0xFF80 } -${RELOCATING+ENTRY (${ENTRY})} +ENTRY (${ENTRY}) SECTIONS { diff --git a/ld/scripttempl/xstormy16.sc b/ld/scripttempl/xstormy16.sc index 73d08b8..183cc67 100644 --- a/ld/scripttempl/xstormy16.sc +++ b/ld/scripttempl/xstormy16.sc @@ -54,7 +54,7 @@ test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT} if [ -z "$MACHINE" ]; then OUTPUT_ARCH=${ARCH}; else OUTPUT_ARCH=${ARCH}:${MACHINE}; fi test -z "${ELFSIZE}" && ELFSIZE=32 test -z "${ALIGNMENT}" && ALIGNMENT="${ELFSIZE} / 8" -CTOR=".ctors ${CONSTRUCTING-0} : +CTOR=".ctors : { ${CONSTRUCTING+${CTOR_START}} /* gcc uses crtbegin.o to find the start of @@ -81,7 +81,7 @@ CTOR=".ctors ${CONSTRUCTING-0} : ${CONSTRUCTING+${CTOR_END}} } > ROM" -DTOR=" .dtors ${CONSTRUCTING-0} : +DTOR=" .dtors : { ${CONSTRUCTING+${DTOR_START}} KEEP (*crtbegin.o(.dtors)) @@ -101,10 +101,6 @@ ${RELOCATING+ENTRY(${ENTRY})} ${RELOCATING+${LIB_SEARCH_DIRS}} ${RELOCATING+${EXECUTABLE_SYMBOLS}} ${RELOCATING+${INPUT_FILES}} -${RELOCATING- /* For some reason, the Solaris linker makes bad executables - if gld -r is used and the intermediate file has sections starting - at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld - bug. But for now assigning the zero vmas works. */} /* There are two memory regions we care about, one from 0 through 0x7F00 that is RAM and one from 0x8000 up which is ROM. */ @@ -116,7 +112,7 @@ MEMORY SECTIONS { - .data ${RELOCATING-0} : + .data : { ${RELOCATING+__rdata = .;} ${RELOCATING+__data = .;} @@ -133,7 +129,7 @@ SECTIONS ${RELOCATING+PROVIDE (edata = .);} ${RELOCATING+__bss_start = .;} ${RELOCATING+${OTHER_BSS_SYMBOLS}} - .bss ${RELOCATING-0} : + .bss : { *(.dynbss) *(.bss) @@ -153,9 +149,9 @@ SECTIONS ${RELOCATING+PROVIDE (end = .);} /* Read-only sections in ROM. */ - .int_vec ${RELOCATING-0} : { *(.int_vec) } ${RELOCATING+> ROM} + .int_vec : { *(.int_vec) } ${RELOCATING+> ROM} - .rodata ${RELOCATING-0} : { *(.rodata) ${RELOCATING+*(.rodata.*)} ${RELOCATING+*(.gnu.linkonce.r.*)} } ${RELOCATING+> ROM} + .rodata : { *(.rodata) ${RELOCATING+*(.rodata.*)} ${RELOCATING+*(.gnu.linkonce.r.*)} } ${RELOCATING+> ROM} ${RELOCATING+${CTOR}} ${RELOCATING+${DTOR}} .jcr : { KEEP (*(.jcr)) } ${RELOCATING+> ROM} @@ -163,7 +159,7 @@ SECTIONS .gcc_except_table : { *(.gcc_except_table) } ${RELOCATING+> ROM} .plt : { *(.plt) } ${RELOCATING+> ROM} - .text ${RELOCATING-0} : + .text : { ${RELOCATING+${TEXT_START_SYMBOLS}} *(.text) @@ -174,13 +170,13 @@ SECTIONS ${RELOCATING+*(.gnu.linkonce.t.*)} ${RELOCATING+${OTHER_TEXT_SECTIONS}} } ${RELOCATING+> ROM =${NOP-0}} - .init ${RELOCATING-0} : + .init : { ${RELOCATING+${INIT_START}} KEEP (*(.init)) ${RELOCATING+${INIT_END}} } ${RELOCATING+> ROM =${NOP-0}} - .fini ${RELOCATING-0} : + .fini : { ${RELOCATING+${FINI_START}} KEEP (*(.fini)) |