mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-08-05 21:50:21 +08:00
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.
This commit is contained in:
@ -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. */
|
||||
|
Reference in New Issue
Block a user