This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[PATCH 4/5] BFD: Added functions and macros to read and write 24 bit values.
- 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: Tue, 24 Jul 2018 12:58:43 +0200
- Subject: [PATCH 4/5] BFD: Added functions and macros to read and write 24 bit values.
- References: <1532429924-29839-1-git-send-email-john@darrington.wattle.id.au>
bfd/
* libbfd.c (bfd_getb24): New function.
* libbfd.c (bfd_getl24): New function.
* libbfd.c (bfd_get_24): New macro.
* libbfd.c (bfd_put_24): New macro.
---
bfd/ChangeLog | 7 +++++++
bfd/libbfd.c | 36 ++++++++++++++++++++++++++++++++++++
2 files changed, 43 insertions(+)
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index d4e2c21efb..abe973f63d 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,10 @@
+2018-07-23 John Darrington <john@darrington.wattle.id.au>
+
+ * libbfd.c (bfd_getb24): New function.
+ * libbfd.c (bfd_getl24): New function.
+ * libbfd.c (bfd_get_24): New macro.
+ * libbfd.c (bfd_put_24): New macro.
+
2018-07-11 Maciej W. Rozycki <macro@mips.com>
* elfxx-mips.c (mips_tls_got_relocs): Use `bfd_link_dll' rather
diff --git a/bfd/libbfd.c b/bfd/libbfd.c
index 971be4f3de..1f7b713945 100644
--- a/bfd/libbfd.c
+++ b/bfd/libbfd.c
@@ -458,6 +458,18 @@ DESCRIPTION
.#define bfd_get_signed_16(abfd, ptr) \
. BFD_SEND (abfd, bfd_getx_signed_16, (ptr))
.
+.#define bfd_put_24(abfd, val, ptr) \
+. if (bfd_big_endian ((abfd))) \
+. bfd_putb24 ((val), (ptr)); \
+. else \
+. bfd_putl24 ((val), (ptr))
+.
+.bfd_vma bfd_getb24 (const void *p);
+.bfd_vma bfd_getl24 (const void *p);
+.
+.#define bfd_get_24(abfd, ptr) \
+. (bfd_big_endian ((abfd)) ? bfd_getb24 ((ptr)) : bfd_getl24 ((ptr)))
+.
.#define bfd_put_32(abfd, val, ptr) \
. BFD_SEND (abfd, bfd_putx32, ((val),(ptr)))
.#define bfd_put_signed_32 \
@@ -634,6 +646,30 @@ bfd_putl24 (bfd_vma data, void *p)
}
+bfd_vma
+bfd_getb24 (const void *p)
+{
+ const bfd_byte *addr = (const bfd_byte *) p;
+ unsigned long v;
+
+ v = (unsigned long) addr[0] << 16;
+ v |= (unsigned long) addr[1] << 8;
+ v |= (unsigned long) addr[2];
+ return v;
+}
+
+bfd_vma
+bfd_getl24 (const void *p)
+{
+ const bfd_byte *addr = (const bfd_byte *) p;
+ unsigned long v;
+
+ v = (unsigned long) addr[0];
+ v |= (unsigned long) addr[1] << 8;
+ v |= (unsigned long) addr[2] << 16;
+ return v;
+}
+
bfd_vma
bfd_getb32 (const void *p)
{
--
2.17.0