2011-09-30 Tristan Gingold <gingold@adacore.com>
authorTristan Gingold <gingold@adacore.com>
Fri, 30 Sep 2011 10:39:45 +0000 (10:39 +0000)
committerTristan Gingold <gingold@adacore.com>
Fri, 30 Sep 2011 10:39:45 +0000 (10:39 +0000)
* 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.

12 files changed:
bfd/ChangeLog
bfd/coff-rs6000.c
bfd/coffgen.c
bfd/dwarf2.c
bfd/elf.c
bfd/elf32-arm.c
bfd/elf64-alpha.c
bfd/elfxx-mips.c
bfd/libbfd-in.h
bfd/libbfd.h
bfd/libcoff-in.h
bfd/libcoff.h

index 91842ad..3328999 100644 (file)
@@ -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
index 5d9b5ae..ffa7a65 100644 (file)
@@ -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);
+}
+
 \f
 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,
index bbb0acc..2508b51 100644 (file)
@@ -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))
@@ -2299,6 +2301,21 @@ coff_find_nearest_line (bfd *abfd,
 }
 
 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,
                        const char **functionname_ptr,
index 3cd2f7d..577f278 100644 (file)
@@ -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
index aa40c33..dc6a9bb 100644 (file)
--- 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))
index 12bbc54..02d667f 100644 (file)
@@ -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))
index 6076709..528476b 100644 (file)
@@ -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))
index 4d80fe8..6fc9d81 100644 (file)
@@ -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))
index b6c90d1..ccc6c65 100644 (file)
@@ -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[];
index 200a6fa..c2b119d 100644 (file)
@@ -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);
index 00d9ab2..8bfda72 100644 (file)
@@ -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
index bd58c82..958650c 100644 (file)
@@ -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