mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-11-27 14:00:30 +00:00
2011-09-30 Tristan Gingold <gingold@adacore.com>
* dwarf2.c (struct dwarf2_debug): Add field debug_sections. (read_section): Add sec argument. Adjust the code to get section names from it. (read_indirect_string): Adjust call to read_section. (read_abbrevs): Ditto. (decode_line_info): Ditto. (read_debug_ranges): Ditto. (DWARF2_DEBUG_INFO, DWARF2_COMPRESSED_DEBUG_INFO): Remove. (find_debug_info): Add debug_sections parameter. Use it instead the above macros. (place_sections): Get section names from stash. (find_line): Add debug_sections argument. Initialize debug_sections field of stash from it. Adjust calls to find_debug_info. (_bfd_dwarf2_find_nearest_line): Add debug_sections argument. Adjust call to find_line. (_bfd_dwarf2_find_line): Adjust call to find_line. * libcoff-in.h (struct dwarf_debug_section): New declaration. (coff_find_nearest_line_with_names): Likewise. * libcoff.h: Regenerate. * libbfd-in.h (struct dwarf_debug_section): Move declaration. (dwarf_debug_sections): Likewise. (_bfd_dwarf2_find_nearest_line): Add debug_sections argument. * libbfd.h: Regenerate. * elf.c (_bfd_elf_find_nearest_line): Adjust call to _bfd_dwarf2_find_nearest_line. * elfxx-mips.c (_bfd_mips_elf_find_nearest_line): Ditto. * elf64-alpha.c (elf64_alpha_find_nearest_line): Ditto. * elf32-arm.c (elf32_arm_find_nearest_line): Ditto. * coffgen.c (coff_find_nearest_line_with_names): New function. (coff_find_nearest_line): Calls coff_find_nearest_line_with_names. * coff-rs6000.c (xcoff_debug_sections): New constant. (xcoff_find_nearest_line): New function. (rs6000coff_vec): Use xcoff_find_nearest_line. (pmac_xcoff_vec): Ditto.
This commit is contained in:
parent
9852805258
commit
fc28f9aa23
@ -1,3 +1,41 @@
|
||||
2011-09-30 Tristan Gingold <gingold@adacore.com>
|
||||
|
||||
* dwarf2.c (struct dwarf2_debug): Add field debug_sections.
|
||||
(read_section): Add sec argument. Adjust the code to get section
|
||||
names from it.
|
||||
(read_indirect_string): Adjust call to read_section.
|
||||
(read_abbrevs): Ditto.
|
||||
(decode_line_info): Ditto.
|
||||
(read_debug_ranges): Ditto.
|
||||
(DWARF2_DEBUG_INFO, DWARF2_COMPRESSED_DEBUG_INFO): Remove.
|
||||
(find_debug_info): Add debug_sections parameter. Use it instead
|
||||
the above macros.
|
||||
(place_sections): Get section names from stash.
|
||||
(find_line): Add debug_sections argument. Initialize
|
||||
debug_sections field of stash from it.
|
||||
Adjust calls to find_debug_info.
|
||||
(_bfd_dwarf2_find_nearest_line): Add debug_sections argument.
|
||||
Adjust call to find_line.
|
||||
(_bfd_dwarf2_find_line): Adjust call to find_line.
|
||||
* libcoff-in.h (struct dwarf_debug_section): New declaration.
|
||||
(coff_find_nearest_line_with_names): Likewise.
|
||||
* libcoff.h: Regenerate.
|
||||
* libbfd-in.h (struct dwarf_debug_section): Move declaration.
|
||||
(dwarf_debug_sections): Likewise.
|
||||
(_bfd_dwarf2_find_nearest_line): Add debug_sections argument.
|
||||
* libbfd.h: Regenerate.
|
||||
* elf.c (_bfd_elf_find_nearest_line): Adjust call to
|
||||
_bfd_dwarf2_find_nearest_line.
|
||||
* elfxx-mips.c (_bfd_mips_elf_find_nearest_line): Ditto.
|
||||
* elf64-alpha.c (elf64_alpha_find_nearest_line): Ditto.
|
||||
* elf32-arm.c (elf32_arm_find_nearest_line): Ditto.
|
||||
* coffgen.c (coff_find_nearest_line_with_names): New function.
|
||||
(coff_find_nearest_line): Calls coff_find_nearest_line_with_names.
|
||||
* coff-rs6000.c (xcoff_debug_sections): New constant.
|
||||
(xcoff_find_nearest_line): New function.
|
||||
(rs6000coff_vec): Use xcoff_find_nearest_line.
|
||||
(pmac_xcoff_vec): Ditto.
|
||||
|
||||
2011-09-30 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR ld/13235
|
||||
|
@ -405,6 +405,50 @@ _bfd_xcoff_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED,
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static const struct dwarf_debug_section xcoff_debug_sections[] =
|
||||
{
|
||||
{ ".dwabrev", NULL },
|
||||
{ ".dwarnge", NULL },
|
||||
{ NULL, NULL }, /* .debug_frame */
|
||||
{ ".dwinfo", NULL },
|
||||
{ ".dwline", NULL },
|
||||
{ NULL, NULL }, /* .debug_loc */
|
||||
{ NULL, NULL }, /* .debug_macinfo */
|
||||
{ NULL, NULL }, /* .debug_macro */
|
||||
{ ".dwpbnms", NULL },
|
||||
{ ".dwpbtyp", NULL },
|
||||
{ ".dwrnges", NULL },
|
||||
{ NULL, NULL }, /* .debug_static_func */
|
||||
{ NULL, NULL }, /* .debug_static_vars */
|
||||
{ ".dwstr", NULL },
|
||||
{ NULL, NULL }, /* .debug_types */
|
||||
/* GNU DWARF 1 extensions */
|
||||
{ NULL, NULL }, /* .debug_sfnames */
|
||||
{ NULL, NULL }, /* .debug_srcinfo */
|
||||
/* SGI/MIPS DWARF 2 extensions */
|
||||
{ NULL, NULL }, /* .debug_funcnames */
|
||||
{ NULL, NULL }, /* .debug_typenames */
|
||||
{ NULL, NULL }, /* .debug_varnames */
|
||||
{ NULL, NULL }, /* .debug_weaknames */
|
||||
{ NULL, NULL },
|
||||
};
|
||||
|
||||
static bfd_boolean
|
||||
xcoff_find_nearest_line (bfd *abfd,
|
||||
asection *section,
|
||||
asymbol **symbols,
|
||||
bfd_vma offset,
|
||||
const char **filename_ptr,
|
||||
const char **functionname_ptr,
|
||||
unsigned int *line_ptr)
|
||||
{
|
||||
return coff_find_nearest_line_with_names (abfd, xcoff_debug_sections,
|
||||
section, symbols, offset,
|
||||
filename_ptr, functionname_ptr,
|
||||
line_ptr);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_bfd_xcoff_swap_sym_in (bfd *abfd, PTR ext1, PTR in1)
|
||||
@ -4073,7 +4117,7 @@ const bfd_target rs6000coff_vec =
|
||||
_bfd_xcoff_is_local_label_name,
|
||||
coff_bfd_is_target_special_symbol,
|
||||
coff_get_lineno,
|
||||
coff_find_nearest_line,
|
||||
xcoff_find_nearest_line,
|
||||
_bfd_generic_find_line,
|
||||
coff_find_inliner_info,
|
||||
coff_bfd_make_debug_symbol,
|
||||
@ -4328,7 +4372,7 @@ const bfd_target pmac_xcoff_vec =
|
||||
_bfd_xcoff_is_local_label_name,
|
||||
coff_bfd_is_target_special_symbol,
|
||||
coff_get_lineno,
|
||||
coff_find_nearest_line,
|
||||
xcoff_find_nearest_line,
|
||||
_bfd_generic_find_line,
|
||||
coff_find_inliner_info,
|
||||
coff_bfd_make_debug_symbol,
|
||||
|
@ -2085,13 +2085,14 @@ _bfd_coff_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED,
|
||||
nearest to the wanted location. */
|
||||
|
||||
bfd_boolean
|
||||
coff_find_nearest_line (bfd *abfd,
|
||||
asection *section,
|
||||
asymbol **symbols,
|
||||
bfd_vma offset,
|
||||
const char **filename_ptr,
|
||||
const char **functionname_ptr,
|
||||
unsigned int *line_ptr)
|
||||
coff_find_nearest_line_with_names (bfd *abfd,
|
||||
const struct dwarf_debug_section *debug_sections,
|
||||
asection *section,
|
||||
asymbol **symbols,
|
||||
bfd_vma offset,
|
||||
const char **filename_ptr,
|
||||
const char **functionname_ptr,
|
||||
unsigned int *line_ptr)
|
||||
{
|
||||
bfd_boolean found;
|
||||
unsigned int i;
|
||||
@ -2116,7 +2117,8 @@ coff_find_nearest_line (bfd *abfd,
|
||||
return TRUE;
|
||||
|
||||
/* Also try examining DWARF2 debugging information. */
|
||||
if (_bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
|
||||
if (_bfd_dwarf2_find_nearest_line (abfd, debug_sections,
|
||||
section, symbols, offset,
|
||||
filename_ptr, functionname_ptr,
|
||||
line_ptr, 0,
|
||||
&coff_data(abfd)->dwarf2_find_line_info))
|
||||
@ -2298,6 +2300,21 @@ coff_find_nearest_line (bfd *abfd,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bfd_boolean
|
||||
coff_find_nearest_line (bfd *abfd,
|
||||
asection *section,
|
||||
asymbol **symbols,
|
||||
bfd_vma offset,
|
||||
const char **filename_ptr,
|
||||
const char **functionname_ptr,
|
||||
unsigned int *line_ptr)
|
||||
{
|
||||
return coff_find_nearest_line_with_names (abfd, dwarf_debug_sections,
|
||||
section, symbols, offset,
|
||||
filename_ptr, functionname_ptr,
|
||||
line_ptr);
|
||||
}
|
||||
|
||||
bfd_boolean
|
||||
coff_find_inliner_info (bfd *abfd,
|
||||
const char **filename_ptr,
|
||||
|
86
bfd/dwarf2.c
86
bfd/dwarf2.c
@ -90,6 +90,9 @@ struct dwarf2_debug
|
||||
/* Last comp unit in list above. */
|
||||
struct comp_unit *last_comp_unit;
|
||||
|
||||
/* Names of the debug sections. */
|
||||
const struct dwarf_debug_section *debug_sections;
|
||||
|
||||
/* The next unread compilation unit within the .debug_info section.
|
||||
Zero indicates that the .debug_info section has not been loaded
|
||||
into a buffer yet. */
|
||||
@ -469,14 +472,14 @@ lookup_info_hash_table (struct info_hash_table *hash_table, const char *key)
|
||||
|
||||
static bfd_boolean
|
||||
read_section (bfd * abfd,
|
||||
enum dwarf_debug_section_enum sec,
|
||||
const struct dwarf_debug_section *sec,
|
||||
asymbol ** syms,
|
||||
bfd_uint64_t offset,
|
||||
bfd_byte ** section_buffer,
|
||||
bfd_size_type * section_size)
|
||||
{
|
||||
asection *msec;
|
||||
const char *section_name = dwarf_debug_sections[sec].uncompressed_name;
|
||||
const char *section_name = sec->uncompressed_name;
|
||||
|
||||
/* read_section is a noop if the section has already been read. */
|
||||
if (!*section_buffer)
|
||||
@ -484,12 +487,14 @@ read_section (bfd * abfd,
|
||||
msec = bfd_get_section_by_name (abfd, section_name);
|
||||
if (! msec)
|
||||
{
|
||||
section_name = dwarf_debug_sections[sec].compressed_name;
|
||||
msec = bfd_get_section_by_name (abfd, section_name);
|
||||
section_name = sec->compressed_name;
|
||||
if (section_name != NULL)
|
||||
msec = bfd_get_section_by_name (abfd, section_name);
|
||||
}
|
||||
if (! msec)
|
||||
{
|
||||
(*_bfd_error_handler) (_("Dwarf Error: Can't find %s section."), section_name);
|
||||
(*_bfd_error_handler) (_("Dwarf Error: Can't find %s section."),
|
||||
sec->uncompressed_name);
|
||||
bfd_set_error (bfd_error_bad_value);
|
||||
return FALSE;
|
||||
}
|
||||
@ -606,7 +611,8 @@ read_indirect_string (struct comp_unit * unit,
|
||||
|
||||
*bytes_read_ptr = unit->offset_size;
|
||||
|
||||
if (! read_section (unit->abfd, debug_str, stash->syms, offset,
|
||||
if (! read_section (unit->abfd, &stash->debug_sections[debug_str],
|
||||
stash->syms, offset,
|
||||
&stash->dwarf_str_buffer, &stash->dwarf_str_size))
|
||||
return NULL;
|
||||
|
||||
@ -688,7 +694,8 @@ read_abbrevs (bfd *abfd, bfd_uint64_t offset, struct dwarf2_debug *stash)
|
||||
unsigned int abbrev_form, hash_number;
|
||||
bfd_size_type amt;
|
||||
|
||||
if (! read_section (abfd, debug_abbrev, stash->syms, offset,
|
||||
if (! read_section (abfd, &stash->debug_sections[debug_abbrev],
|
||||
stash->syms, offset,
|
||||
&stash->dwarf_abbrev_buffer, &stash->dwarf_abbrev_size))
|
||||
return NULL;
|
||||
|
||||
@ -1396,7 +1403,8 @@ decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
|
||||
unsigned char op_code, extended_op, adj_opcode;
|
||||
bfd_size_type amt;
|
||||
|
||||
if (! read_section (abfd, debug_line, stash->syms, unit->line_offset,
|
||||
if (! read_section (abfd, &stash->debug_sections[debug_line],
|
||||
stash->syms, unit->line_offset,
|
||||
&stash->dwarf_line_buffer, &stash->dwarf_line_size))
|
||||
return NULL;
|
||||
|
||||
@ -1811,7 +1819,8 @@ static bfd_boolean
|
||||
read_debug_ranges (struct comp_unit *unit)
|
||||
{
|
||||
struct dwarf2_debug *stash = unit->stash;
|
||||
return read_section (unit->abfd, debug_ranges, stash->syms, 0,
|
||||
return read_section (unit->abfd, &stash->debug_sections[debug_ranges],
|
||||
stash->syms, 0,
|
||||
&stash->dwarf_ranges_buffer, &stash->dwarf_ranges_size);
|
||||
}
|
||||
|
||||
@ -2717,18 +2726,18 @@ comp_unit_hash_info (struct dwarf2_debug *stash,
|
||||
/* Locate a section in a BFD containing debugging info. The search starts
|
||||
from the section after AFTER_SEC, or from the first section in the BFD if
|
||||
AFTER_SEC is NULL. The search works by examining the names of the
|
||||
sections. There are two permissiable names. The first is .debug_info.
|
||||
This is the standard DWARF2 name. The second is a prefix .gnu.linkonce.wi.
|
||||
sections. There are three permissiable names. The first two are given
|
||||
by DEBUG_SECTIONS[debug_info] (whose standard DWARF2 names are .debug_info
|
||||
and .zdebug_info). The third is a prefix .gnu.linkonce.wi.
|
||||
This is a variation on the .debug_info section which has a checksum
|
||||
describing the contents appended onto the name. This allows the linker to
|
||||
identify and discard duplicate debugging sections for different
|
||||
compilation units. */
|
||||
#define DWARF2_DEBUG_INFO ".debug_info"
|
||||
#define DWARF2_COMPRESSED_DEBUG_INFO ".zdebug_info"
|
||||
#define GNU_LINKONCE_INFO ".gnu.linkonce.wi."
|
||||
|
||||
static asection *
|
||||
find_debug_info (bfd *abfd, asection *after_sec)
|
||||
find_debug_info (bfd *abfd, const struct dwarf_debug_section *debug_sections,
|
||||
asection *after_sec)
|
||||
{
|
||||
asection * msec;
|
||||
|
||||
@ -2736,10 +2745,13 @@ find_debug_info (bfd *abfd, asection *after_sec)
|
||||
|
||||
while (msec)
|
||||
{
|
||||
if (strcmp (msec->name, DWARF2_DEBUG_INFO) == 0)
|
||||
if (strcmp (msec->name,
|
||||
debug_sections[debug_info].uncompressed_name) == 0)
|
||||
return msec;
|
||||
|
||||
if (strcmp (msec->name, DWARF2_COMPRESSED_DEBUG_INFO) == 0)
|
||||
if (debug_sections[debug_info].compressed_name != NULL
|
||||
&& strcmp (msec->name,
|
||||
debug_sections[debug_info].compressed_name) == 0)
|
||||
return msec;
|
||||
|
||||
if (CONST_STRNEQ (msec->name, GNU_LINKONCE_INFO))
|
||||
@ -2786,7 +2798,9 @@ place_sections (bfd *abfd, struct dwarf2_debug *stash)
|
||||
asection *sect;
|
||||
bfd_vma last_vma = 0, last_dwarf = 0;
|
||||
bfd_size_type amt;
|
||||
const char *debug_info_name;
|
||||
|
||||
debug_info_name = stash->debug_sections[debug_info].uncompressed_name;
|
||||
i = 0;
|
||||
for (sect = abfd->sections; sect != NULL; sect = sect->next)
|
||||
{
|
||||
@ -2799,7 +2813,7 @@ place_sections (bfd *abfd, struct dwarf2_debug *stash)
|
||||
/* We need to adjust the VMAs of any .debug_info sections.
|
||||
Skip compressed ones, since no relocations could target
|
||||
them - they should not appear in object files anyway. */
|
||||
if (strcmp (sect->name, DWARF2_DEBUG_INFO) == 0)
|
||||
if (strcmp (sect->name, debug_info_name) == 0)
|
||||
is_debug_info = 1;
|
||||
else if (CONST_STRNEQ (sect->name, GNU_LINKONCE_INFO))
|
||||
is_debug_info = 1;
|
||||
@ -2835,7 +2849,7 @@ place_sections (bfd *abfd, struct dwarf2_debug *stash)
|
||||
/* We need to adjust the VMAs of any .debug_info sections.
|
||||
Skip compressed ones, since no relocations could target
|
||||
them - they should not appear in object files anyway. */
|
||||
if (strcmp (sect->name, DWARF2_DEBUG_INFO) == 0)
|
||||
if (strcmp (sect->name, debug_info_name) == 0)
|
||||
is_debug_info = 1;
|
||||
else if (CONST_STRNEQ (sect->name, GNU_LINKONCE_INFO))
|
||||
is_debug_info = 1;
|
||||
@ -3110,12 +3124,14 @@ stash_find_line_fast (struct dwarf2_debug *stash,
|
||||
FILENAME_PTR and LINENUMBER_PTR. In the case where SYMBOL was
|
||||
NULL the FUNCTIONNAME_PTR is also filled in.
|
||||
SYMBOLS contains the symbol table for ABFD.
|
||||
DEBUG_SECTIONS contains the name of the dwarf debug sections.
|
||||
ADDR_SIZE is the number of bytes in the initial .debug_info length
|
||||
field and in the abbreviation offset, or zero to indicate that the
|
||||
default value should be used. */
|
||||
|
||||
static bfd_boolean
|
||||
find_line (bfd *abfd,
|
||||
const struct dwarf_debug_section *debug_sections,
|
||||
asection *section,
|
||||
bfd_vma offset,
|
||||
asymbol *symbol,
|
||||
@ -3150,6 +3166,7 @@ find_line (bfd *abfd,
|
||||
stash = (struct dwarf2_debug *) bfd_zalloc (abfd, amt);
|
||||
if (! stash)
|
||||
return FALSE;
|
||||
stash->debug_sections = debug_sections;
|
||||
}
|
||||
|
||||
/* In a relocatable file, 2 functions may have the same address.
|
||||
@ -3193,7 +3210,7 @@ find_line (bfd *abfd,
|
||||
|
||||
*pinfo = stash;
|
||||
|
||||
msec = find_debug_info (abfd, NULL);
|
||||
msec = find_debug_info (abfd, debug_sections, NULL);
|
||||
if (msec == NULL)
|
||||
{
|
||||
char * debug_filename = bfd_follow_gnu_debuglink (abfd, DEBUGDIR);
|
||||
@ -3207,7 +3224,8 @@ find_line (bfd *abfd,
|
||||
|
||||
if ((debug_bfd = bfd_openr (debug_filename, NULL)) == NULL
|
||||
|| ! bfd_check_format (debug_bfd, bfd_object)
|
||||
|| (msec = find_debug_info (debug_bfd, NULL)) == NULL)
|
||||
|| (msec = find_debug_info (debug_bfd,
|
||||
debug_sections, NULL)) == NULL)
|
||||
{
|
||||
if (debug_bfd)
|
||||
bfd_close (debug_bfd);
|
||||
@ -3230,18 +3248,21 @@ find_line (bfd *abfd,
|
||||
some or all sections are compressed, then do things the slow
|
||||
way, with a bunch of reallocs. */
|
||||
|
||||
if (! find_debug_info (debug_bfd, msec))
|
||||
if (! find_debug_info (debug_bfd, debug_sections, msec))
|
||||
{
|
||||
/* Case 1: only one info section. */
|
||||
total_size = msec->size;
|
||||
if (! read_section (debug_bfd, debug_info, symbols, 0,
|
||||
if (! read_section (debug_bfd, &stash->debug_sections[debug_info],
|
||||
symbols, 0,
|
||||
&stash->info_ptr_memory, &total_size))
|
||||
goto done;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Case 2: multiple sections. */
|
||||
for (total_size = 0; msec; msec = find_debug_info (debug_bfd, msec))
|
||||
for (total_size = 0;
|
||||
msec;
|
||||
msec = find_debug_info (debug_bfd, debug_sections, msec))
|
||||
total_size += msec->size;
|
||||
|
||||
stash->info_ptr_memory = (bfd_byte *) bfd_malloc (total_size);
|
||||
@ -3249,9 +3270,9 @@ find_line (bfd *abfd,
|
||||
goto done;
|
||||
|
||||
total_size = 0;
|
||||
for (msec = find_debug_info (debug_bfd, NULL);
|
||||
for (msec = find_debug_info (debug_bfd, debug_sections, NULL);
|
||||
msec;
|
||||
msec = find_debug_info (debug_bfd, msec))
|
||||
msec = find_debug_info (debug_bfd, debug_sections, msec))
|
||||
{
|
||||
bfd_size_type size;
|
||||
|
||||
@ -3270,7 +3291,7 @@ find_line (bfd *abfd,
|
||||
|
||||
stash->info_ptr = stash->info_ptr_memory;
|
||||
stash->info_ptr_end = stash->info_ptr + total_size;
|
||||
stash->sec = find_debug_info (debug_bfd, NULL);
|
||||
stash->sec = find_debug_info (debug_bfd, debug_sections, NULL);
|
||||
stash->sec_info_ptr = stash->info_ptr;
|
||||
stash->syms = symbols;
|
||||
stash->bfd_ptr = debug_bfd;
|
||||
@ -3425,7 +3446,8 @@ find_line (bfd *abfd,
|
||||
if ((bfd_vma) (stash->info_ptr - stash->sec_info_ptr)
|
||||
== stash->sec->size)
|
||||
{
|
||||
stash->sec = find_debug_info (stash->bfd_ptr, stash->sec);
|
||||
stash->sec = find_debug_info (stash->bfd_ptr, debug_sections,
|
||||
stash->sec);
|
||||
stash->sec_info_ptr = stash->info_ptr;
|
||||
}
|
||||
|
||||
@ -3446,6 +3468,7 @@ done:
|
||||
|
||||
bfd_boolean
|
||||
_bfd_dwarf2_find_nearest_line (bfd *abfd,
|
||||
const struct dwarf_debug_section *debug_sections,
|
||||
asection *section,
|
||||
asymbol **symbols,
|
||||
bfd_vma offset,
|
||||
@ -3455,8 +3478,8 @@ _bfd_dwarf2_find_nearest_line (bfd *abfd,
|
||||
unsigned int addr_size,
|
||||
void **pinfo)
|
||||
{
|
||||
return find_line (abfd, section, offset, NULL, symbols, filename_ptr,
|
||||
functionname_ptr, linenumber_ptr, addr_size,
|
||||
return find_line (abfd, debug_sections, section, offset, NULL, symbols,
|
||||
filename_ptr, functionname_ptr, linenumber_ptr, addr_size,
|
||||
pinfo);
|
||||
}
|
||||
|
||||
@ -3472,9 +3495,8 @@ _bfd_dwarf2_find_line (bfd *abfd,
|
||||
unsigned int addr_size,
|
||||
void **pinfo)
|
||||
{
|
||||
return find_line (abfd, NULL, 0, symbol, symbols, filename_ptr,
|
||||
NULL, linenumber_ptr, addr_size,
|
||||
pinfo);
|
||||
return find_line (abfd, dwarf_debug_sections, NULL, 0, symbol, symbols,
|
||||
filename_ptr, NULL, linenumber_ptr, addr_size, pinfo);
|
||||
}
|
||||
|
||||
bfd_boolean
|
||||
|
@ -7476,7 +7476,8 @@ _bfd_elf_find_nearest_line (bfd *abfd,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (_bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
|
||||
if (_bfd_dwarf2_find_nearest_line (abfd, dwarf_debug_sections,
|
||||
section, symbols, offset,
|
||||
filename_ptr, functionname_ptr,
|
||||
line_ptr, 0,
|
||||
&elf_tdata (abfd)->dwarf2_find_line_info))
|
||||
|
@ -12611,7 +12611,8 @@ elf32_arm_find_nearest_line (bfd * abfd,
|
||||
|
||||
/* We skip _bfd_dwarf1_find_nearest_line since no known ARM toolchain uses it. */
|
||||
|
||||
if (_bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
|
||||
if (_bfd_dwarf2_find_nearest_line (abfd, dwarf_debug_sections,
|
||||
section, symbols, offset,
|
||||
filename_ptr, functionname_ptr,
|
||||
line_ptr, 0,
|
||||
& elf_tdata (abfd)->dwarf2_find_line_info))
|
||||
|
@ -1448,7 +1448,8 @@ elf64_alpha_find_nearest_line (bfd *abfd, asection *section, asymbol **symbols,
|
||||
{
|
||||
asection *msec;
|
||||
|
||||
if (_bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
|
||||
if (_bfd_dwarf2_find_nearest_line (abfd, dwarf_debug_sections,
|
||||
section, symbols, offset,
|
||||
filename_ptr, functionname_ptr,
|
||||
line_ptr, 0,
|
||||
&elf_tdata (abfd)->dwarf2_find_line_info))
|
||||
|
@ -11567,7 +11567,8 @@ _bfd_mips_elf_find_nearest_line (bfd *abfd, asection *section,
|
||||
line_ptr))
|
||||
return TRUE;
|
||||
|
||||
if (_bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
|
||||
if (_bfd_dwarf2_find_nearest_line (abfd, dwarf_debug_sections,
|
||||
section, symbols, offset,
|
||||
filename_ptr, functionname_ptr,
|
||||
line_ptr, ABI_64_P (abfd) ? 8 : 0,
|
||||
&elf_tdata (abfd)->dwarf2_find_line_info))
|
||||
|
@ -521,10 +521,21 @@ extern bfd_boolean _bfd_dwarf1_find_nearest_line
|
||||
(bfd *, asection *, asymbol **, bfd_vma, const char **,
|
||||
const char **, unsigned int *);
|
||||
|
||||
struct dwarf_debug_section
|
||||
{
|
||||
const char *uncompressed_name;
|
||||
const char *compressed_name;
|
||||
};
|
||||
|
||||
/* Map of uncompressed DWARF debug section name to compressed one. It
|
||||
is terminated by NULL uncompressed_name. */
|
||||
|
||||
extern const struct dwarf_debug_section dwarf_debug_sections[];
|
||||
|
||||
/* Find the nearest line using DWARF 2 debugging information. */
|
||||
extern bfd_boolean _bfd_dwarf2_find_nearest_line
|
||||
(bfd *, asection *, asymbol **, bfd_vma, const char **, const char **,
|
||||
unsigned int *, unsigned int, void **);
|
||||
(bfd *, const struct dwarf_debug_section *, asection *, asymbol **, bfd_vma,
|
||||
const char **, const char **, unsigned int *, unsigned int, void **);
|
||||
|
||||
/* Find the line using DWARF 2 debugging information. */
|
||||
extern bfd_boolean _bfd_dwarf2_find_line
|
||||
@ -811,14 +822,3 @@ extern void bfd_section_already_linked_table_traverse
|
||||
|
||||
extern bfd_vma read_unsigned_leb128 (bfd *, bfd_byte *, unsigned int *);
|
||||
extern bfd_signed_vma read_signed_leb128 (bfd *, bfd_byte *, unsigned int *);
|
||||
|
||||
struct dwarf_debug_section
|
||||
{
|
||||
const char *uncompressed_name;
|
||||
const char *compressed_name;
|
||||
};
|
||||
|
||||
/* Map of uncompressed DWARF debug section name to compressed one. It
|
||||
is terminated by NULL uncompressed_name. */
|
||||
|
||||
extern const struct dwarf_debug_section dwarf_debug_sections[];
|
||||
|
26
bfd/libbfd.h
26
bfd/libbfd.h
@ -526,10 +526,21 @@ extern bfd_boolean _bfd_dwarf1_find_nearest_line
|
||||
(bfd *, asection *, asymbol **, bfd_vma, const char **,
|
||||
const char **, unsigned int *);
|
||||
|
||||
struct dwarf_debug_section
|
||||
{
|
||||
const char *uncompressed_name;
|
||||
const char *compressed_name;
|
||||
};
|
||||
|
||||
/* Map of uncompressed DWARF debug section name to compressed one. It
|
||||
is terminated by NULL uncompressed_name. */
|
||||
|
||||
extern const struct dwarf_debug_section dwarf_debug_sections[];
|
||||
|
||||
/* Find the nearest line using DWARF 2 debugging information. */
|
||||
extern bfd_boolean _bfd_dwarf2_find_nearest_line
|
||||
(bfd *, asection *, asymbol **, bfd_vma, const char **, const char **,
|
||||
unsigned int *, unsigned int, void **);
|
||||
(bfd *, const struct dwarf_debug_section *, asection *, asymbol **, bfd_vma,
|
||||
const char **, const char **, unsigned int *, unsigned int, void **);
|
||||
|
||||
/* Find the line using DWARF 2 debugging information. */
|
||||
extern bfd_boolean _bfd_dwarf2_find_line
|
||||
@ -816,17 +827,6 @@ extern void bfd_section_already_linked_table_traverse
|
||||
|
||||
extern bfd_vma read_unsigned_leb128 (bfd *, bfd_byte *, unsigned int *);
|
||||
extern bfd_signed_vma read_signed_leb128 (bfd *, bfd_byte *, unsigned int *);
|
||||
|
||||
struct dwarf_debug_section
|
||||
{
|
||||
const char *uncompressed_name;
|
||||
const char *compressed_name;
|
||||
};
|
||||
|
||||
/* Map of uncompressed DWARF debug section name to compressed one. It
|
||||
is terminated by NULL uncompressed_name. */
|
||||
|
||||
extern const struct dwarf_debug_section dwarf_debug_sections[];
|
||||
/* Extracted from init.c. */
|
||||
/* Extracted from libbfd.c. */
|
||||
bfd_boolean bfd_write_bigendian_4byte_int (bfd *, unsigned int);
|
||||
|
@ -347,6 +347,10 @@ extern asymbol *coff_bfd_make_debug_symbol
|
||||
extern bfd_boolean coff_find_nearest_line
|
||||
(bfd *, asection *, asymbol **, bfd_vma, const char **,
|
||||
const char **, unsigned int *);
|
||||
struct dwarf_debug_section;
|
||||
extern bfd_boolean coff_find_nearest_line_with_names
|
||||
(bfd *, const struct dwarf_debug_section *, asection *, asymbol **,
|
||||
bfd_vma, const char **, const char **, unsigned int *);
|
||||
extern bfd_boolean coff_find_inliner_info
|
||||
(bfd *, const char **, const char **, unsigned int *);
|
||||
extern int coff_sizeof_headers
|
||||
|
@ -351,6 +351,10 @@ extern asymbol *coff_bfd_make_debug_symbol
|
||||
extern bfd_boolean coff_find_nearest_line
|
||||
(bfd *, asection *, asymbol **, bfd_vma, const char **,
|
||||
const char **, unsigned int *);
|
||||
struct dwarf_debug_section;
|
||||
extern bfd_boolean coff_find_nearest_line_with_names
|
||||
(bfd *, const struct dwarf_debug_section *, asection *, asymbol **,
|
||||
bfd_vma, const char **, const char **, unsigned int *);
|
||||
extern bfd_boolean coff_find_inliner_info
|
||||
(bfd *, const char **, const char **, unsigned int *);
|
||||
extern int coff_sizeof_headers
|
||||
|
Loading…
Reference in New Issue
Block a user