From 024b2372f5188ed4d7cd9ee5383594063a54cc93 Mon Sep 17 00:00:00 2001 From: Carlos O'Donell Date: Fri, 23 Feb 2007 17:38:07 +0000 Subject: [PATCH] bfd/ 2007-02-23 Carlos O'Donell * dwarf2.c (_bfd_dwarf2_find_nearest_line): Assume 32-bit DWARF even with 64-bit addresses. (_bfd_dwarf2_find_nearest_line): Likewise. --- bfd/ChangeLog | 6 ++++++ bfd/dwarf2.c | 32 ++++++++++++++++++++++---------- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 7b35206e4aa..adde10365c4 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2007-02-23 Carlos O'Donell + + * dwarf2.c (_bfd_dwarf2_find_nearest_line): Assume 32-bit + DWARF even with 64-bit addresses. + (_bfd_dwarf2_find_nearest_line): Likewise. + 2007-02-23 Nick Clifton PR binutils/3535 diff --git a/bfd/dwarf2.c b/bfd/dwarf2.c index 059e90334d8..119689b33cb 100644 --- a/bfd/dwarf2.c +++ b/bfd/dwarf2.c @@ -2469,13 +2469,19 @@ _bfd_dwarf2_find_nearest_line (bfd *abfd, length = read_4_bytes (abfd, stash->info_ptr + 4); stash->info_ptr += 8; } - /* In the absence of the hints above, we assume addr_size-sized - offsets, for backward-compatibility with pre-DWARF3 64-bit - platforms. */ + /* In the absence of the hints above, we assume 32-bit DWARF2 + offsets even for targets with 64-bit addresses, because: + a) most of the time these targets will not have generated + more than 2Gb of debug info and so will not need 64-bit + offsets, + and + b) if they do use 64-bit offsets but they are not using + the size hints that are tested for above then they are + not conforming to the DWARF3 standard anyway. */ else if (addr_size == 8) { - length = read_8_bytes (abfd, stash->info_ptr); - stash->info_ptr += 8; + offset_size = 4; + stash->info_ptr += 4; } else stash->info_ptr += 4; @@ -2692,13 +2698,19 @@ _bfd_dwarf2_find_line (bfd *abfd, length = read_4_bytes (abfd, stash->info_ptr + 4); stash->info_ptr += 8; } - /* In the absence of the hints above, we assume addr_size-sized - offsets, for backward-compatibility with pre-DWARF3 64-bit - platforms. */ + /* In the absence of the hints above, we assume 32-bit DWARF2 + offsets even for targets with 64-bit addresses, because: + a) most of the time these targets will not have generated + more than 2Gb of debug info and so will not need 64-bit + offsets, + and + b) if they do use 64-bit offsets but they are not using + the size hints that are tested for above then they are + not conforming to the DWARF3 standard anyway. */ else if (addr_size == 8) { - length = read_8_bytes (abfd, stash->info_ptr); - stash->info_ptr += 8; + offset_size = 4; + stash->info_ptr += 4; } else stash->info_ptr += 4;