From 22216541c1796e9e1331d6f4e16b03a6f02e7381 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Wed, 16 Oct 2019 21:23:29 +1030 Subject: 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 ): 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. --- include/bfdlink.h | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'include/bfdlink.h') diff --git a/include/bfdlink.h b/include/bfdlink.h index 76355a3..32d1512 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; -- cgit v1.1