From 484593416ab47f073bb191ee0d92458898aab311 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Tue, 27 Nov 2001 19:06:07 +0000 Subject: [PATCH] 2001-11-27 H.J. Lu * emulparams/elf_i386.sh (NO_SMALL_DATA): Set to yes. * emulparams/elf_i386_be.sh (NO_SMALL_DATA): Likewise. * emulparams/elf_i386_chaos.sh (NO_SMALL_DATA): Likewise. * emulparams/elf_i386_ldso.sh (NO_SMALL_DATA): Likewise. * emulparams/elf_x86_64.sh (NO_SMALL_DATA): Likewise. * emulparams/m68kelf.sh (NO_SMALL_DATA): Likewise. * emulparams/elf32_sparc.sh (NO_SMALL_DATA): Likewise. * emulparams/elf64_sparc.sh (NO_SMALL_DATA): Likewise. * scripttempl/elf.sc (SBSS): New. Define if ${NO_SMALL_DATA} is not empty. (SDATA): Likewise. (REL_SDATA): Likewise. (REL_SBSS): Likewise. (REL_SDATA2): Likewise. (REL_SBSS2): Likewise. (SBSS2): Define if ${NO_SMALL_DATA} is not empty. (SDATA2): Likewise. --- ld/ChangeLog | 21 +++++++++++ ld/emulparams/elf32_sparc.sh | 1 + ld/emulparams/elf64_sparc.sh | 1 + ld/emulparams/elf_i386.sh | 1 + ld/emulparams/elf_i386_be.sh | 1 + ld/emulparams/elf_i386_chaos.sh | 1 + ld/emulparams/elf_i386_ldso.sh | 1 + ld/emulparams/elf_x86_64.sh | 1 + ld/emulparams/m68kelf.sh | 1 + ld/scripttempl/elf.sc | 66 +++++++++++++++++++-------------- 10 files changed, 67 insertions(+), 28 deletions(-) diff --git a/ld/ChangeLog b/ld/ChangeLog index a2414bba4c3..a07f0567945 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,24 @@ +2001-11-27 H.J. Lu + + * emulparams/elf_i386.sh (NO_SMALL_DATA): Set to yes. + * emulparams/elf_i386_be.sh (NO_SMALL_DATA): Likewise. + * emulparams/elf_i386_chaos.sh (NO_SMALL_DATA): Likewise. + * emulparams/elf_i386_ldso.sh (NO_SMALL_DATA): Likewise. + * emulparams/elf_x86_64.sh (NO_SMALL_DATA): Likewise. + * emulparams/m68kelf.sh (NO_SMALL_DATA): Likewise. + * emulparams/elf32_sparc.sh (NO_SMALL_DATA): Likewise. + * emulparams/elf64_sparc.sh (NO_SMALL_DATA): Likewise. + + * scripttempl/elf.sc (SBSS): New. Define if ${NO_SMALL_DATA} + is not empty. + (SDATA): Likewise. + (REL_SDATA): Likewise. + (REL_SBSS): Likewise. + (REL_SDATA2): Likewise. + (REL_SBSS2): Likewise. + (SBSS2): Define if ${NO_SMALL_DATA} is not empty. + (SDATA2): Likewise. + 2001-11-25 Stephane Carrez * scripttempl/elfm68hc11.sc (CTOR, DTOR): Put constructor and diff --git a/ld/emulparams/elf32_sparc.sh b/ld/emulparams/elf32_sparc.sh index 74e2326d53e..d8b81e763d1 100644 --- a/ld/emulparams/elf32_sparc.sh +++ b/ld/emulparams/elf32_sparc.sh @@ -9,3 +9,4 @@ MACHINE= TEMPLATE_NAME=elf32 DATA_PLT= GENERATE_SHLIB_SCRIPT=yes +NO_SMALL_DATA=yes diff --git a/ld/emulparams/elf64_sparc.sh b/ld/emulparams/elf64_sparc.sh index b0a58eadcb7..dae3f21edb3 100644 --- a/ld/emulparams/elf64_sparc.sh +++ b/ld/emulparams/elf64_sparc.sh @@ -8,6 +8,7 @@ MACHINE= DATA_PLT= GENERATE_SHLIB_SCRIPT=yes NOP=0x01000000 +NO_SMALL_DATA=yes case "$target" in sparc*-solaris*) diff --git a/ld/emulparams/elf_i386.sh b/ld/emulparams/elf_i386.sh index 6928f642b7f..53dd54b0ac8 100644 --- a/ld/emulparams/elf_i386.sh +++ b/ld/emulparams/elf_i386.sh @@ -8,3 +8,4 @@ MACHINE= NOP=0x90909090 TEMPLATE_NAME=elf32 GENERATE_SHLIB_SCRIPT=yes +NO_SMALL_DATA=yes diff --git a/ld/emulparams/elf_i386_be.sh b/ld/emulparams/elf_i386_be.sh index 4405d210fcf..2c681b763af 100644 --- a/ld/emulparams/elf_i386_be.sh +++ b/ld/emulparams/elf_i386_be.sh @@ -9,3 +9,4 @@ MACHINE= NOP=0x90909090 TEMPLATE_NAME=elf32 GENERATE_SHLIB_SCRIPT=yes +NO_SMALL_DATA=yes diff --git a/ld/emulparams/elf_i386_chaos.sh b/ld/emulparams/elf_i386_chaos.sh index 6afe3c8d70d..f7ad3cf6c4e 100644 --- a/ld/emulparams/elf_i386_chaos.sh +++ b/ld/emulparams/elf_i386_chaos.sh @@ -8,3 +8,4 @@ MACHINE= NOP=0x90909090 TEMPLATE_NAME=elf32 GENERATE_SHLIB_SCRIPT=yes +NO_SMALL_DATA=yes diff --git a/ld/emulparams/elf_i386_ldso.sh b/ld/emulparams/elf_i386_ldso.sh index 4bb212359c1..a477a693286 100644 --- a/ld/emulparams/elf_i386_ldso.sh +++ b/ld/emulparams/elf_i386_ldso.sh @@ -9,3 +9,4 @@ NOP=0x90909090 TEMPLATE_NAME=elf32 GENERATE_SHLIB_SCRIPT=yes ELF_INTERPRETER_NAME=\"/usr/lib/ld.so.1\" +NO_SMALL_DATA=yes diff --git a/ld/emulparams/elf_x86_64.sh b/ld/emulparams/elf_x86_64.sh index c6586c38e8d..27931c76b2b 100644 --- a/ld/emulparams/elf_x86_64.sh +++ b/ld/emulparams/elf_x86_64.sh @@ -9,3 +9,4 @@ MACHINE= NOP=0x90909090 TEMPLATE_NAME=elf32 GENERATE_SHLIB_SCRIPT=yes +NO_SMALL_DATA=yes diff --git a/ld/emulparams/m68kelf.sh b/ld/emulparams/m68kelf.sh index 508d58d59fe..b784a3ca54a 100644 --- a/ld/emulparams/m68kelf.sh +++ b/ld/emulparams/m68kelf.sh @@ -9,3 +9,4 @@ NOP=0x4e754e75 TEMPLATE_NAME=elf32 EXTRA_EM_FILE=m68kelf GENERATE_SHLIB_SCRIPT=yes +NO_SMALL_DATA=yes diff --git a/ld/scripttempl/elf.sc b/ld/scripttempl/elf.sc index 0f3db037c0b..bba70747f7a 100644 --- a/ld/scripttempl/elf.sc +++ b/ld/scripttempl/elf.sc @@ -1,6 +1,8 @@ # # Unusual variables checked by this code: # NOP - four byte opcode for no-op (defaults to 0) +# NO_SMALL_DATA - no .sbss/.sbss2/.sdata/.sdata2 sections if not +# empty. # DATA_ADDR - if end-of-text-plus-one-page isn't right for data start # INITIAL_READONLY_SECTIONS - at start of text segment # OTHER_READONLY_SECTIONS - other than .text .init .rodata ... @@ -72,8 +74,36 @@ 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.*}) }" -SBSS2=".sbss2 ${RELOCATING-0} : { *(.sbss2${RELOCATING+ .sbss2.* .gnu.linkonce.sb2.*}) }" -SDATA2=".sdata2 ${RELOCATING-0} : { *(.sdata2${RELOCATING+ .sdata2.* .gnu.linkonce.s2.*}) }" +if test -z "${NO_SMALL_DATA}"; then + SBSS=".sbss ${RELOCATING-0} : + { + ${RELOCATING+PROVIDE (__sbss_start = .);} + ${RELOCATING+PROVIDE (___sbss_start = .);} + *(.dynsbss) + *(.sbss${RELOCATING+ .sbss.* .gnu.linkonce.sb.*}) + *(.scommon) + ${RELOCATING+PROVIDE (__sbss_end = .);} + ${RELOCATING+PROVIDE (___sbss_end = .);} + }" + SBSS2=".sbss2 ${RELOCATING-0} : { *(.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} : + { + ${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.*}) }" +fi CTOR=".ctors ${CONSTRUCTING-0} : { ${CONSTRUCTING+${CTOR_START}} @@ -177,14 +207,10 @@ eval $COMBRELOCCAT <