diff options
author | H.J. Lu <hjl@lucon.org> | 2005-01-17 17:12:00 +0000 |
---|---|---|
committer | H.J. Lu <hjl@lucon.org> | 2005-01-17 17:12:00 +0000 |
commit | 44c8fa124310859dba6073ac56a28b643d6406cb (patch) | |
tree | 9c52bc6bb7d470225da94b74018708c1bf16dd45 /bfd/libbfd.c | |
parent | 629f41fe59eac2f8a44b435a5ea2d0a84de3572c (diff) | |
download | gdb-44c8fa124310859dba6073ac56a28b643d6406cb.tar.gz |
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 2791ca32a70..b2f83c45030 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; +} |