diff options
author | 2019-10-16 21:23:29 +1030 | |
---|---|---|
committer | 2019-10-16 23:07:27 +1030 | |
commit | 22216541c1796e9e1331d6f4e16b03a6f02e7381 (patch) | |
tree | 4591c034f7c483dc18ff09eb257d19d99e916f30 /include | |
parent | Fix potential illegal memory access when disassembling corrupt RX binaries. (diff) | |
download | binutils-gdb-22216541c1796e9e1331d6f4e16b03a6f02e7381.tar.gz binutils-gdb-22216541c1796e9e1331d6f4e16b03a6f02e7381.tar.bz2 binutils-gdb-22216541c1796e9e1331d6f4e16b03a6f02e7381.zip |
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 'include')
-rw-r--r-- | include/ChangeLog | 5 | ||||
-rw-r--r-- | include/bfdlink.h | 4 |
2 files changed, 9 insertions, 0 deletions
diff --git a/include/ChangeLog b/include/ChangeLog index 13b15f00a71..412d71459e0 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,8 @@ +2019-10-16 Alan Modra <amodra@gmail.com> + + PR 13616 + * bfdlink.h (struct bfd_link_info <big_endian>): New field. + 2019-10-07 Jozef Lawrynowicz <jozef.l@mittosystems.com> * elf/msp430.h: Add enums for MSPABI and GNU object attribute tag diff --git a/include/bfdlink.h b/include/bfdlink.h index 76355a3b953..32d15129ab5 100644 --- a/include/bfdlink.h +++ b/include/bfdlink.h @@ -359,6 +359,10 @@ struct bfd_link_info /* TRUE if section groups should be resolved. */ unsigned int resolve_section_groups: 1; + /* Set if output file is big-endian, or if that is unknown, from + the command line or first input file endianness. */ + unsigned int big_endian : 1; + /* Which symbols to strip. */ ENUM_BITFIELD (bfd_link_strip) strip : 2; |