[Patch]: support of find_nearest_line on rs6000-aix using dwarf

Tristan Gingold gingold@adacore.com
Tue Sep 27 10:35:00 GMT 2011


Hi,

this patch adds support of dwarf in find_nearest_line for rs6000-aix.
It would have been trivial (and already supported) if AIX didn't use non-standard names for dwarf sections.

This patch adds an argument to _bfd_dwarf2_find_nearest_line containing the names of the dwarf sections.  The remaining is adjustments.

Manually tested on aix,
no regressions for powerpc-elf,
bfd rebuilt with --enable-all-targets.

Ok for trunk ?

Tristan.

PS: I haven't found any better approach.  The use of non-standard names has an impact in gdb, find_nearest_line and objdump.  I haven't yet made dump of dwarf sections in objdump working.  If someone has a good idea (for the long term ?), please give it!

bfd/
2011-09-27  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.

diff --git a/bfd/coff-rs6000.c b/bfd/coff-rs6000.c
index 5d9b5ae..ffa7a65 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 bbb0acc..2508b51 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))
@@ -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,
diff --git a/bfd/dwarf2.c b/bfd/dwarf2.c
index 3cd2f7d..839f08a 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);
 }
 
@@ -2723,12 +2732,11 @@ comp_unit_hash_info (struct dwarf2_debug *stash,
    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 +2744,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 +2797,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 +2812,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 +2848,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 +3123,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 +3165,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 +3209,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 +3223,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 +3247,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 +3269,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 +3290,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 +3445,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 +3467,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 +3477,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 +3494,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 aa40c33..dc6a9bb 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 12bbc54..02d667f 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 6076709..528476b 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 4d80fe8..6fc9d81 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 b6c90d1..ccc6c65 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/libcoff-in.h b/bfd/libcoff-in.h
index 00d9ab2..8bfda72 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



More information about the Binutils mailing list