aboutsummaryrefslogtreecommitdiff
path: root/bfd/libbfd.c
diff options
context:
space:
mode:
authorJohn Darrington <john@darrington.wattle.id.au>2018-07-24 12:58:43 +0200
committerAlan Modra <amodra@gmail.com>2018-07-27 11:28:59 +0930
commit370e4b5079ff8d62be3adee7396948d4c5795091 (patch)
tree6cddc1bcfede5c1a64562cca7e5396dcd25c3c42 /bfd/libbfd.c
parentcd4d353f812a3ecb29cabf0e62319253daf510fa (diff)
downloadgdb-370e4b5079ff8d62be3adee7396948d4c5795091.zip
gdb-370e4b5079ff8d62be3adee7396948d4c5795091.tar.gz
gdb-370e4b5079ff8d62be3adee7396948d4c5795091.tar.bz2
Add functions and macros to read and write 24 bit values.
* libbfd.c (bfd_getb24, bfd_getl24): New functions. (bfd_get_24, bfd_put_24): New macros. * bfd-in2.h: Regenerate.
Diffstat (limited to 'bfd/libbfd.c')
-rw-r--r--bfd/libbfd.c39
1 files changed, 37 insertions, 2 deletions
diff --git a/bfd/libbfd.c b/bfd/libbfd.c
index 971be4f..7c45d52 100644
--- a/bfd/libbfd.c
+++ b/bfd/libbfd.c
@@ -458,6 +458,20 @@ DESCRIPTION
.#define bfd_get_signed_16(abfd, ptr) \
. BFD_SEND (abfd, bfd_getx_signed_16, (ptr))
.
+.#define bfd_put_24(abfd, val, ptr) \
+. do \
+. if (bfd_big_endian (abfd)) \
+. bfd_putb24 ((val), (ptr)); \
+. else \
+. bfd_putl24 ((val), (ptr)); \
+. while (0)
+.
+.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 \
@@ -613,7 +627,6 @@ bfd_putl16 (bfd_vma data, void *p)
addr[1] = (data >> 8) & 0xff;
}
-
void
bfd_putb24 (bfd_vma data, void *p)
{
@@ -623,7 +636,6 @@ bfd_putb24 (bfd_vma data, void *p)
addr[2] = data & 0xff;
}
-
void
bfd_putl24 (bfd_vma data, void *p)
{
@@ -633,6 +645,29 @@ bfd_putl24 (bfd_vma data, void *p)
addr[2] = (data >> 16) & 0xff;
}
+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)