From ecb651f0ab4f2fa2cf03f04f41fad957e5579f9a Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Wed, 23 Feb 2000 22:27:55 +0000 Subject: [PATCH] Accept 16-bit addresses. --- bfd/ChangeLog | 5 +++++ bfd/dwarf2.c | 24 +++++++++++++----------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 6613b47f94..3534c54bb8 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2000-02-23 Stephane Carrez + + * dwarf2.c (read_address): Read 16-bits addresses. + (parse_comp_unit): Accept addr_size == 2. + 2000-02-23 Alan Modra * bfd-in.h: Update copyright date. diff --git a/bfd/dwarf2.c b/bfd/dwarf2.c index 888757edf8..4e3356ba33 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) { -- 2.34.1