mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-11-25 13:09:48 +00:00
fixes for elf_find_nearest_line
This commit is contained in:
parent
99f78f560a
commit
d1fad7c69e
@ -1,3 +1,9 @@
|
||||
2001-02-14 H.J. Lu <hjl@gnu.org>
|
||||
|
||||
* elf.c (elf_find_function): New function.
|
||||
(_bfd_elf_find_nearest_line): Call elf_find_function () to find
|
||||
the file name and function name.
|
||||
|
||||
2001-02-14 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* ecoff.c (bfd_debug_section): Update to initialise new fields in
|
||||
@ -118,7 +124,7 @@
|
||||
(elf64_x86_64_relocate_section): Fix addend for relocation of
|
||||
R_X86_64_(8|16|32|PC8|PC16|PC32).
|
||||
|
||||
Mon Feb 12 17:46:24 CET 2001 Jan Hubicka <jh@suse.cz>
|
||||
2001-02-12 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
* elf64-x86-64.c (x86_64_elf_howto): Fix name of R_X86_64_GOTPCREL.
|
||||
|
||||
|
113
bfd/elf.c
113
bfd/elf.c
@ -56,6 +56,10 @@ static INLINE int sym_is_global PARAMS ((bfd *, asymbol *));
|
||||
static boolean elf_map_symbols PARAMS ((bfd *));
|
||||
static bfd_size_type get_program_header_size PARAMS ((bfd *));
|
||||
static boolean elfcore_read_notes PARAMS ((bfd *, bfd_vma, bfd_vma));
|
||||
static boolean elf_find_function PARAMS ((bfd *, asection *,
|
||||
asymbol **,
|
||||
bfd_vma, const char **,
|
||||
const char **));
|
||||
|
||||
/* Swap version information in and out. The version information is
|
||||
currently size independent. If that ever changes, this code will
|
||||
@ -4710,7 +4714,7 @@ _bfd_elf_slurp_version_tables (abfd)
|
||||
Elf_Internal_Verdef *iverdefarr;
|
||||
Elf_Internal_Verdef iverdefmem;
|
||||
unsigned int i;
|
||||
unsigned int maxidx;
|
||||
int maxidx;
|
||||
|
||||
hdr = &elf_tdata (abfd)->dynverdef_hdr;
|
||||
|
||||
@ -4974,53 +4978,24 @@ _bfd_elf_set_arch_mach (abfd, arch, machine)
|
||||
return bfd_default_set_arch_mach (abfd, arch, machine);
|
||||
}
|
||||
|
||||
/* Find the nearest line to a particular section and offset, for error
|
||||
reporting. */
|
||||
/* Find the function to a particular section and offset,
|
||||
for error reporting. */
|
||||
|
||||
boolean
|
||||
_bfd_elf_find_nearest_line (abfd,
|
||||
section,
|
||||
symbols,
|
||||
offset,
|
||||
filename_ptr,
|
||||
functionname_ptr,
|
||||
line_ptr)
|
||||
bfd *abfd;
|
||||
static boolean
|
||||
elf_find_function (abfd, section, symbols, offset,
|
||||
filename_ptr, functionname_ptr)
|
||||
bfd *abfd ATTRIBUTE_UNUSED;
|
||||
asection *section;
|
||||
asymbol **symbols;
|
||||
bfd_vma offset;
|
||||
CONST char **filename_ptr;
|
||||
CONST char **functionname_ptr;
|
||||
unsigned int *line_ptr;
|
||||
{
|
||||
boolean found;
|
||||
const char *filename;
|
||||
asymbol *func;
|
||||
bfd_vma low_func;
|
||||
asymbol **p;
|
||||
|
||||
if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset,
|
||||
filename_ptr, functionname_ptr,
|
||||
line_ptr))
|
||||
return true;
|
||||
|
||||
if (_bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
|
||||
filename_ptr, functionname_ptr,
|
||||
line_ptr, 0,
|
||||
&elf_tdata (abfd)->dwarf2_find_line_info))
|
||||
return true;
|
||||
|
||||
if (! _bfd_stab_section_find_nearest_line (abfd, symbols, section, offset,
|
||||
&found, filename_ptr,
|
||||
functionname_ptr, line_ptr,
|
||||
&elf_tdata (abfd)->line_info))
|
||||
return false;
|
||||
if (found)
|
||||
return true;
|
||||
|
||||
if (symbols == NULL)
|
||||
return false;
|
||||
|
||||
filename = NULL;
|
||||
func = NULL;
|
||||
low_func = 0;
|
||||
@ -5057,8 +5032,70 @@ _bfd_elf_find_nearest_line (abfd,
|
||||
if (func == NULL)
|
||||
return false;
|
||||
|
||||
*filename_ptr = filename;
|
||||
*functionname_ptr = bfd_asymbol_name (func);
|
||||
if (filename_ptr)
|
||||
*filename_ptr = filename;
|
||||
if (functionname_ptr)
|
||||
*functionname_ptr = bfd_asymbol_name (func);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Find the nearest line to a particular section and offset,
|
||||
for error reporting. */
|
||||
|
||||
boolean
|
||||
_bfd_elf_find_nearest_line (abfd, section, symbols, offset,
|
||||
filename_ptr, functionname_ptr, line_ptr)
|
||||
bfd *abfd;
|
||||
asection *section;
|
||||
asymbol **symbols;
|
||||
bfd_vma offset;
|
||||
CONST char **filename_ptr;
|
||||
CONST char **functionname_ptr;
|
||||
unsigned int *line_ptr;
|
||||
{
|
||||
boolean found;
|
||||
|
||||
if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset,
|
||||
filename_ptr, functionname_ptr,
|
||||
line_ptr))
|
||||
{
|
||||
if (!*functionname_ptr)
|
||||
elf_find_function (abfd, section, symbols, offset,
|
||||
*filename_ptr ? NULL : filename_ptr,
|
||||
functionname_ptr);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
if (_bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
|
||||
filename_ptr, functionname_ptr,
|
||||
line_ptr, 0,
|
||||
&elf_tdata (abfd)->dwarf2_find_line_info))
|
||||
{
|
||||
if (!*functionname_ptr)
|
||||
elf_find_function (abfd, section, symbols, offset,
|
||||
*filename_ptr ? NULL : filename_ptr,
|
||||
functionname_ptr);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
if (! _bfd_stab_section_find_nearest_line (abfd, symbols, section, offset,
|
||||
&found, filename_ptr,
|
||||
functionname_ptr, line_ptr,
|
||||
&elf_tdata (abfd)->line_info))
|
||||
return false;
|
||||
if (found)
|
||||
return true;
|
||||
|
||||
if (symbols == NULL)
|
||||
return false;
|
||||
|
||||
if (! elf_find_function (abfd, section, symbols, offset,
|
||||
filename_ptr, functionname_ptr))
|
||||
return false;
|
||||
|
||||
*line_ptr = 0;
|
||||
return true;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user