aboutsummaryrefslogtreecommitdiff
path: root/binutils
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2022-11-14 08:25:16 +1030
committerAlan Modra <amodra@gmail.com>2022-11-14 11:36:46 +1030
commit4f5c4fce8878830d8e4e928fa0dbe3f4ee2eb2cd (patch)
tree85d0c7efd9d38d9fb3caf11b5c1ee0e9e754183a /binutils
parentf31e4e02eed3a758d757c7ede855b7aec1dd3850 (diff)
downloadgdb-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.c7
-rw-r--r--binutils/testsuite/binutils-all/objcopy.exp2
-rw-r--r--binutils/testsuite/binutils-all/rename-section-01.d14
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