aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2021-01-26 10:48:09 +1030
committerAlan Modra <amodra@gmail.com>2021-01-26 20:54:43 +1030
commit1c9c9b9b55520b36c15af94ee0803f0922b3ca09 (patch)
tree9f173d24144a20066955dc47b2e69201ab527656 /ld
parenta45ef9a30ba53836cbc4ae1e287c20aeb4b349f6 (diff)
downloadbinutils-1c9c9b9b55520b36c15af94ee0803f0922b3ca09.zip
binutils-1c9c9b9b55520b36c15af94ee0803f0922b3ca09.tar.gz
binutils-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.
Diffstat (limited to 'ld')
-rw-r--r--ld/ChangeLog19
-rw-r--r--ld/emulparams/alphavms.sh3
-rw-r--r--ld/emulparams/elf64_ia64_vms.sh1
-rw-r--r--ld/emulparams/elf64mmix.sh1
-rw-r--r--ld/emulparams/elf_iamcu.sh1
-rw-r--r--ld/emulparams/elf_k1om.sh1
-rw-r--r--ld/emulparams/elf_l1om.sh1
-rw-r--r--ld/emulparams/mmo.sh1
-rw-r--r--ld/emulparams/pdp11.sh5
-rw-r--r--ld/emultempl/beos.em25
-rw-r--r--ld/emultempl/pdp11.em30
-rw-r--r--ld/emultempl/pe.em34
-rw-r--r--ld/emultempl/pep.em34
-rw-r--r--ld/scripttempl/pdp11.sc2
-rw-r--r--ld/testsuite/ld-bootstrap/bootstrap.exp1
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