mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-03-19 13:51:44 +08:00
2006-01-17 H.J. Lu <hongjiu.lu@intel.com>
PR binutils/2096 * dwarf2.c (comp_unit_contains_address): Update comment. (_bfd_dwarf2_find_nearest_line): Use section's vma, instead of lma. Return TRUE only if both comp_unit_contains_address and comp_unit_find_nearest_line return TRUE. (_bfd_dwarf2_find_line): Use section's vma, instead of lma.
This commit is contained in:
parent
64d03ab565
commit
6dd55cb711
@ -1,3 +1,12 @@
|
||||
2006-01-17 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR binutils/2096
|
||||
* dwarf2.c (comp_unit_contains_address): Update comment.
|
||||
(_bfd_dwarf2_find_nearest_line): Use section's vma, instead of
|
||||
lma. Return TRUE only if both comp_unit_contains_address and
|
||||
comp_unit_find_nearest_line return TRUE.
|
||||
(_bfd_dwarf2_find_line): Use section's vma, instead of lma.
|
||||
|
||||
2006-01-18 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* elf-bfd.h (struct elf_backend_data): Add gc_mark_dynamic_ref.
|
||||
|
51
bfd/dwarf2.c
51
bfd/dwarf2.c
@ -2006,7 +2006,11 @@ parse_comp_unit (bfd *abfd,
|
||||
return unit;
|
||||
}
|
||||
|
||||
/* Return TRUE if UNIT contains the address given by ADDR. */
|
||||
/* Return TRUE if UNIT may contain the address given by ADDR. When
|
||||
there are functions written entirely with inline asm statements, the
|
||||
range info in the compilation unit header may not be correct. We
|
||||
need to consult the line info table to see if a compilation unit
|
||||
really contains the given address. */
|
||||
|
||||
static bfd_boolean
|
||||
comp_unit_contains_address (struct comp_unit *unit, bfd_vma addr)
|
||||
@ -2210,9 +2214,9 @@ _bfd_dwarf2_find_nearest_line (bfd *abfd,
|
||||
stash = *pinfo;
|
||||
addr = offset;
|
||||
if (section->output_section)
|
||||
addr += section->output_section->lma + section->output_offset;
|
||||
addr += section->output_section->vma + section->output_offset;
|
||||
else
|
||||
addr += section->lma;
|
||||
addr += section->vma;
|
||||
*filename_ptr = NULL;
|
||||
*functionname_ptr = NULL;
|
||||
*linenumber_ptr = 0;
|
||||
@ -2293,16 +2297,16 @@ _bfd_dwarf2_find_nearest_line (bfd *abfd,
|
||||
|
||||
/* Check the previously read comp. units first. */
|
||||
for (each = stash->all_comp_units; each; each = each->next_unit)
|
||||
if (comp_unit_contains_address (each, addr))
|
||||
return comp_unit_find_nearest_line (each, addr, filename_ptr,
|
||||
functionname_ptr, linenumber_ptr,
|
||||
stash);
|
||||
if (comp_unit_contains_address (each, addr)
|
||||
&& comp_unit_find_nearest_line (each, addr, filename_ptr,
|
||||
functionname_ptr,
|
||||
linenumber_ptr, stash))
|
||||
return TRUE;
|
||||
|
||||
/* Read each remaining comp. units checking each as they are read. */
|
||||
while (stash->info_ptr < stash->info_ptr_end)
|
||||
{
|
||||
bfd_vma length;
|
||||
bfd_boolean found;
|
||||
unsigned int offset_size = addr_size;
|
||||
bfd_byte *info_ptr_unit = stash->info_ptr;
|
||||
|
||||
@ -2358,25 +2362,14 @@ _bfd_dwarf2_find_nearest_line (bfd *abfd,
|
||||
unit->high == 0), we need to consult the line info
|
||||
table to see if a compilation unit contains the given
|
||||
address. */
|
||||
if (each->arange.high > 0)
|
||||
{
|
||||
if (comp_unit_contains_address (each, addr))
|
||||
return comp_unit_find_nearest_line (each, addr,
|
||||
filename_ptr,
|
||||
functionname_ptr,
|
||||
linenumber_ptr,
|
||||
stash);
|
||||
}
|
||||
else
|
||||
{
|
||||
found = comp_unit_find_nearest_line (each, addr,
|
||||
filename_ptr,
|
||||
functionname_ptr,
|
||||
linenumber_ptr,
|
||||
stash);
|
||||
if (found)
|
||||
return TRUE;
|
||||
}
|
||||
if ((each->arange.high == 0
|
||||
|| comp_unit_contains_address (each, addr))
|
||||
&& comp_unit_find_nearest_line (each, addr,
|
||||
filename_ptr,
|
||||
functionname_ptr,
|
||||
linenumber_ptr,
|
||||
stash))
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2419,9 +2412,9 @@ _bfd_dwarf2_find_line (bfd *abfd,
|
||||
|
||||
addr = symbol->value;
|
||||
if (section->output_section)
|
||||
addr += section->output_section->lma + section->output_offset;
|
||||
addr += section->output_section->vma + section->output_offset;
|
||||
else
|
||||
addr += section->lma;
|
||||
addr += section->vma;
|
||||
|
||||
*filename_ptr = NULL;
|
||||
stash = *pinfo;
|
||||
|
Loading…
x
Reference in New Issue
Block a user