This is the mail archive of the
binutils-cvs@sourceware.org
mailing list for the binutils project.
[binutils-gdb] MIPS/BFD: Factor out relocated field storing
- From: Maciej W.Rozycki <macro at sourceware dot org>
- To: bfd-cvs at sourceware dot org
- Date: 14 Sep 2018 19:25:03 -0000
- Subject: [binutils-gdb] MIPS/BFD: Factor out relocated field storing
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=98e10ffadbeb42c5adef14c1d5dd4093d57d57a1
commit 98e10ffadbeb42c5adef14c1d5dd4093d57d57a1
Author: Maciej W. Rozycki <macro@mips.com>
Date: Fri Sep 14 20:22:56 2018 +0100
MIPS/BFD: Factor out relocated field storing
Move code used to store the contents of a relocated field in output into
a separate function, `mips_elf_store_contents', complementing existing
`mips_elf_obtain_contents'.
bfd/
* elfxx-mips.c (mips_elf_store_contents): New function...
(mips_elf_perform_relocation): ... factored out from here.
Diff:
---
bfd/ChangeLog | 5 +++++
bfd/elfxx-mips.c | 20 ++++++++++++++++----
2 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 3ed368c..776426f 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,8 @@
+2018-09-14 Maciej W. Rozycki <macro@mips.com>
+
+ * elfxx-mips.c (mips_elf_store_contents): New function...
+ (mips_elf_perform_relocation): ... factored out from here.
+
2018-09-14 Lifang Xia <lifang_xia@c-sky.com>
* elf32-csky.c (csky_elf_howto_table): Fill special_function of
diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c
index 14621cd..0573e93 100644
--- a/bfd/elfxx-mips.c
+++ b/bfd/elfxx-mips.c
@@ -5234,6 +5234,21 @@ mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type,
}
}
+/* Store the field relocated by RELOCATION. */
+
+static void
+mips_elf_store_contents (reloc_howto_type *howto,
+ const Elf_Internal_Rela *relocation,
+ bfd *input_bfd, bfd_byte *contents, bfd_vma x)
+{
+ bfd_byte *location = contents + relocation->r_offset;
+ unsigned int size = bfd_get_reloc_size (howto);
+
+ /* Put the value into the output. */
+ if (size != 0)
+ bfd_put (8 * size, input_bfd, x, location);
+}
+
/* Calculate the value produced by the RELOCATION (which comes from
the INPUT_BFD). The ADDEND is the addend to use for this
RELOCATION; RELOCATION->R_ADDEND is ignored.
@@ -6346,7 +6361,6 @@ mips_elf_perform_relocation (struct bfd_link_info *info,
bfd_vma x;
bfd_byte *location;
int r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
- unsigned int size;
/* Figure out where the relocation is occurring. */
location = contents + relocation->r_offset;
@@ -6505,9 +6519,7 @@ mips_elf_perform_relocation (struct bfd_link_info *info,
}
/* Put the value into the output. */
- size = bfd_get_reloc_size (howto);
- if (size != 0)
- bfd_put (8 * size, input_bfd, x, location);
+ mips_elf_store_contents (howto, relocation, input_bfd, contents, x);
_bfd_mips_elf_reloc_shuffle (input_bfd, r_type, !bfd_link_relocatable (info),
location);