diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2022-12-27 11:41:11 -0800 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2022-12-27 11:46:30 -0800 |
commit | 9eb71a53bf36a370e21a6fbbb21e2726f64b0fd0 (patch) | |
tree | b1ca16b9c1eb2b3c7a3ef2b355cf76297e6ba3fa /bfd/elfxx-x86.c | |
parent | 767e2daed4da3245350d1e45e4eee42964d656f6 (diff) | |
download | gdb-9eb71a53bf36a370e21a6fbbb21e2726f64b0fd0.zip gdb-9eb71a53bf36a370e21a6fbbb21e2726f64b0fd0.tar.gz gdb-9eb71a53bf36a370e21a6fbbb21e2726f64b0fd0.tar.bz2 |
x86-64: Allocate input section memory if needed
When --no-keep-memory is used, the input section memory may not be cached.
Allocate input section memory for -z pack-relative-relocs if needed.
bfd/
PR ld/29939
* elfxx-x86.c (elf_x86_size_or_finish_relative_reloc): Allocate
input section memory if needed.
ld/
PR ld/29939
* testsuite/ld-elf/dt-relr-2i.d: New test.
Diffstat (limited to 'bfd/elfxx-x86.c')
-rw-r--r-- | bfd/elfxx-x86.c | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/bfd/elfxx-x86.c b/bfd/elfxx-x86.c index 2ddca34..ec86e75 100644 --- a/bfd/elfxx-x86.c +++ b/bfd/elfxx-x86.c @@ -1541,12 +1541,33 @@ elf_x86_size_or_finish_relative_reloc } else { + bfd_byte *contents; + if (rel.r_offset >= sec->size) abort (); + + if (elf_section_data (sec)->this_hdr.contents + != NULL) + contents + = elf_section_data (sec)->this_hdr.contents; + else + { + if (!bfd_malloc_and_get_section (sec->owner, + sec, + &contents)) + info->callbacks->einfo + /* xgettext:c-format */ + (_("%F%P: %pB: failed to allocate memory for section `%pA'\n"), + info->output_bfd, sec); + + /* Cache the section contents for + elf_link_input_bfd. */ + elf_section_data (sec)->this_hdr.contents + = contents; + } htab->elf_write_addend (info->output_bfd, outrel->r_addend, - (elf_section_data (sec)->this_hdr.contents - + rel.r_offset)); + contents + rel.r_offset); } } } |