summaryrefslogtreecommitdiff
path: root/bfd/libbfd.c
diff options
context:
space:
mode:
authorH.J. Lu <hjl@lucon.org>2005-01-17 17:12:00 +0000
committerH.J. Lu <hjl@lucon.org>2005-01-17 17:12:00 +0000
commitbeea30729f5b3d94347c36afbc17fb7d1f4217eb (patch)
tree02ce174d42938d332fc4dd0f483de204168c95f8 /bfd/libbfd.c
parentafcc49547b768355bd30c75f0ef22140418a8a6e (diff)
downloadbinutils-redhat-beea30729f5b3d94347c36afbc17fb7d1f4217eb.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.c58
1 files changed, 58 insertions, 0 deletions
diff --git a/bfd/libbfd.c b/bfd/libbfd.c
index 2791ca32a7..b2f83c4503 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;
+}