summaryrefslogtreecommitdiff
path: root/bfd/dwarf2.c
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2000-02-23 22:27:55 +0000
committerNick Clifton <nickc@redhat.com>2000-02-23 22:27:55 +0000
commitb3ff11ff6fb7e788e3d0d7773ae43daeff8928af (patch)
treea06d119eec61f8aaf0efc0c39adcd9fd02c35d30 /bfd/dwarf2.c
parentd8d726e025239acbd2cea7ad5ddb0c9bb825c8ad (diff)
downloadgdb-b3ff11ff6fb7e788e3d0d7773ae43daeff8928af.tar.gz
Accept 16-bit addresses.
Diffstat (limited to 'bfd/dwarf2.c')
-rw-r--r--bfd/dwarf2.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/bfd/dwarf2.c b/bfd/dwarf2.c
index 888757edf82..4e3356ba337 100644
--- a/bfd/dwarf2.c
+++ b/bfd/dwarf2.c
@@ -1,5 +1,5 @@
/* DWARF 2 support.
- Copyright 1994, 95, 96, 97, 98, 1999 Free Software Foundation, Inc.
+ Copyright 1994, 95, 96, 97, 98, 99, 2000 Free Software Foundation, Inc.
Adapted from gdb/dwarf2read.c by Gavin Koch of Cygnus Solutions
(gavin@cygnus.com).
@@ -336,15 +336,17 @@ read_address (unit, buf)
struct comp_unit* unit;
char *buf;
{
- bfd_vma retval = 0;
-
- if (unit->addr_size == 4)
+ switch (unit->addr_size)
{
- retval = bfd_get_32 (unit->abfd, (bfd_byte *) buf);
- } else {
- retval = bfd_get_64 (unit->abfd, (bfd_byte *) buf);
+ case 8:
+ return bfd_get_64 (unit->abfd, (bfd_byte *) buf);
+ case 4:
+ return bfd_get_32 (unit->abfd, (bfd_byte *) buf);
+ case 2:
+ return bfd_get_16 (unit->abfd, (bfd_byte *) buf);
+ default:
+ abort ();
}
- return retval;
}
@@ -1277,9 +1279,9 @@ parse_comp_unit (abfd, info_ptr, end_ptr, abbrev_length)
return 0;
}
- if (addr_size != 4 && addr_size != 8)
+ if (addr_size != 2 && addr_size != 4 && addr_size != 8)
{
- (*_bfd_error_handler) ("Dwarf Error: found address size '%u', this reader can only handle address sizes '4' and '8'.", addr_size );
+ (*_bfd_error_handler) ("Dwarf Error: found address size '%u', this reader can only handle address sizes '2', '4' and '8'.", addr_size );
bfd_set_error (bfd_error_bad_value);
return 0;
}
@@ -1494,7 +1496,7 @@ _bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
However, some compilers do things differently. */
if (addr_size == 0)
addr_size = 4;
- BFD_ASSERT (addr_size == 4 || addr_size == 8);
+ BFD_ASSERT (addr_size == 2 || addr_size == 4 || addr_size == 8);
if (! stash)
{