diff options
author | Alan Modra <amodra@gmail.com> | 2021-01-26 10:48:09 +1030 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2021-01-26 20:54:43 +1030 |
commit | 1c9c9b9b55520b36c15af94ee0803f0922b3ca09 (patch) | |
tree | 9f173d24144a20066955dc47b2e69201ab527656 | |
parent | a45ef9a30ba53836cbc4ae1e287c20aeb4b349f6 (diff) | |
download | gdb-1c9c9b9b55520b36c15af94ee0803f0922b3ca09.zip gdb-1c9c9b9b55520b36c15af94ee0803f0922b3ca09.tar.gz gdb-1c9c9b9b55520b36c15af94ee0803f0922b3ca09.tar.bz2 |
PR27226, ld.bfd contains huge .rodata section
This makes it possible to build ld without any compiled-in scripts,
by setting COMPILE_IN=no in the environment. pe, beos and pdp11
targets didn't support scripts from the file system, with pdp11
nastily editing the ld/ldscripts file so that the built-in script
didn't match.
PR 27226
* emulparams/alphavms.sh: Don't set COMPILE_IN.
* emulparams/elf64_ia64_vms.sh: Likewise.
* emulparams/elf64mmix.sh: Likewise.
* emulparams/elf_iamcu.sh: Likewise.
* emulparams/elf_k1om.sh: Likewise.
* emulparams/elf_l1om.sh: Likewise.
* emulparams/mmo.sh: Likewise.
* emulparams/pdp11.sh: Set DATA_SEG_ADDR.
* scripttempl/pdp11.sc: Use it.
* emultempl/pdp11.em: Don't edit .xn script for separate_code,
instead use .xe script. Support scripts from file system.
* emultempl/beos.em: Support scripts from file system.
* emultempl/pe.em: Likewise.
* emultempl/pep.em: Likewise.
* testsuite/ld-bootstrap/bootstrap.exp: Make tmpdir/ldscripts link.
-rw-r--r-- | ld/ChangeLog | 19 | ||||
-rw-r--r-- | ld/emulparams/alphavms.sh | 3 | ||||
-rw-r--r-- | ld/emulparams/elf64_ia64_vms.sh | 1 | ||||
-rw-r--r-- | ld/emulparams/elf64mmix.sh | 1 | ||||
-rw-r--r-- | ld/emulparams/elf_iamcu.sh | 1 | ||||
-rw-r--r-- | ld/emulparams/elf_k1om.sh | 1 | ||||
-rw-r--r-- | ld/emulparams/elf_l1om.sh | 1 | ||||
-rw-r--r-- | ld/emulparams/mmo.sh | 1 | ||||
-rw-r--r-- | ld/emulparams/pdp11.sh | 5 | ||||
-rw-r--r-- | ld/emultempl/beos.em | 25 | ||||
-rw-r--r-- | ld/emultempl/pdp11.em | 30 | ||||
-rw-r--r-- | ld/emultempl/pe.em | 34 | ||||
-rw-r--r-- | ld/emultempl/pep.em | 34 | ||||
-rw-r--r-- | ld/scripttempl/pdp11.sc | 2 | ||||
-rw-r--r-- | ld/testsuite/ld-bootstrap/bootstrap.exp | 1 |
15 files changed, 148 insertions, 11 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index befdf5b..638f42d 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,22 @@ +2021-01-26 Alan Modra <amodra@gmail.com> + + PR 27226 + * emulparams/alphavms.sh: Don't set COMPILE_IN. + * emulparams/elf64_ia64_vms.sh: Likewise. + * emulparams/elf64mmix.sh: Likewise. + * emulparams/elf_iamcu.sh: Likewise. + * emulparams/elf_k1om.sh: Likewise. + * emulparams/elf_l1om.sh: Likewise. + * emulparams/mmo.sh: Likewise. + * emulparams/pdp11.sh: Set DATA_SEG_ADDR. + * scripttempl/pdp11.sc: Use it. + * emultempl/pdp11.em: Don't edit .xn script for separate_code, + instead use .xe script. Support scripts from file system. + * emultempl/beos.em: Support scripts from file system. + * emultempl/pe.em: Likewise. + * emultempl/pep.em: Likewise. + * testsuite/ld-bootstrap/bootstrap.exp: Make tmpdir/ldscripts link. + 2021-01-25 Fangrui Song <maskray@google.com> PR ld/27230 diff --git a/ld/emulparams/alphavms.sh b/ld/emulparams/alphavms.sh index ac9b3a2..ab69c26 100644 --- a/ld/emulparams/alphavms.sh +++ b/ld/emulparams/alphavms.sh @@ -3,5 +3,4 @@ SCRIPT_NAME=alphavms OUTPUT_FORMAT="vms-alpha" ARCH=alpha -COMPILE_IN=yes -EXTRA_EM_FILE=vms
\ No newline at end of file +EXTRA_EM_FILE=vms diff --git a/ld/emulparams/elf64_ia64_vms.sh b/ld/emulparams/elf64_ia64_vms.sh index 0688402..53a6a14 100644 --- a/ld/emulparams/elf64_ia64_vms.sh +++ b/ld/emulparams/elf64_ia64_vms.sh @@ -3,5 +3,4 @@ SCRIPT_NAME=ia64vms OUTPUT_FORMAT="elf64-ia64-vms" ARCH=ia64 -COMPILE_IN=yes EXTRA_EM_FILE=vms diff --git a/ld/emulparams/elf64mmix.sh b/ld/emulparams/elf64mmix.sh index 75e24be..fb7c4e3 100644 --- a/ld/emulparams/elf64mmix.sh +++ b/ld/emulparams/elf64mmix.sh @@ -16,7 +16,6 @@ DATA_ADDR='DEFINED (__.MMIX.start..data) ? __.MMIX.start..data : 0x2000000000000 MAXPAGESIZE="CONSTANT (MAXPAGESIZE)" ARCH=mmix MACHINE= -COMPILE_IN=yes EXTRA_EM_FILE=mmixelf # The existence of a symbol __start (or _start) should overrule Main, so diff --git a/ld/emulparams/elf_iamcu.sh b/ld/emulparams/elf_iamcu.sh index 1cc07cc..c158223 100644 --- a/ld/emulparams/elf_iamcu.sh +++ b/ld/emulparams/elf_iamcu.sh @@ -10,7 +10,6 @@ MAXPAGESIZE="CONSTANT (MAXPAGESIZE)" COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)" ARCH=iamcu MACHINE= -COMPILE_IN=yes TEMPLATE_NAME=elf EXTRA_EM_FILE="elf-x86" GENERATE_SHLIB_SCRIPT=yes diff --git a/ld/emulparams/elf_k1om.sh b/ld/emulparams/elf_k1om.sh index 6f15bdc..b27f5ea 100644 --- a/ld/emulparams/elf_k1om.sh +++ b/ld/emulparams/elf_k1om.sh @@ -11,7 +11,6 @@ MAXPAGESIZE="CONSTANT (MAXPAGESIZE)" COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)" ARCH="k1om" MACHINE= -COMPILE_IN=yes TEMPLATE_NAME=elf EXTRA_EM_FILE="elf-x86" GENERATE_SHLIB_SCRIPT=yes diff --git a/ld/emulparams/elf_l1om.sh b/ld/emulparams/elf_l1om.sh index 7348c95..70d7682 100644 --- a/ld/emulparams/elf_l1om.sh +++ b/ld/emulparams/elf_l1om.sh @@ -11,7 +11,6 @@ MAXPAGESIZE="CONSTANT (MAXPAGESIZE)" COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)" ARCH="l1om" MACHINE= -COMPILE_IN=yes TEMPLATE_NAME=elf EXTRA_EM_FILE="elf-x86" GENERATE_SHLIB_SCRIPT=yes diff --git a/ld/emulparams/mmo.sh b/ld/emulparams/mmo.sh index ca98013..6bd84d2 100644 --- a/ld/emulparams/mmo.sh +++ b/ld/emulparams/mmo.sh @@ -7,5 +7,4 @@ DATA_ADDR='DEFINED (__.MMIX.start..data) ? __.MMIX.start..data : 0x2000000000000 OUTPUT_FORMAT=mmo RELOCATEABLE_OUTPUT_FORMAT=elf64-mmix ARCH=mmix -COMPILE_IN=yes EXTRA_EM_FILE=mmo diff --git a/ld/emulparams/pdp11.sh b/ld/emulparams/pdp11.sh index 3f3326d..d79bb83 100644 --- a/ld/emulparams/pdp11.sh +++ b/ld/emulparams/pdp11.sh @@ -4,3 +4,8 @@ TEXT_START_ADDR=0 TARGET_PAGE_SIZE=8192 EXTRA_EM_FILE=pdp11 ARCH=pdp11 + +case "$LD_FLAG" in + *textonly) DATA_SEG_ADDR=0 ;; + *) DATA_SEG_ADDR=$DATA_ALIGNMENT ;; +esac diff --git a/ld/emultempl/beos.em b/ld/emultempl/beos.em index bb4395f..fc43ce1 100644 --- a/ld/emultempl/beos.em +++ b/ld/emultempl/beos.em @@ -712,7 +712,11 @@ gld${EMULATION_NAME}_place_orphan (asection *s, static char * gld_${EMULATION_NAME}_get_script (int *isfile) EOF + +if test x"$COMPILE_IN" = xyes +then # Scripts compiled in. + # sed commands to quote an ld script as a C string. sc="-f stringify.sed" @@ -734,6 +738,27 @@ echo ' ; else return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c echo '; }' >> e${EMULATION_NAME}.c +else +# Scripts read from the filesystem. + +fragment <<EOF +{ + *isfile = 1; + + if (bfd_link_relocatable (&link_info) && config.build_constructors) + return "ldscripts/${EMULATION_NAME}.xu"; + else if (bfd_link_relocatable (&link_info)) + return "ldscripts/${EMULATION_NAME}.xr"; + else if (!config.text_read_only) + return "ldscripts/${EMULATION_NAME}.xbn"; + else if (!config.magic_demand_paged) + return "ldscripts/${EMULATION_NAME}.xn"; + else + return "ldscripts/${EMULATION_NAME}.x"; +} +EOF +fi + fragment <<EOF diff --git a/ld/emultempl/pdp11.em b/ld/emultempl/pdp11.em index f725e73..6a3cacb 100644 --- a/ld/emultempl/pdp11.em +++ b/ld/emultempl/pdp11.em @@ -94,7 +94,11 @@ gld${EMULATION_NAME}_handle_option (int optc) static char * gld${EMULATION_NAME}_get_script (int *isfile) EOF + +if test x"$COMPILE_IN" = xyes +then # Scripts compiled in. + # sed commands to quote an ld script as a C string. sc="-f stringify.sed" @@ -109,8 +113,7 @@ sed $sc ldscripts/${EMULATION_NAME}.xu >> e${EMULATION_NAME}.c echo ' ; else if (bfd_link_relocatable (&link_info)) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c echo ' ; else if (link_info.separate_code) return' >> e${EMULATION_NAME}.c -sed $sc ldscripts/${EMULATION_NAME}.xn | \ - sed -e "s/ALIGN($TARGET_PAGE_SIZE)/0/" >> e${EMULATION_NAME}.c +sed $sc ldscripts/${EMULATION_NAME}.xe >> e${EMULATION_NAME}.c echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c echo ' ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c @@ -119,6 +122,29 @@ echo ' ; else return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c echo '; }' >> e${EMULATION_NAME}.c +else +# Scripts read from the filesystem. + +fragment <<EOF +{ + *isfile = 1; + + if (bfd_link_relocatable (&link_info) && config.build_constructors) + return "ldscripts/${EMULATION_NAME}.xu"; + else if (bfd_link_relocatable (&link_info)) + return "ldscripts/${EMULATION_NAME}.xr"; + else if (link_info.separate_code) + return "ldscripts/${EMULATION_NAME}.xe"; + else if (!config.text_read_only) + return "ldscripts/${EMULATION_NAME}.xbn"; + else if (!config.magic_demand_paged) + return "ldscripts/${EMULATION_NAME}.xn"; + else + return "ldscripts/${EMULATION_NAME}.x"; +} +EOF +fi + fragment <<EOF /* --- \end{pdp11.em} */ diff --git a/ld/emultempl/pe.em b/ld/emultempl/pe.em index f9060be..748a6b4 100644 --- a/ld/emultempl/pe.em +++ b/ld/emultempl/pe.em @@ -2355,7 +2355,11 @@ gld_${EMULATION_NAME}_find_potential_libraries static char * gld_${EMULATION_NAME}_get_script (int *isfile) EOF + +if test x"$COMPILE_IN" = xyes +then # Scripts compiled in. + # sed commands to quote an ld script as a C string. sc="-f stringify.sed" @@ -2381,6 +2385,36 @@ echo ' ; else return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c echo '; }' >> e${EMULATION_NAME}.c +else +# Scripts read from the filesystem. + +fragment <<EOF +{ + *isfile = 1; + + if (bfd_link_relocatable (&link_info) && config.build_constructors) + return "ldscripts/${EMULATION_NAME}.xu"; + else if (bfd_link_relocatable (&link_info)) + return "ldscripts/${EMULATION_NAME}.xr"; + else if (!config.text_read_only) + return "ldscripts/${EMULATION_NAME}.xbn"; + else if (!config.magic_demand_paged) + return "ldscripts/${EMULATION_NAME}.xn"; +EOF +if test -n "$GENERATE_AUTO_IMPORT_SCRIPT" ; then +fragment <<EOF + else if (link_info.pei386_auto_import == 1 + && (MERGE_RDATA_V2 || link_info.pei386_runtime_pseudo_reloc != 2)) + return "ldscripts/${EMULATION_NAME}.xa"; +EOF +fi +fragment <<EOF + else + return "ldscripts/${EMULATION_NAME}.x"; +} +EOF +fi + fragment <<EOF diff --git a/ld/emultempl/pep.em b/ld/emultempl/pep.em index ca335b5..ff49c15 100644 --- a/ld/emultempl/pep.em +++ b/ld/emultempl/pep.em @@ -2175,7 +2175,11 @@ gld_${EMULATION_NAME}_find_potential_libraries static char * gld_${EMULATION_NAME}_get_script (int *isfile) EOF + +if test x"$COMPILE_IN" = xyes +then # Scripts compiled in. + # sed commands to quote an ld script as a C string. sc="-f stringify.sed" @@ -2201,6 +2205,36 @@ echo ' ; else return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c echo '; }' >> e${EMULATION_NAME}.c +else +# Scripts read from the filesystem. + +fragment <<EOF +{ + *isfile = 1; + + if (bfd_link_relocatable (&link_info) && config.build_constructors) + return "ldscripts/${EMULATION_NAME}.xu"; + else if (bfd_link_relocatable (&link_info)) + return "ldscripts/${EMULATION_NAME}.xr"; + else if (!config.text_read_only) + return "ldscripts/${EMULATION_NAME}.xbn"; + else if (!config.magic_demand_paged) + return "ldscripts/${EMULATION_NAME}.xn"; +EOF +if test -n "$GENERATE_AUTO_IMPORT_SCRIPT" ; then +fragment <<EOF + else if (link_info.pei386_auto_import == 1 + && link_info.pei386_runtime_pseudo_reloc != 2) + return "ldscripts/${EMULATION_NAME}.xa"; +EOF +fi +fragment <<EOF + else + return "ldscripts/${EMULATION_NAME}.x"; +} +EOF +fi + fragment <<EOF diff --git a/ld/scripttempl/pdp11.sc b/ld/scripttempl/pdp11.sc index b6cfed8..8605ae7b 100644 --- a/ld/scripttempl/pdp11.sc +++ b/ld/scripttempl/pdp11.sc @@ -35,7 +35,7 @@ SECTIONS ${RELOCATING+__etext = .;} ${PAD_TEXT+${RELOCATING+. = ${DATA_ALIGNMENT};}} } - ${RELOCATING+. = ${DATA_ALIGNMENT};} + ${RELOCATING+. = ${DATA_SEG_ADDR};} .data : { *(.data) diff --git a/ld/testsuite/ld-bootstrap/bootstrap.exp b/ld/testsuite/ld-bootstrap/bootstrap.exp index bf9f7a3..2e4a097 100644 --- a/ld/testsuite/ld-bootstrap/bootstrap.exp +++ b/ld/testsuite/ld-bootstrap/bootstrap.exp @@ -62,6 +62,7 @@ if { [istarget "powerpc-*-*"] } { set gcc_B_opt_save $gcc_B_opt +catch "exec ln -s ../ldscripts tmpdir/ldscripts" status foreach ldexe {ld1 ld2 ld3} { if {![file isdirectory tmpdir/gcc$ldexe]} then { catch "exec mkdir tmpdir/gcc$ldexe" status |