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.
This commit is contained in:
parent
a45ef9a30b
commit
1c9c9b9b55
15 changed files with 148 additions and 11 deletions
19
ld/ChangeLog
19
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
|
||||
|
|
|
@ -3,5 +3,4 @@ SCRIPT_NAME=alphavms
|
|||
OUTPUT_FORMAT="vms-alpha"
|
||||
ARCH=alpha
|
||||
|
||||
COMPILE_IN=yes
|
||||
EXTRA_EM_FILE=vms
|
|
@ -3,5 +3,4 @@ SCRIPT_NAME=ia64vms
|
|||
OUTPUT_FORMAT="elf64-ia64-vms"
|
||||
ARCH=ia64
|
||||
|
||||
COMPILE_IN=yes
|
||||
EXTRA_EM_FILE=vms
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -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} */
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@ SECTIONS
|
|||
${RELOCATING+__etext = .;}
|
||||
${PAD_TEXT+${RELOCATING+. = ${DATA_ALIGNMENT};}}
|
||||
}
|
||||
${RELOCATING+. = ${DATA_ALIGNMENT};}
|
||||
${RELOCATING+. = ${DATA_SEG_ADDR};}
|
||||
.data :
|
||||
{
|
||||
*(.data)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue