aboutsummaryrefslogtreecommitdiff
path: root/ld/emulparams
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2019-10-16 21:23:29 +1030
committerAlan Modra <amodra@gmail.com>2019-10-16 23:07:27 +1030
commit22216541c1796e9e1331d6f4e16b03a6f02e7381 (patch)
tree4591c034f7c483dc18ff09eb257d19d99e916f30 /ld/emulparams
parent12234dfd5f70086fde87e1f6d56cf2aa2ce5ec4c (diff)
downloadbinutils-22216541c1796e9e1331d6f4e16b03a6f02e7381.zip
binutils-22216541c1796e9e1331d6f4e16b03a6f02e7381.tar.gz
binutils-22216541c1796e9e1331d6f4e16b03a6f02e7381.tar.bz2
PR13616, linker should pad executable sections with nops, not zeros
This implements padding of orphan executable sections for PowerPC. Of course, the simple implementation of bfd_arch_ppc_nop_fill and removing the NOP definition didn't work, with powerpc64 hitting a testsuite failure linking to S-records. That's because the srec target is BFD_ENDIAN_UNKNOWN so the test of bfd_big_endian (abfd) in default_data_link_order therefore returned false, resulting in a little-endian nop pattern. The rest of the patch fixes that problem by adding a new field to bfd_link_info that can be used to determine actual endianness on targets like srec. PR 13616 include/ * bfdlink.h (struct bfd_link_info <big_endian>): New field. bfd/ * cpu-powerpc.c (bfd_arch_ppc_nop_fill): New function, use it for all ppc arch info. * linker.c (default_data_link_order): Pass info->big_endian to arch_info->fill function. ld/ * emulparams/elf64lppc.sh (NOP): Don't define. * emulparams/elf64ppc.sh (NOP): Don't define. * ldwrite.c (build_link_order): Use link_info.big_endian. Move code determining endian to use for data_statement to.. * ldemul.c (after_open_default): ..here. Set link_info.big_endian.
Diffstat (limited to 'ld/emulparams')
-rw-r--r--ld/emulparams/elf64lppc.sh1
-rw-r--r--ld/emulparams/elf64ppc.sh1
2 files changed, 0 insertions, 2 deletions
diff --git a/ld/emulparams/elf64lppc.sh b/ld/emulparams/elf64lppc.sh
index 71ef0d3..3416291 100644
--- a/ld/emulparams/elf64lppc.sh
+++ b/ld/emulparams/elf64lppc.sh
@@ -1,3 +1,2 @@
source_sh ${srcdir}/emulparams/elf64ppc.sh
OUTPUT_FORMAT="elf64-powerpcle"
-NOP=0x00000060
diff --git a/ld/emulparams/elf64ppc.sh b/ld/emulparams/elf64ppc.sh
index 0dd42cf..15221b8 100644
--- a/ld/emulparams/elf64ppc.sh
+++ b/ld/emulparams/elf64ppc.sh
@@ -6,7 +6,6 @@ OUTPUT_FORMAT="elf64-powerpc"
TEXT_START_ADDR=0x10000000
#SEGMENT_SIZE=0x10000000
ARCH=powerpc:common64
-NOP=0x60000000
unset EXECUTABLE_SYMBOLS
unset SDATA_START_SYMBOLS
unset SDATA2_START_SYMBOLS