diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2005-01-17 17:12:00 +0000 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2005-01-17 17:12:00 +0000 |
commit | c0c28ab8b2757069a1abf73fcb4714f077e76995 (patch) | |
tree | 686027415dd9fb54b14f026b032457cea5376965 /bfd/libbfd.c | |
parent | 4bcff7eb8534c90270f0b574a244d99648906f36 (diff) | |
download | gdb-c0c28ab8b2757069a1abf73fcb4714f077e76995.zip gdb-c0c28ab8b2757069a1abf73fcb4714f077e76995.tar.gz gdb-c0c28ab8b2757069a1abf73fcb4714f077e76995.tar.bz2 |
2005-01-17 H.J. Lu <hongjiu.lu@intel.com>
* dwarf2.c (dwarf2_debug): Move info_ptr_unit to ...
(comp_unit): Here.
(read_unsigned_leb128): Removed.
(read_signed_leb128): Removed.
(find_abstract_instance_name): Updated.
(parse_comp_unit): Accept info_ptr_unit.
(_bfd_dwarf2_find_nearest_line): Set info_ptr_unit for each
comp unit and pass it to parse_comp_unit.
* elf-eh-frame.c (read_unsigned_leb128): Moved to ...
(read_signed_leb128): Moved to ...
* libbfd.c: Here.
* libbfd-in.h (read_unsigned_leb128): New prototype.
(read_signed_leb128): Likewise.
* libbfd.h: Regenerated.
Diffstat (limited to 'bfd/libbfd.c')
-rw-r--r-- | bfd/libbfd.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/bfd/libbfd.c b/bfd/libbfd.c index 2791ca3..b2f83c4 100644 --- a/bfd/libbfd.c +++ b/bfd/libbfd.c @@ -860,3 +860,61 @@ warn_deprecated (const char *what, mask |= ~(size_t) func; } } + +/* Helper function for reading uleb128 encoded data. */ + +bfd_vma +read_unsigned_leb128 (bfd *abfd ATTRIBUTE_UNUSED, + char *buf, + unsigned int *bytes_read_ptr) +{ + bfd_vma result; + unsigned int num_read; + int shift; + unsigned char byte; + + result = 0; + shift = 0; + num_read = 0; + do + { + byte = bfd_get_8 (abfd, (bfd_byte *) buf); + buf++; + num_read++; + result |= (((bfd_vma) byte & 0x7f) << shift); + shift += 7; + } + while (byte & 0x80); + *bytes_read_ptr = num_read; + return result; +} + +/* Helper function for reading sleb128 encoded data. */ + +bfd_signed_vma +read_signed_leb128 (bfd *abfd ATTRIBUTE_UNUSED, + char *buf, + unsigned int * bytes_read_ptr) +{ + bfd_vma result; + int shift; + int num_read; + unsigned char byte; + + result = 0; + shift = 0; + num_read = 0; + do + { + byte = bfd_get_8 (abfd, (bfd_byte *) buf); + buf ++; + num_read ++; + result |= (((bfd_vma) byte & 0x7f) << shift); + shift += 7; + } + while (byte & 0x80); + if ((shift < 8 * sizeof (result)) && (byte & 0x40)) + result |= (((bfd_vma) -1) << shift); + *bytes_read_ptr = num_read; + return result; +} |