mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-17 16:05:56 +08:00
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.
This commit is contained in:
@ -2469,7 +2469,7 @@ _bfd_default_link_order (bfd *abfd,
|
||||
|
||||
static bfd_boolean
|
||||
default_data_link_order (bfd *abfd,
|
||||
struct bfd_link_info *info ATTRIBUTE_UNUSED,
|
||||
struct bfd_link_info *info,
|
||||
asection *sec,
|
||||
struct bfd_link_order *link_order)
|
||||
{
|
||||
@ -2489,7 +2489,7 @@ default_data_link_order (bfd *abfd,
|
||||
fill_size = link_order->u.data.size;
|
||||
if (fill_size == 0)
|
||||
{
|
||||
fill = abfd->arch_info->fill (size, bfd_big_endian (abfd),
|
||||
fill = abfd->arch_info->fill (size, info->big_endian,
|
||||
(sec->flags & SEC_CODE) != 0);
|
||||
if (fill == NULL)
|
||||
return FALSE;
|
||||
|
Reference in New Issue
Block a user