diff options
author | Alan Modra <amodra@gmail.com> | 2022-11-14 08:25:16 +1030 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2022-11-14 11:36:46 +1030 |
commit | 4f5c4fce8878830d8e4e928fa0dbe3f4ee2eb2cd (patch) | |
tree | 85d0c7efd9d38d9fb3caf11b5c1ee0e9e754183a /binutils | |
parent | f31e4e02eed3a758d757c7ede855b7aec1dd3850 (diff) | |
download | gdb-4f5c4fce8878830d8e4e928fa0dbe3f4ee2eb2cd.zip gdb-4f5c4fce8878830d8e4e928fa0dbe3f4ee2eb2cd.tar.gz gdb-4f5c4fce8878830d8e4e928fa0dbe3f4ee2eb2cd.tar.bz2 |
objcopy renaming section with explicit flags
This tidies SEC_RELOC handling in bfd, in the process fixing a bug
with objcopy when renaming sections.
bfd/
* reloc.c (_bfd_generic_set_reloc): Set/clear SEC_RELOC depending
on reloc count.
* elf64-sparc.c (elf64_sparc_set_reloc): Likewise.
binutils/
* objcopy.c (copy_relocations_in_section): Remove now unnecessary
clearing of SEC_RELOC.
* testsuite/binutils-all/rename-section-01.d: New test.
* testsuite/binutils-all/objcopy.exp: Run it.
gas/
* write.c (size_seg): Remove unneccesary twiddle of SEC_RELOC.
(write_relocs): Likewise. Always call bfd_set_reloc.
Diffstat (limited to 'binutils')
-rw-r--r-- | binutils/objcopy.c | 7 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/objcopy.exp | 2 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/rename-section-01.d | 14 |
3 files changed, 17 insertions, 6 deletions
diff --git a/binutils/objcopy.c b/binutils/objcopy.c index d886e3a..3d88624 100644 --- a/binutils/objcopy.c +++ b/binutils/objcopy.c @@ -4331,10 +4331,7 @@ copy_relocations_in_section (bfd *ibfd, sec_ptr isection, void *obfdarg) } if (relsize == 0) - { - bfd_set_reloc (obfd, osection, NULL, 0); - osection->flags &= ~SEC_RELOC; - } + bfd_set_reloc (obfd, osection, NULL, 0); else { if (isection->orelocation != NULL) @@ -4377,8 +4374,6 @@ copy_relocations_in_section (bfd *ibfd, sec_ptr isection, void *obfdarg) } bfd_set_reloc (obfd, osection, relcount == 0 ? NULL : relpp, relcount); - if (relcount == 0) - osection->flags &= ~SEC_RELOC; } } diff --git a/binutils/testsuite/binutils-all/objcopy.exp b/binutils/testsuite/binutils-all/objcopy.exp index 5871d43..aebfdb2 100644 --- a/binutils/testsuite/binutils-all/objcopy.exp +++ b/binutils/testsuite/binutils-all/objcopy.exp @@ -1448,3 +1448,5 @@ if { [istarget *-*-cygwin] || [istarget *-*-mingw*] } { if { ![is_xcoff_format] } { objcopy_test "pr25662" $src executable "" $ldflags } + +run_dump_test "rename-section-01" diff --git a/binutils/testsuite/binutils-all/rename-section-01.d b/binutils/testsuite/binutils-all/rename-section-01.d new file mode 100644 index 0000000..21d9013 --- /dev/null +++ b/binutils/testsuite/binutils-all/rename-section-01.d @@ -0,0 +1,14 @@ +#PROG: objcopy +#name: objcopy rename-section with flags - keep relocation +#source: needed-by-reloc.s +#objcopy: --rename-section .data=myrodata,contents,alloc,load,readonly +#objdump: -r +#notarget: alpha*-*-*vms* rx-*-elf [is_som_format] [is_aout_format] + +.*: +file format .* + +#... +RELOCATION RECORDS FOR .*myrodata.*: +OFFSET +TYPE +VALUE +0+ .* +#pass |