This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH 4/5] BFD: Added functions and macros to read and write 24 bit values.


	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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]