Index: ld/emulparams/elf32xtensa.sh =================================================================== RCS file: /cvs/src/src/ld/emulparams/elf32xtensa.sh,v retrieving revision 1.8 diff -u -r1.8 elf32xtensa.sh --- ld/emulparams/elf32xtensa.sh 10 Oct 2006 20:57:37 -0000 1.8 +++ ld/emulparams/elf32xtensa.sh 11 Oct 2006 20:25:26 -0000 @@ -13,21 +13,30 @@ GENERATE_PIE_SCRIPT=yes GENERATE_COMBRELOC_SCRIPT=yes NO_SMALL_DATA=yes +TEXT_PLT=yes PLT="/* .plt* sections are embedded in .text */" GOT=".got ${RELOCATING-0} : { *(.got) }" OTHER_READONLY_SECTIONS=" .got.loc ${RELOCATING-0} : { *(.got.loc) } - .xt_except_table ${RELOCATING-0} : { KEEP (*(.xt_except_table)) } + .xt_except_table ${RELOCATING-0} : { KEEP (*(.xt_except_table${RELOCATING+ .xt_except_table.* .gnu.linkonce.e.*})) } " OTHER_READWRITE_SECTIONS=" .xt_except_desc ${RELOCATING-0} : { - *(.xt_except_desc${RELOCATING+ .gnu.linkonce.h.*}) + *(.xt_except_desc${RELOCATING+ .xt_except_desc.* .gnu.linkonce.h.*}) ${RELOCATING+*(.xt_except_desc_end)} } " +OTHER_SDATA_SECTIONS=" + .lit4 ${RELOCATING-0} : + { + ${RELOCATING+PROVIDE (_lit4_start = .);} + *(.lit4${RELOCATING+ .lit4.* .gnu.linkonce.lit4.*}) + ${RELOCATING+PROVIDE (_lit4_end = .);} + } +" OTHER_SECTIONS=" - .xt.lit 0 : { *(.xt.lit${RELOCATING+ .xt.lit.* .gnu.linkonce.p.*}) } - .xt.insn 0 : { *(.xt.insn${RELOCATING+ .gnu.linkonce.x.*}) } - .xt.prop 0 : { *(.xt.prop${RELOCATING+ .xt.prop.* .gnu.linkonce.prop.*}) } + .xt.lit 0 : { *(.xt.lit${RELOCATING+ .xt.lit.* .gnu.linkonce.p.*}) } + .xt.insn 0 : { *(.xt.insn${RELOCATING+ .gnu.linkonce.x.*}) } + .xt.prop 0 : { *(.xt.prop${RELOCATING+ .xt.prop.* .gnu.linkonce.prop.*}) } " Index: ld/scripttempl/elfxtensa.sc =================================================================== RCS file: /cvs/src/src/ld/scripttempl/elfxtensa.sc,v retrieving revision 1.10 diff -u -r1.10 elfxtensa.sc --- ld/scripttempl/elfxtensa.sc 28 Aug 2006 01:52:56 -0000 1.10 +++ ld/scripttempl/elfxtensa.sc 11 Oct 2006 20:25:27 -0000 @@ -52,6 +52,7 @@ # so that .got can be in the RELRO area. It should be set to # the number of bytes in the beginning of .got.plt which can be # in the RELRO area as well. +# USER_LABEL_PREFIX - prefix to add to user-visible symbols. # # When adding sections, do note that the names of some sections are used # when specifying the start address of the next. @@ -77,6 +78,22 @@ # .debug_info .gnu.linkonce.wi.foo # .tdata .gnu.linkonce.td.foo # .tbss .gnu.linkonce.tb.foo +# .lrodata .gnu.linkonce.lr.foo +# .ldata .gnu.linkonce.l.foo +# .lbss .gnu.linkonce.lb.foo +# +# plus exception-handling information for Tensilica's XCC compiler: +# .xt_except_table .gnu.linkonce.e.foo +# .xt_except_desc .gnu.linkonce.h.foo +# +# plus Xtensa-specific literal sections: +# .literal .gnu.linkonce.literal.foo +# .lit4 .gnu.linkonce.lit4.foo +# +# plus Xtensa-specific "property table" sections: +# .xt.lit .gnu.linkonce.p.foo +# .xt.insn .gnu.linkonce.x.foo (obsolete) +# .xt.prop .gnu.linkonce.prop.foo # # Each of these can also have corresponding .rel.* and .rela.* sections. @@ -103,6 +120,7 @@ if test -z "$PLT"; then PLT=".plt ${RELOCATING-0} : { *(.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) }" @@ -113,7 +131,7 @@ fi DYNAMIC=".dynamic ${RELOCATING-0} : { *(.dynamic) }" RODATA=".rodata ${RELOCATING-0} : { *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.*}) }" -DATARELRO=".data.rel.ro : { *(.data.rel.ro.local) *(.data.rel.ro*) }" +DATARELRO=".data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) }" STACKNOTE="/DISCARD/ : { *(.note.GNU-stack) }" INIT_LIT=".init.literal 0 : { *(.init.literal) }" INIT=".init 0 : { *(.init) }" @@ -122,10 +140,12 @@ if test -z "${NO_SMALL_DATA}"; then SBSS=".sbss ${RELOCATING-0} : { + ${RELOCATING+${SBSS_START_SYMBOLS}} ${CREATE_SHLIB+*(.sbss2 .sbss2.* .gnu.linkonce.sb2.*)} *(.dynsbss) *(.sbss${RELOCATING+ .sbss.* .gnu.linkonce.sb.*}) *(.scommon) + ${RELOCATING+${SBSS_END_SYMBOLS}} }" SBSS2=".sbss2 ${RELOCATING-0} : { *(.sbss2${RELOCATING+ .sbss2.* .gnu.linkonce.sb2.*}) }" SDATA="/* We want the small data sections together, so single-instruction offsets @@ -137,7 +157,11 @@ ${CREATE_SHLIB+*(.sdata2 .sdata2.* .gnu.linkonce.s2.*)} *(.sdata${RELOCATING+ .sdata.* .gnu.linkonce.s.*}) }" - SDATA2=".sdata2 ${RELOCATING-0} : { *(.sdata2${RELOCATING+ .sdata2.* .gnu.linkonce.s2.*}) }" + SDATA2=".sdata2 ${RELOCATING-0} : + { + ${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.*}) } @@ -160,6 +184,29 @@ fi 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.*}) }" +test "${LARGE_SECTIONS}" = "yes" && LARGE_SECTIONS=" + .lbss ${RELOCATING-0} : + { + *(.dynlbss) + *(.lbss${RELOCATING+ .lbss.* .gnu.linkonce.lb.*}) + *(LARGE_COMMON) + } + .lrodata ${RELOCATING-0} ${RELOCATING+ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))} : + { + *(.lrodata${RELOCATING+ .lrodata.* .gnu.linkonce.lr.*}) + } + .ldata ${RELOCATING-0} ${RELOCATING+ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))} : + { + *(.ldata${RELOCATING+ .ldata.* .gnu.linkonce.l.*}) + ${RELOCATING+. = ALIGN(. != 0 ? ${ALIGNMENT} : 1);} + }" CTOR=".ctors ${CONSTRUCTING-0} : { ${CONSTRUCTING+${CTOR_START}} @@ -213,8 +260,6 @@ ENTRY(${ENTRY}) ${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+${INPUT_FILES}} ${RELOCATING- /* For some reason, the Solaris linker makes bad executables @@ -232,6 +277,7 @@ ${INITIAL_READONLY_SECTIONS} ${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) } @@ -254,8 +300,8 @@ .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.*}) } ${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.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.*}) } @@ -275,6 +321,7 @@ ${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_LARGE} EOF if [ -n "$COMBRELOC" ]; then cat <