This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On Tue, Jan 08, 2013 at 09:43:16PM +0100, Leif Ekblad wrote:
----- Original Message ----- From: "Alan Modra" <amodra@gmail.com> >Why should $LARGE_DATA_ADDR affect $OTHER_BSS_SECTIONS? Hmm, I see >LARGE_SECTIONS=yes adds .lbss to OTHER_BSS_SECTIONS. That's not very >nice as quite a few targets use OTHER_BSS_SECTIONS for other purposes. >Your patch makes this even more confusing. Also, since you seem to >want a separate large segment, do you really want to lay out your >large sections as .lbss, .lrodata, .ldata? Wouldn't .lrodata, .ldata, >.lbss make more sense?
Yes, absolutely. If the lbss area is large it will also increase
executable size for no reason.
But, shouldn't this be the order regardless of LARGE_DATA_ADDR setting? This
seems like a bug.
Thoughts?
I don't know why the existing scripts put .lbss first. The patch adding x86_64 support for large sections is here: http://sourceware.org/ml/binutils/2005-07/msg00407.html Prior to that, hppa64 had a huge bss section placed more or less in the same location but no large data or rodata section as far as I know.
Here's a tidy that should make adding LARGE_DATA_ADDR easy.
* emulparams/elf_x86_64.sh (LARGE_BSS_AFTER_BSS): Define. * emulparams/elf32_x86_64.sh: Likewise. * emulparams/elf_k1om.sh: Likewise. * emulparams/elf_l1om.sh: Likewise. * scripttempl/elf.sc (LARGE_BSS): Define rather than appending to OTHER_BSS_SECTIONS. Substitute in script.
>Also, there isn't much point in adding support for -Tldata-segment >here without the rest of the support, so that needs adding or simply >omit use of SEGMENT_START().
I think that if the large segment is separated by some TBs of virtual memory, the executable file would become enormous without a new section. But I might be wrong here.
You'll get a new segment (program header) whether or not SEGMENT_START is used. See bfd/elf.c:_bfd_elf_map_sections_to_segments. I'll leave answering your concern about SEPARATE_CODE to Roland.
Index: ld/emulparams/elf32_x86_64.sh =================================================================== RCS file: /cvs/src/src/ld/emulparams/elf32_x86_64.sh,v retrieving revision 1.5 diff -u -p -r1.5 elf32_x86_64.sh --- ld/emulparams/elf32_x86_64.sh 11 Jun 2012 13:23:50 -0000 1.5 +++ ld/emulparams/elf32_x86_64.sh 9 Jan 2013 03:51:27 -0000 @@ -13,6 +13,7 @@ GENERATE_SHLIB_SCRIPT=yes GENERATE_PIE_SCRIPT=yes NO_SMALL_DATA=yes LARGE_SECTIONS=yes +LARGE_BSS_AFTER_BSS= SEPARATE_GOTPLT="SIZEOF (.got.plt) >= 24 ? 24 : 0" IREL_IN_PLT=
Index: ld/emulparams/elf_k1om.sh =================================================================== RCS file: /cvs/src/src/ld/emulparams/elf_k1om.sh,v retrieving revision 1.3 diff -u -p -r1.3 elf_k1om.sh --- ld/emulparams/elf_k1om.sh 11 Jun 2012 13:23:50 -0000 1.3 +++ ld/emulparams/elf_k1om.sh 9 Jan 2013 03:51:27 -0000 @@ -14,6 +14,7 @@ GENERATE_SHLIB_SCRIPT=yes GENERATE_PIE_SCRIPT=yes NO_SMALL_DATA=yes LARGE_SECTIONS=yes +LARGE_BSS_AFTER_BSS= SEPARATE_GOTPLT="SIZEOF (.got.plt) >= 24 ? 24 : 0"
if [ "x${host}" = "x${target}" ]; then Index: ld/emulparams/elf_l1om.sh =================================================================== RCS file: /cvs/src/src/ld/emulparams/elf_l1om.sh,v retrieving revision 1.5 diff -u -p -r1.5 elf_l1om.sh --- ld/emulparams/elf_l1om.sh 11 Jun 2012 13:23:50 -0000 1.5 +++ ld/emulparams/elf_l1om.sh 9 Jan 2013 03:51:27 -0000 @@ -14,6 +14,7 @@ GENERATE_SHLIB_SCRIPT=yes GENERATE_PIE_SCRIPT=yes NO_SMALL_DATA=yes LARGE_SECTIONS=yes +LARGE_BSS_AFTER_BSS= SEPARATE_GOTPLT="SIZEOF (.got.plt) >= 24 ? 24 : 0"
if [ "x${host}" = "x${target}" ]; then Index: ld/emulparams/elf_x86_64.sh =================================================================== RCS file: /cvs/src/src/ld/emulparams/elf_x86_64.sh,v retrieving revision 1.25 diff -u -p -r1.25 elf_x86_64.sh --- ld/emulparams/elf_x86_64.sh 11 Jun 2012 13:23:50 -0000 1.25 +++ ld/emulparams/elf_x86_64.sh 9 Jan 2013 03:51:27 -0000 @@ -13,6 +13,7 @@ GENERATE_SHLIB_SCRIPT=yes GENERATE_PIE_SCRIPT=yes NO_SMALL_DATA=yes LARGE_SECTIONS=yes +LARGE_BSS_AFTER_BSS= SEPARATE_GOTPLT="SIZEOF (.got.plt) >= 24 ? 24 : 0" IREL_IN_PLT=
Index: ld/scripttempl/elf.sc
===================================================================
RCS file: /cvs/src/src/ld/scripttempl/elf.sc,v
retrieving revision 1.117
diff -u -p -r1.117 elf.sc
--- ld/scripttempl/elf.sc 8 Jan 2013 09:23:07 -0000 1.117
+++ ld/scripttempl/elf.sc 9 Jan 2013 03:51:27 -0000
@@ -213,8 +213,7 @@ test "${LARGE_SECTIONS}" = "yes" && REL_
.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" && OTHER_BSS_SECTIONS="
- ${OTHER_BSS_SECTIONS}
+test "${LARGE_SECTIONS}" = "yes" && LARGE_BSS="
.lbss ${RELOCATING-0} :
{
*(.dynlbss)
@@ -606,9 +605,11 @@ cat <<EOF
${RELOCATING+. = ALIGN(. != 0 ? ${ALIGNMENT} : 1);}
}
${OTHER_BSS_SECTIONS}
+ ${LARGE_BSS_AFTER_BSS+${LARGE_BSS}}
${RELOCATING+${OTHER_BSS_END_SYMBOLS}}
${RELOCATING+. = ALIGN(${ALIGNMENT});}
${LARGE_SECTIONS}
+ ${LARGE_BSS_AFTER_BSS-${LARGE_BSS}}
${RELOCATING+. = ALIGN(${ALIGNMENT});}
${RELOCATING+${OTHER_END_SYMBOLS}}
${RELOCATING+${END_SYMBOLS-${USER_LABEL_PREFIX}_end = .; PROVIDE (${USER_LABEL_PREFIX}end = .);}}
--
Alan Modra
Australia Development Lab, IBM
Attachment:
binutils.diff
Description: Binary data
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |