This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[PATCH] BFD: Deal with relocations which are 3 bytes in size
- From: John Darrington <john at darrington dot wattle dot id dot au>
- To: binutils at sourceware dot org
- Cc: John Darrington <john at darrington dot wattle dot id dot au>
- Date: Thu, 9 Aug 2018 18:46:51 +0200
- Subject: [PATCH] BFD: Deal with relocations which are 3 bytes in size
bfd/
* reloc.c (_bfd_relocate_contents): Deal with case 3.
* reloc.c (_bfd_clear_contents): ditto
* reloc.c ( bfd_perform_relocation): ditto
* reloc.c ( bfd_install_relocation): ditto
---
bfd/reloc.c | 25 +++++++++++++++++++++----
1 file changed, 21 insertions(+), 4 deletions(-)
diff --git a/bfd/reloc.c b/bfd/reloc.c
index 68bc8a8..907a0a4 100644
--- a/bfd/reloc.c
+++ b/bfd/reloc.c
@@ -920,11 +920,9 @@ space consuming. For each target:
{
case 5:
{
- long x = bfd_get_32 (abfd, (bfd_byte *) data + octets);
- x >>= 8;
+ long x = bfd_get_24 (abfd, (bfd_byte *) data + octets);
DOIT (x);
- bfd_put_16 (abfd, (bfd_vma) (x >> 8), (bfd_byte *) data + octets);
- bfd_put_8 (abfd, (x & 0xFF), (unsigned char *) data + 2 + octets);
+ bfd_put_24 (abfd, (bfd_vma) x, (unsigned char *) data + octets);
}
break;
@@ -1340,6 +1338,13 @@ space consuming. For each target:
bfd_put_32 (abfd, (bfd_vma) x, data);
}
break;
+ case 5:
+ {
+ long x = bfd_get_24 (abfd, data);
+ DOIT (x);
+ bfd_put_24 (abfd, (bfd_vma) x, data);
+ }
+ break;
case -2:
{
long x = bfd_get_32 (abfd, data);
@@ -1467,6 +1472,9 @@ _bfd_relocate_contents (reloc_howto_type *howto,
case 2:
x = bfd_get_16 (input_bfd, location);
break;
+ case 3:
+ x = bfd_get_24 (input_bfd, location);
+ break;
case 4:
x = bfd_get_32 (input_bfd, location);
break;
@@ -1593,6 +1601,9 @@ _bfd_relocate_contents (reloc_howto_type *howto,
case 2:
bfd_put_16 (input_bfd, x, location);
break;
+ case 3:
+ bfd_put_24 (input_bfd, x, location);
+ break;
case 4:
bfd_put_32 (input_bfd, x, location);
break;
@@ -1636,6 +1647,9 @@ _bfd_clear_contents (reloc_howto_type *howto,
case 2:
x = bfd_get_16 (input_bfd, location);
break;
+ case 3:
+ x = bfd_get_24 (input_bfd, location);
+ break;
case 4:
x = bfd_get_32 (input_bfd, location);
break;
@@ -1670,6 +1684,9 @@ _bfd_clear_contents (reloc_howto_type *howto,
case 2:
bfd_put_16 (input_bfd, x, location);
break;
+ case 3:
+ bfd_put_24 (input_bfd, x, location);
+ break;
case 4:
bfd_put_32 (input_bfd, x, location);
break;
--
2.1.4