diff options
-rw-r--r-- | ld/ChangeLog | 8 | ||||
-rw-r--r-- | ld/emulparams/criself.sh | 7 | ||||
-rw-r--r-- | ld/emulparams/elf32bmip.sh | 6 | ||||
-rw-r--r-- | ld/emulparams/elf32bmipn32-defs.sh | 7 | ||||
-rw-r--r-- | ld/scripttempl/elf.sc | 5 |
5 files changed, 28 insertions, 5 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index d7907c6..e4ffb01 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,5 +1,13 @@ 2006-10-17 Alan Modra <amodra@bigpond.net.au> + * scripttempl/elf.sc (INTERP): Delete. Move definition to.. + (INITIAL_READONLY_SECTIONS): ..here. + * emulparams/criself.sh (INITIAL_READONLY_SECTIONS): Include .interp. + * emulparams/elf32bmip.sh (INITIAL_READONLY_SECTIONS): Ditto. + * emulparams/elf32bmipn32-defs.sh (INITIAL_READONLY_SECTIONS): Ditto. + +2006-10-17 Alan Modra <amodra@bigpond.net.au> + * ldlang.c (strip_excluded_output_sections): Do strip sections that define syms, but don't ignore them. * ld.texinfo (Output Section Discarding): Revise. diff --git a/ld/emulparams/criself.sh b/ld/emulparams/criself.sh index 0478f34..1d374ae 100644 --- a/ld/emulparams/criself.sh +++ b/ld/emulparams/criself.sh @@ -13,7 +13,12 @@ ALIGNMENT=32 TEXT_START_ADDR=0 # Put crt0 for flash/eprom etc. in this section. -INITIAL_READONLY_SECTIONS='.startup : { KEEP(*(.startup)) }' +INITIAL_READONLY_SECTIONS= +if test -z "${CREATE_SHLIB}"; then + INITIAL_READONLY_SECTIONS=".interp ${RELOCATING-0} : { *(.interp) }" +fi +INITIAL_READONLY_SECTIONS="${INITIAL_READONLY_SECTIONS} + .startup : { KEEP(*(.startup)) }" # Setting __Stext to . in TEXT_START_SYMBOLS doesn't get what we want # most of the time, which is the start of all read-only sections; diff --git a/ld/emulparams/elf32bmip.sh b/ld/emulparams/elf32bmip.sh index 3501ddf..8fda60b 100644 --- a/ld/emulparams/elf32bmip.sh +++ b/ld/emulparams/elf32bmip.sh @@ -12,7 +12,11 @@ COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)" NONPAGED_TEXT_START_ADDR=0x0400000 SHLIB_TEXT_START_ADDR=0x5ffe0000 TEXT_DYNAMIC= -INITIAL_READONLY_SECTIONS=" +INITIAL_READONLY_SECTIONS= +if test -z "${CREATE_SHLIB}"; then + INITIAL_READONLY_SECTIONS=".interp ${RELOCATING-0} : { *(.interp) }" +fi +INITIAL_READONLY_SECTIONS="${INITIAL_READONLY_SECTIONS} .reginfo ${RELOCATING-0} : { *(.reginfo) } " OTHER_TEXT_SECTIONS='*(.mips16.fn.*) *(.mips16.call.*)' diff --git a/ld/emulparams/elf32bmipn32-defs.sh b/ld/emulparams/elf32bmipn32-defs.sh index 024aebe..4091ff4 100644 --- a/ld/emulparams/elf32bmipn32-defs.sh +++ b/ld/emulparams/elf32bmipn32-defs.sh @@ -57,7 +57,12 @@ TEXT_START_SYMBOLS='_ftext = . ;' DATA_START_SYMBOLS='_fdata = . ;' OTHER_BSS_SYMBOLS='_fbss = .;' -INITIAL_READONLY_SECTIONS=".reginfo ${RELOCATING-0} : { *(.reginfo) }" +INITIAL_READONLY_SECTIONS= +if test -z "${CREATE_SHLIB}"; then + INITIAL_READONLY_SECTIONS=".interp ${RELOCATING-0} : { *(.interp) }" +fi +INITIAL_READONLY_SECTIONS="${INITIAL_READONLY_SECTIONS} + .reginfo ${RELOCATING-0} : { *(.reginfo) }" # Discard any .MIPS.content* or .MIPS.events* sections. The linker # doesn't know how to adjust them. OTHER_SECTIONS="/DISCARD/ : { *(.MIPS.content*) *(.MIPS.events*) }" diff --git a/ld/scripttempl/elf.sc b/ld/scripttempl/elf.sc index 738f21f..7ee4c1c 100644 --- a/ld/scripttempl/elf.sc +++ b/ld/scripttempl/elf.sc @@ -103,7 +103,9 @@ if test -n "${COMMONPAGESIZE}"; then DATA_SEGMENT_END=". = DATA_SEGMENT_END (.);" DATA_SEGMENT_RELRO_END=". = DATA_SEGMENT_RELRO_END (${SEPARATE_GOTPLT-0}, .);" fi -INTERP=".interp ${RELOCATING-0} : { *(.interp) }" +if test -z "${INITIAL_READONLY_SECTIONS}${CREATE_SHLIB}"; then + INITIAL_READONLY_SECTIONS=".interp ${RELOCATING-0} : { *(.interp) }" +fi if test -z "$PLT"; then PLT=".plt ${RELOCATING-0} : { *(.plt) }" fi @@ -259,7 +261,6 @@ SECTIONS ${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+PROVIDE (__executable_start = ${TEXT_START_ADDR}); . = ${TEXT_BASE_ADDRESS};}}} ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_TEXT_START_ADDR:-0} + SIZEOF_HEADERS;}} ${CREATE_PIE+${RELOCATING+. = ${SHLIB_TEXT_START_ADDR:-0} + SIZEOF_HEADERS;}} - ${CREATE_SHLIB-${INTERP}} ${INITIAL_READONLY_SECTIONS} ${TEXT_DYNAMIC+${DYNAMIC}} .hash ${RELOCATING-0} : { *(.hash) } |