From: Tristan Gingold Date: Fri, 30 Sep 2011 10:39:45 +0000 (+0000) Subject: 2011-09-30 Tristan Gingold X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=fc28f9aa231c8f3386e1c9bdb448d9cdd9cae1a9;p=binutils-gdb.git 2011-09-30 Tristan Gingold * 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. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 91842ad259b..3328999b606 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,41 @@ +2011-09-30 Tristan Gingold + + * 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 PR ld/13235 diff --git a/bfd/coff-rs6000.c b/bfd/coff-rs6000.c index 5d9b5aeb532..ffa7a654fe6 100644 --- a/bfd/coff-rs6000.c +++ b/bfd/coff-rs6000.c @@ -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, diff --git a/bfd/coffgen.c b/bfd/coffgen.c index bbb0acc1c62..2508b519334 100644 --- a/bfd/coffgen.c +++ b/bfd/coffgen.c @@ -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, diff --git a/bfd/dwarf2.c b/bfd/dwarf2.c index 3cd2f7d7d46..577f2783222 100644 --- a/bfd/dwarf2.c +++ b/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 diff --git a/bfd/elf.c b/bfd/elf.c index aa40c339086..dc6a9bb7213 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -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)) diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index 12bbc54a33c..02d667f4403 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -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)) diff --git a/bfd/elf64-alpha.c b/bfd/elf64-alpha.c index 60767099c6b..528476bdddf 100644 --- a/bfd/elf64-alpha.c +++ b/bfd/elf64-alpha.c @@ -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)) diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c index 4d80fe8a043..6fc9d81fcbb 100644 --- a/bfd/elfxx-mips.c +++ b/bfd/elfxx-mips.c @@ -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)) diff --git a/bfd/libbfd-in.h b/bfd/libbfd-in.h index b6c90d1fb11..ccc6c6542ec 100644 --- a/bfd/libbfd-in.h +++ b/bfd/libbfd-in.h @@ -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[]; diff --git a/bfd/libbfd.h b/bfd/libbfd.h index 200a6fad319..c2b119d3613 100644 --- a/bfd/libbfd.h +++ b/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); diff --git a/bfd/libcoff-in.h b/bfd/libcoff-in.h index 00d9ab261b2..8bfda723b4f 100644 --- a/bfd/libcoff-in.h +++ b/bfd/libcoff-in.h @@ -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 diff --git a/bfd/libcoff.h b/bfd/libcoff.h index bd58c82e479..958650ca526 100644 --- a/bfd/libcoff.h +++ b/bfd/libcoff.h @@ -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