diff options
author | Alan Modra <amodra@gmail.com> | 2021-05-12 17:48:13 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2021-05-12 21:10:33 +0930 |
commit | af2ddf69ab85add3155cf55f65e6e9f3c9bcb29a (patch) | |
tree | da4e33811d28a4f7cda938183b3d349780b10c8b /binutils/elfcomm.c | |
parent | 0d872fca0293041a5cb7c54a4a04855323563d8e (diff) | |
download | gdb-af2ddf69ab85add3155cf55f65e6e9f3c9bcb29a.zip gdb-af2ddf69ab85add3155cf55f65e6e9f3c9bcb29a.tar.gz gdb-af2ddf69ab85add3155cf55f65e6e9f3c9bcb29a.tar.bz2 |
SAFE_BYTE_GET64
Functions dealing with lack of a 64-bit integer type can disappear now
that we require C99. Printing using dwarf_vmatoa is better too.
binutils/
* dwarf.c (dwarf_vmatoa64, SAFE_BYTE_GET64, add64): Delete.
(skip_attr_bytes): Replace use of SAFE_BYTE_GET64 with
SAFE_BYTE_GET_AND_INC.
(read_and_display_attr_value): Likewise. Print using dwarf_vmatoa.
(process_debug_info, process_cu_tu_index): Likewise.
* elfcomm.c (byte_put, byte_put_little_endian, byte_put_big_endian),
(byte_get, byte_get_little_endian, byte_get_big_endian),
(byte_get_signed): Make size param unsigned. Remove code dealing
with 4-byte elf_vma.
(byte_get_64): Delete.
* elfcomm.h (byte_put, byte_put_little_endian, byte_put_big_endian),
(byte_get, byte_get_little_endian, byte_get_big_endian),
(byte_get_signed): Update prototypes.
(byte_get_64): Delete.
gas/
* testsuite/gas/elf/dwarf-5-file0.d: Update.
* testsuite/gas/i386/dwarf5-line-1.d: Update.
Diffstat (limited to 'binutils/elfcomm.c')
-rw-r--r-- | binutils/elfcomm.c | 125 |
1 files changed, 17 insertions, 108 deletions
diff --git a/binutils/elfcomm.c b/binutils/elfcomm.c index c5092c6..d4e446c 100644 --- a/binutils/elfcomm.c +++ b/binutils/elfcomm.c @@ -63,12 +63,12 @@ warn (const char *message, ...) va_end (args); } -void (*byte_put) (unsigned char *, elf_vma, int); +void (*byte_put) (unsigned char *, elf_vma, unsigned int); void -byte_put_little_endian (unsigned char * field, elf_vma value, int size) +byte_put_little_endian (unsigned char * field, elf_vma value, unsigned int size) { - if (size <= 0 || size > 8) + if (size > sizeof (elf_vma)) { error (_("Unhandled data length: %d\n"), size); abort (); @@ -81,9 +81,9 @@ byte_put_little_endian (unsigned char * field, elf_vma value, int size) } void -byte_put_big_endian (unsigned char * field, elf_vma value, int size) +byte_put_big_endian (unsigned char * field, elf_vma value, unsigned int size) { - if (size <= 0 || size > 8) + if (size > sizeof (elf_vma)) { error (_("Unhandled data length: %d\n"), size); abort (); @@ -95,10 +95,10 @@ byte_put_big_endian (unsigned char * field, elf_vma value, int size) } } -elf_vma (*byte_get) (const unsigned char *, int); +elf_vma (*byte_get) (const unsigned char *, unsigned int); elf_vma -byte_get_little_endian (const unsigned char *field, int size) +byte_get_little_endian (const unsigned char *field, unsigned int size) { switch (size) { @@ -121,42 +121,26 @@ byte_get_little_endian (const unsigned char *field, int size) | (((unsigned long) (field[3])) << 24); case 5: - if (sizeof (elf_vma) == 8) + if (sizeof (elf_vma) >= 8) return ((elf_vma) (field[0])) | (((elf_vma) (field[1])) << 8) | (((elf_vma) (field[2])) << 16) | (((elf_vma) (field[3])) << 24) | (((elf_vma) (field[4])) << 32); - else if (sizeof (elf_vma) == 4) - /* We want to extract data from an 8 byte wide field and - place it into a 4 byte wide field. Since this is a little - endian source we can just use the 4 byte extraction code. */ - return ((unsigned long) (field[0])) - | (((unsigned long) (field[1])) << 8) - | (((unsigned long) (field[2])) << 16) - | (((unsigned long) (field[3])) << 24); /* Fall through. */ case 6: - if (sizeof (elf_vma) == 8) + if (sizeof (elf_vma) >= 8) return ((elf_vma) (field[0])) | (((elf_vma) (field[1])) << 8) | (((elf_vma) (field[2])) << 16) | (((elf_vma) (field[3])) << 24) | (((elf_vma) (field[4])) << 32) | (((elf_vma) (field[5])) << 40); - else if (sizeof (elf_vma) == 4) - /* We want to extract data from an 8 byte wide field and - place it into a 4 byte wide field. Since this is a little - endian source we can just use the 4 byte extraction code. */ - return ((unsigned long) (field[0])) - | (((unsigned long) (field[1])) << 8) - | (((unsigned long) (field[2])) << 16) - | (((unsigned long) (field[3])) << 24); /* Fall through. */ case 7: - if (sizeof (elf_vma) == 8) + if (sizeof (elf_vma) >= 8) return ((elf_vma) (field[0])) | (((elf_vma) (field[1])) << 8) | (((elf_vma) (field[2])) << 16) @@ -164,18 +148,10 @@ byte_get_little_endian (const unsigned char *field, int size) | (((elf_vma) (field[4])) << 32) | (((elf_vma) (field[5])) << 40) | (((elf_vma) (field[6])) << 48); - else if (sizeof (elf_vma) == 4) - /* We want to extract data from an 8 byte wide field and - place it into a 4 byte wide field. Since this is a little - endian source we can just use the 4 byte extraction code. */ - return ((unsigned long) (field[0])) - | (((unsigned long) (field[1])) << 8) - | (((unsigned long) (field[2])) << 16) - | (((unsigned long) (field[3])) << 24); /* Fall through. */ case 8: - if (sizeof (elf_vma) == 8) + if (sizeof (elf_vma) >= 8) return ((elf_vma) (field[0])) | (((elf_vma) (field[1])) << 8) | (((elf_vma) (field[2])) << 16) @@ -184,14 +160,6 @@ byte_get_little_endian (const unsigned char *field, int size) | (((elf_vma) (field[5])) << 40) | (((elf_vma) (field[6])) << 48) | (((elf_vma) (field[7])) << 56); - else if (sizeof (elf_vma) == 4) - /* We want to extract data from an 8 byte wide field and - place it into a 4 byte wide field. Since this is a little - endian source we can just use the 4 byte extraction code. */ - return ((unsigned long) (field[0])) - | (((unsigned long) (field[1])) << 8) - | (((unsigned long) (field[2])) << 16) - | (((unsigned long) (field[3])) << 24); /* Fall through. */ default: @@ -201,7 +169,7 @@ byte_get_little_endian (const unsigned char *field, int size) } elf_vma -byte_get_big_endian (const unsigned char *field, int size) +byte_get_big_endian (const unsigned char *field, unsigned int size) { switch (size) { @@ -223,46 +191,26 @@ byte_get_big_endian (const unsigned char *field, int size) | (((unsigned long) (field[0])) << 24); case 5: - if (sizeof (elf_vma) == 8) + if (sizeof (elf_vma) >= 8) return ((elf_vma) (field[4])) | (((elf_vma) (field[3])) << 8) | (((elf_vma) (field[2])) << 16) | (((elf_vma) (field[1])) << 24) | (((elf_vma) (field[0])) << 32); - else if (sizeof (elf_vma) == 4) - { - /* Although we are extracting data from an 8 byte wide field, - we are returning only 4 bytes of data. */ - field += 1; - return ((unsigned long) (field[3])) - | (((unsigned long) (field[2])) << 8) - | (((unsigned long) (field[1])) << 16) - | (((unsigned long) (field[0])) << 24); - } /* Fall through. */ case 6: - if (sizeof (elf_vma) == 8) + if (sizeof (elf_vma) >= 8) return ((elf_vma) (field[5])) | (((elf_vma) (field[4])) << 8) | (((elf_vma) (field[3])) << 16) | (((elf_vma) (field[2])) << 24) | (((elf_vma) (field[1])) << 32) | (((elf_vma) (field[0])) << 40); - else if (sizeof (elf_vma) == 4) - { - /* Although we are extracting data from an 8 byte wide field, - we are returning only 4 bytes of data. */ - field += 2; - return ((unsigned long) (field[3])) - | (((unsigned long) (field[2])) << 8) - | (((unsigned long) (field[1])) << 16) - | (((unsigned long) (field[0])) << 24); - } /* Fall through. */ case 7: - if (sizeof (elf_vma) == 8) + if (sizeof (elf_vma) >= 8) return ((elf_vma) (field[6])) | (((elf_vma) (field[5])) << 8) | (((elf_vma) (field[4])) << 16) @@ -270,20 +218,10 @@ byte_get_big_endian (const unsigned char *field, int size) | (((elf_vma) (field[2])) << 32) | (((elf_vma) (field[1])) << 40) | (((elf_vma) (field[0])) << 48); - else if (sizeof (elf_vma) == 4) - { - /* Although we are extracting data from an 8 byte wide field, - we are returning only 4 bytes of data. */ - field += 3; - return ((unsigned long) (field[3])) - | (((unsigned long) (field[2])) << 8) - | (((unsigned long) (field[1])) << 16) - | (((unsigned long) (field[0])) << 24); - } /* Fall through. */ case 8: - if (sizeof (elf_vma) == 8) + if (sizeof (elf_vma) >= 8) return ((elf_vma) (field[7])) | (((elf_vma) (field[6])) << 8) | (((elf_vma) (field[5])) << 16) @@ -292,16 +230,6 @@ byte_get_big_endian (const unsigned char *field, int size) | (((elf_vma) (field[2])) << 40) | (((elf_vma) (field[1])) << 48) | (((elf_vma) (field[0])) << 56); - else if (sizeof (elf_vma) == 4) - { - /* Although we are extracting data from an 8 byte wide field, - we are returning only 4 bytes of data. */ - field += 4; - return ((unsigned long) (field[3])) - | (((unsigned long) (field[2])) << 8) - | (((unsigned long) (field[1])) << 16) - | (((unsigned long) (field[0])) << 24); - } /* Fall through. */ default: @@ -311,7 +239,7 @@ byte_get_big_endian (const unsigned char *field, int size) } elf_vma -byte_get_signed (const unsigned char *field, int size) +byte_get_signed (const unsigned char *field, unsigned int size) { elf_vma x = byte_get (field, size); @@ -339,25 +267,6 @@ byte_get_signed (const unsigned char *field, int size) } } -/* Return the high-order 32-bits and the low-order 32-bits - of an 8-byte value separately. */ - -void -byte_get_64 (const unsigned char *field, elf_vma *high, elf_vma *low) -{ - if (byte_get == byte_get_big_endian) - { - *high = byte_get_big_endian (field, 4); - *low = byte_get_big_endian (field + 4, 4); - } - else - { - *high = byte_get_little_endian (field + 4, 4); - *low = byte_get_little_endian (field, 4); - } - return; -} - /* Return the path name for a proxy entry in a thin archive, adjusted relative to the path name of the thin archive itself if necessary. Always returns a pointer to malloc'ed memory. */ |