Approved by nickc@redhat.com
authorFred Fish <fnf@specifix.com>
Mon, 23 May 2005 17:44:55 +0000 (17:44 +0000)
committerFred Fish <fnf@specifix.com>
Mon, 23 May 2005 17:44:55 +0000 (17:44 +0000)
2005-05-23  Fred Fish  <fnf@specifixinc.com>
* dwarf2.c (struct dwarf2_debug): Add inliner_chain member.
(struct funcinfo): Add caller_func, caller_file, caller_line.
tag, and nesting_level members.
(lookup_address_in_function_table): Change first passed parameter
from "struct funcinfo *" to "struct comp_unit *".
(lookup_address_in_function_table): Dereference unit to find function
table.
(lookup_address_in_function_table): Traverse the function list to
create a chain of inlined functions back to the first non inlined
function.
(scan_unit_for_functions): Remember tag and nesting level.  Handle
DW_AT_call_file and DW_AT_call_line.
(comp_unit_find_nearest_line): Adjust lookup_address_in_function_table
call to pass unit pointer instead of function table pointer.  For
inlined functions, save pointer to the inliner chain.
(_bfd_dwarf2_find_nearest_line): Initialize inliner_chain to NULL.
(_bfd_dwarf2_find_inliner_info): New function that returns information
from the inliner chain after a call to bfd_find_nearest_line.

* bfd.c (bfd_find_inliner_info): Define using BFD_SEND.
* targets.c (BFD_JUMP_TABLE_SYMBOLS): Add entry for
NAME##_find_inliner_info.
(bfd_target): Add _bfd_find_inliner_info.
* bfd-in2.h: Regenerate.

* libbfd-in.h (_bfd_nosymbols_find_inliner_info): Define as
macro that always returns bfd_false.
(_bfd_dwarf2_find_inliner_info): Declare.
* libbfd.h: Regenerate.

* elf32-arm.c (elf32_arm_find_inliner_info): New function
that calls _bfd_dwarf2_find_inliner_info.
(bfd_elf32_find_inliner_info): Define to elf32_arm_find_inliner_info.

* elfxx-mips.c (_bfd_mips_elf_find_inliner_info): New function
that calls _bfd_dwarf2_find_inliner_info.
* elfxx-mips.h (_bfd_mips_elf_find_inliner_info): Declare.
* elfn32-mips.c (bfd_elf32_find_inliner_info): Define to
_bfd_mips_elf_find_inliner_info.
* elf64-mips.c (bfd_elf64_find_inliner_info): Ditto.
* elf32-mips.c (bfd_elf32_find_inliner_info): Ditto.

* elf.c (_bfd_elf_find_inliner_info): New function that calls
_bfd_dwarf2_find_inliner_info.
* elf-bfd.h (_bfd_elf_find_inliner_info): Declare.
* elfxx-target.h (bfd_elfNN_find_inliner_info): Define to
_bfd_elf_find_inliner_info.

* coffgen.c (coff_find_inliner_info): New function that
calls _bfd_dwarf2_find_inliner_info.
* libcoff-in.h (coff_find_inliner_info): Declare.
* libcoff.h: Regenerate.
* coff-rs6000.c (rs6000coff_vec): Add coff_find_inliner_info.
(pmac_xcoff_vec) Ditto.
* coff64-rs6000.c (rs6000coff64_vec): Ditto.
(aix5coff64_vec): Ditto.

* aout-target.h (MY_find_inliner_info): Define as
_bfd_nosymbols_find_inliner_info.
* aout-tic30.c (MY_find_inliner_info): Ditto.
* binary.c (binary_find_inliner_info): Ditto.
* i386msdos.c (msdos_find_inliner_info): Ditto.
* ihex.c (ihex_find_inliner_info): Ditto.
* libaout.h (aout_32_find_inliner_info): Ditto.
* libecoff.h (_bfd_ecoff_find_inliner_info): Ditto.
* mach-o.c (bfd_mach_o_find_inliner_info): Ditto.
* mmo.c (mmo_find_inliner_info): Ditto.
* nlm-target.h (nlm_find_inliner_info): Ditto.
* pef.c (bfd_pef_find_inliner_info): Ditto.
* ppcboot.c (ppcboot_find_inliner_info): Ditto.
* srec.c (srec_find_inliner_info): Ditto.
* tekhex.c (tekhex_find_inliner_info): Ditto.
* versados.c (versados_find_inliner_info): Ditto.
* xsym.c (bfd_sym_find_inliner_info): Ditto.

* ieee.c (ieee_find_inliner_info): New function that always
returns FALSE.
* oasys.c (oasys_find_inliner_info): Ditto.
* vms.c (vms_find_inliner_info): Ditto.

40 files changed:
bfd/ChangeLog
bfd/aout-target.h
bfd/aout-tic30.c
bfd/bfd-in2.h
bfd/bfd.c
bfd/binary.c
bfd/coff-rs6000.c
bfd/coff64-rs6000.c
bfd/coffgen.c
bfd/dwarf2.c
bfd/elf-bfd.h
bfd/elf.c
bfd/elf32-arm.c
bfd/elf32-mips.c
bfd/elf64-mips.c
bfd/elfn32-mips.c
bfd/elfxx-mips.c
bfd/elfxx-mips.h
bfd/elfxx-target.h
bfd/i386msdos.c
bfd/ieee.c
bfd/ihex.c
bfd/libaout.h
bfd/libbfd-in.h
bfd/libbfd.h
bfd/libcoff-in.h
bfd/libcoff.h
bfd/libecoff.h
bfd/mach-o.c
bfd/mmo.c
bfd/nlm-target.h
bfd/oasys.c
bfd/pef.c
bfd/ppcboot.c
bfd/srec.c
bfd/targets.c
bfd/tekhex.c
bfd/versados.c
bfd/vms.c
bfd/xsym.c

index 78035203681723e9f9ddf32a4a6dac38ff94b5b6..8dd00fce5d7354dcdab5fccab3ec7f53f5fd413e 100644 (file)
@@ -1,3 +1,85 @@
+2005-05-23  Fred Fish  <fnf@specifixinc.com>
+
+       * dwarf2.c (struct dwarf2_debug): Add inliner_chain member.
+       (struct funcinfo): Add caller_func, caller_file, caller_line.
+       tag, and nesting_level members.
+       (lookup_address_in_function_table): Change first passed parameter
+       from "struct funcinfo *" to "struct comp_unit *".
+       (lookup_address_in_function_table): Dereference unit to find function
+       table.
+       (lookup_address_in_function_table): Traverse the function list to
+       create a chain of inlined functions back to the first non inlined
+       function.
+       (scan_unit_for_functions): Remember tag and nesting level.  Handle
+       DW_AT_call_file and DW_AT_call_line.
+       (comp_unit_find_nearest_line): Adjust lookup_address_in_function_table
+       call to pass unit pointer instead of function table pointer.  For
+       inlined functions, save pointer to the inliner chain.
+       (_bfd_dwarf2_find_nearest_line): Initialize inliner_chain to NULL.
+       (_bfd_dwarf2_find_inliner_info): New function that returns information
+       from the inliner chain after a call to bfd_find_nearest_line.
+
+       * bfd.c (bfd_find_inliner_info): Define using BFD_SEND.
+       * targets.c (BFD_JUMP_TABLE_SYMBOLS): Add entry for
+       NAME##_find_inliner_info.
+       (bfd_target): Add _bfd_find_inliner_info.
+       * bfd-in2.h: Regenerate.
+
+       * libbfd-in.h (_bfd_nosymbols_find_inliner_info): Define as
+       macro that always returns bfd_false.
+       (_bfd_dwarf2_find_inliner_info): Declare.
+       * libbfd.h: Regenerate.
+       
+       * elf32-arm.c (elf32_arm_find_inliner_info): New function
+       that calls _bfd_dwarf2_find_inliner_info.
+       (bfd_elf32_find_inliner_info): Define to elf32_arm_find_inliner_info.
+
+       * elfxx-mips.c (_bfd_mips_elf_find_inliner_info): New function
+       that calls _bfd_dwarf2_find_inliner_info.
+       * elfxx-mips.h (_bfd_mips_elf_find_inliner_info): Declare.
+       * elfn32-mips.c (bfd_elf32_find_inliner_info): Define to
+       _bfd_mips_elf_find_inliner_info.
+       * elf64-mips.c (bfd_elf64_find_inliner_info): Ditto.
+       * elf32-mips.c (bfd_elf32_find_inliner_info): Ditto.
+
+       * elf.c (_bfd_elf_find_inliner_info): New function that calls
+       _bfd_dwarf2_find_inliner_info.
+       * elf-bfd.h (_bfd_elf_find_inliner_info): Declare.
+       * elfxx-target.h (bfd_elfNN_find_inliner_info): Define to
+       _bfd_elf_find_inliner_info.
+
+       * coffgen.c (coff_find_inliner_info): New function that
+       calls _bfd_dwarf2_find_inliner_info.
+       * libcoff-in.h (coff_find_inliner_info): Declare.
+       * libcoff.h: Regenerate.
+       * coff-rs6000.c (rs6000coff_vec): Add coff_find_inliner_info.
+       (pmac_xcoff_vec) Ditto.
+       * coff64-rs6000.c (rs6000coff64_vec): Ditto.
+       (aix5coff64_vec): Ditto.
+       
+       * aout-target.h (MY_find_inliner_info): Define as
+       _bfd_nosymbols_find_inliner_info.
+       * aout-tic30.c (MY_find_inliner_info): Ditto.
+       * binary.c (binary_find_inliner_info): Ditto.
+       * i386msdos.c (msdos_find_inliner_info): Ditto.
+       * ihex.c (ihex_find_inliner_info): Ditto.
+       * libaout.h (aout_32_find_inliner_info): Ditto.
+       * libecoff.h (_bfd_ecoff_find_inliner_info): Ditto.
+       * mach-o.c (bfd_mach_o_find_inliner_info): Ditto.
+       * mmo.c (mmo_find_inliner_info): Ditto.
+       * nlm-target.h (nlm_find_inliner_info): Ditto.
+       * pef.c (bfd_pef_find_inliner_info): Ditto.
+       * ppcboot.c (ppcboot_find_inliner_info): Ditto.
+       * srec.c (srec_find_inliner_info): Ditto.
+       * tekhex.c (tekhex_find_inliner_info): Ditto.
+       * versados.c (versados_find_inliner_info): Ditto.
+       * xsym.c (bfd_sym_find_inliner_info): Ditto.
+
+       * ieee.c (ieee_find_inliner_info): New function that always
+       returns FALSE.
+       * oasys.c (oasys_find_inliner_info): Ditto.
+       * vms.c (vms_find_inliner_info): Ditto.
+
 2005-05-24  Alan Modra  <amodra@bigpond.net.au>
 
        * elf32-ppc.c (ppc_elf_check_relocs): For old gcc -fPIC code
index b12be65791f15b645c767d82d9b6dc8c4a124678..5a30eda74142e26d7bd4808cf9928d3e753a0769 100644 (file)
@@ -462,6 +462,9 @@ MY_bfd_final_link (bfd *abfd, struct bfd_link_info *info)
 #ifndef MY_find_nearest_line
 #define MY_find_nearest_line NAME (aout, find_nearest_line)
 #endif
+#ifndef MY_find_inliner_info
+#define MY_find_inliner_info _bfd_nosymbols_find_inliner_info
+#endif
 #ifndef MY_sizeof_headers
 #define MY_sizeof_headers NAME (aout, sizeof_headers)
 #endif
index 532c99d20905dfd46497afd6eebd5e34954df7aa..0feb99decb16f45c3a0a6253ea6bc52836e972f0 100644 (file)
@@ -904,6 +904,9 @@ tic30_aout_set_arch_mach (bfd *abfd,
 #ifndef MY_find_nearest_line
 #define MY_find_nearest_line NAME (aout, find_nearest_line)
 #endif
+#ifndef MY_find_inliner_info
+#define MY_find_inliner_info _bfd_nosymbols_find_inliner_info
+#endif
 #ifndef MY_sizeof_headers
 #define MY_sizeof_headers NAME (aout, sizeof_headers)
 #endif
index b1664758c112f830cefad4ddfa9b2eb365aad8b2..f4b82b8bb228ba769dd36de38314d6ff57c4a33b 100644 (file)
@@ -4307,6 +4307,10 @@ bfd_boolean bfd_set_private_flags (bfd *abfd, flagword flags);
        BFD_SEND (abfd, _bfd_find_nearest_line, \
                  (abfd, sec, syms, off, file, func, line))
 
+#define bfd_find_inliner_info(abfd, file, func, line) \
+       BFD_SEND (abfd, _bfd_find_inliner_info, \
+                 (abfd, file, func, line))
+
 #define bfd_debug_info_start(abfd) \
        BFD_SEND (abfd, _bfd_debug_info_start, (abfd))
 
@@ -4643,6 +4647,7 @@ typedef struct bfd_target
   NAME##_bfd_is_target_special_symbol, \
   NAME##_get_lineno, \
   NAME##_find_nearest_line, \
+  NAME##_find_inliner_info, \
   NAME##_bfd_make_debug_symbol, \
   NAME##_read_minisymbols, \
   NAME##_minisymbol_to_symbol
@@ -4664,6 +4669,8 @@ typedef struct bfd_target
   bfd_boolean (*_bfd_find_nearest_line)
     (bfd *, struct bfd_section *, struct bfd_symbol **, bfd_vma,
      const char **, const char **, unsigned int *);
+  bfd_boolean (*_bfd_find_inliner_info)
+    (bfd *, const char **, const char **, unsigned int *);
  /* Back-door to allow format-aware applications to create debug symbols
     while using BFD for everything else.  Currently used by the assembler
     when creating COFF files.  */
index 8c6ca924cd929f199cf046817f4f500e31492026..f62411b7f27ff12c962d2b5bdde238da37306311 100644 (file)
--- a/bfd/bfd.c
+++ b/bfd/bfd.c
@@ -1161,6 +1161,10 @@ DESCRIPTION
 .       BFD_SEND (abfd, _bfd_find_nearest_line, \
 .                 (abfd, sec, syms, off, file, func, line))
 .
+.#define bfd_find_inliner_info(abfd, file, func, line) \
+.       BFD_SEND (abfd, _bfd_find_inliner_info, \
+.                 (abfd, file, func, line))
+.
 .#define bfd_debug_info_start(abfd) \
 .       BFD_SEND (abfd, _bfd_debug_info_start, (abfd))
 .
index b9a4d348d922d25eea7f67ad79ba67c43794e14b..458626f02a35ceb29bd416b1d2e9c4446b34d839 100644 (file)
@@ -216,6 +216,7 @@ binary_get_symbol_info (bfd *ignore_abfd ATTRIBUTE_UNUSED,
 #define binary_bfd_is_local_label_name      bfd_generic_is_local_label_name
 #define binary_get_lineno                  _bfd_nosymbols_get_lineno
 #define binary_find_nearest_line           _bfd_nosymbols_find_nearest_line
+#define binary_find_inliner_info           _bfd_nosymbols_find_inliner_info
 #define binary_bfd_make_debug_symbol       _bfd_nosymbols_bfd_make_debug_symbol
 #define binary_read_minisymbols            _bfd_generic_read_minisymbols
 #define binary_minisymbol_to_symbol        _bfd_generic_minisymbol_to_symbol
index 3d37c186ae9a001ab1b5465fd2e16c807b0b1ea8..e921e98e8446fabc34febe93d31242ea266491e2 100644 (file)
@@ -4166,6 +4166,7 @@ const bfd_target rs6000coff_vec =
     coff_bfd_is_target_special_symbol,
     coff_get_lineno,
     coff_find_nearest_line,
+    coff_find_inliner_info,
     coff_bfd_make_debug_symbol,
     _bfd_generic_read_minisymbols,
     _bfd_generic_minisymbol_to_symbol,
@@ -4413,6 +4414,7 @@ const bfd_target pmac_xcoff_vec =
     coff_bfd_is_target_special_symbol,
     coff_get_lineno,
     coff_find_nearest_line,
+    coff_find_inliner_info,
     coff_bfd_make_debug_symbol,
     _bfd_generic_read_minisymbols,
     _bfd_generic_minisymbol_to_symbol,
index 066723054d69e1d16b9b4e7e4a10b05ff427a136..a0b2294626746dc3e615965ebf7974b7a0235d64 100644 (file)
@@ -2713,6 +2713,7 @@ const bfd_target rs6000coff64_vec =
     coff_bfd_is_target_special_symbol,
     coff_get_lineno,
     coff_find_nearest_line,
+    coff_find_inliner_info,
     coff_bfd_make_debug_symbol,
     _bfd_generic_read_minisymbols,
     _bfd_generic_minisymbol_to_symbol,
@@ -2961,6 +2962,7 @@ const bfd_target aix5coff64_vec =
     coff_bfd_is_target_special_symbol,
     coff_get_lineno,
     coff_find_nearest_line,
+    coff_find_inliner_info,
     coff_bfd_make_debug_symbol,
     _bfd_generic_read_minisymbols,
     _bfd_generic_minisymbol_to_symbol,
index 35ec85a1d69f14408f391c74d5e2d0dea9978988..c541e6a590eb2d9abb7e367edd568192ff95c9d5 100644 (file)
@@ -2223,6 +2223,20 @@ coff_find_nearest_line (bfd *abfd,
   return TRUE;
 }
 
+bfd_boolean
+coff_find_inliner_info (bfd *abfd,
+                       const char **filename_ptr,
+                       const char **functionname_ptr,
+                       unsigned int *line_ptr)
+{
+  bfd_boolean found;
+
+  found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
+                                        functionname_ptr, line_ptr,
+                                        &coff_data(abfd)->dwarf2_find_line_info);
+  return (found);
+}
+
 int
 coff_sizeof_headers (bfd *abfd, bfd_boolean reloc)
 {
index 365758a2c498ca8848364f29f2a5c121ba4cbd4f..32f0b4443d0f55f899b899b407ab56ab3f10ec0c 100644 (file)
@@ -118,6 +118,12 @@ struct dwarf2_debug
 
   /* Length of the loaded .debug_ranges section. */
   unsigned long dwarf_ranges_size;
+
+  /* If the most recent call to bfd_find_nearest_line was given an
+     address in an inlined function, preserve a pointer into the
+     calling chain for subsequent calls to bfd_find_inliner_info to
+     use. */
+  struct funcinfo *inliner_chain;
 };
 
 struct arange
@@ -680,9 +686,19 @@ struct line_info_table
   struct line_info* lcl_head;   /* local head; used in 'add_line_info' */
 };
 
+/* Remember some information about each function.  If the function is
+   inlined (DW_TAG_inlined_subroutine) it may have two additional
+   attributes, DW_AT_call_file and DW_AT_call_line, which specify the
+   source code location where this function was inlined. */
+
 struct funcinfo
 {
-  struct funcinfo *prev_func;
+  struct funcinfo *prev_func;          /* Pointer to previous function in list of all functions */
+  struct funcinfo *caller_func;                /* Pointer to function one scope higher */
+  char *caller_file;                   /* Source location file name where caller_func inlines this func */
+  int caller_line;                     /* Source location line number where caller_func inlines this func */
+  int tag;
+  int nesting_level;
   char *name;
   struct arange arange;
 };
@@ -1340,7 +1356,7 @@ read_debug_ranges (struct comp_unit *unit)
    depending upon them being ordered in TABLE by increasing range. */
 
 static bfd_boolean
-lookup_address_in_function_table (struct funcinfo *table,
+lookup_address_in_function_table (struct comp_unit *unit,
                                  bfd_vma addr,
                                  struct funcinfo **function_ptr,
                                  const char **functionname_ptr)
@@ -1349,7 +1365,7 @@ lookup_address_in_function_table (struct funcinfo *table,
   struct funcinfo* best_fit = NULL;
   struct arange *arange;
 
-  for (each_func = table;
+  for (each_func = unit->function_table;
        each_func;
        each_func = each_func->prev_func)
     {
@@ -1368,8 +1384,28 @@ lookup_address_in_function_table (struct funcinfo *table,
 
   if (best_fit)
     {
+      struct funcinfo* curr_func = best_fit;
+
       *functionname_ptr = best_fit->name;
       *function_ptr = best_fit;
+
+      /* If we found a match and it is a function that was inlined,
+        traverse the function list looking for the function at the
+        next higher scope and save a pointer to it for future use.
+        Note that because of the way the DWARF info is generated, and
+        the way we build the function list, the first function at the
+        next higher level is the one we want. */
+
+      for (each_func = best_fit -> prev_func;
+          each_func && (curr_func->tag == DW_TAG_inlined_subroutine);
+          each_func = each_func->prev_func)
+       {
+         if (each_func->nesting_level < curr_func->nesting_level)
+           {
+             curr_func->caller_func = each_func;
+             curr_func = each_func;
+           }
+       }
       return TRUE;
     }
   else
@@ -1508,6 +1544,8 @@ scan_unit_for_functions (struct comp_unit *unit)
        {
          bfd_size_type amt = sizeof (struct funcinfo);
          func = bfd_zalloc (abfd, amt);
+         func->tag = abbrev->tag;
+         func->nesting_level = nesting_level;
          func->prev_func = unit->function_table;
          unit->function_table = func;
        }
@@ -1522,6 +1560,14 @@ scan_unit_for_functions (struct comp_unit *unit)
            {
              switch (attr.name)
                {
+               case DW_AT_call_file:
+                 func->caller_file = concat_filename (unit->line_table, attr.u.val);
+                 break;
+
+               case DW_AT_call_line:
+                 func->caller_line = attr.u.val;
+                 break;
+
                case DW_AT_abstract_origin:
                  func->name = find_abstract_instance_name (unit, attr.u.val);
                  break;
@@ -1796,8 +1842,10 @@ comp_unit_find_nearest_line (struct comp_unit *unit,
     }
 
   function = NULL;
-  func_p = lookup_address_in_function_table (unit->function_table, addr,
+  func_p = lookup_address_in_function_table (unit, addr,
                                             &function, functionname_ptr);
+  if (func_p && (function->tag == DW_TAG_inlined_subroutine))
+    stash->inliner_chain = function;
   line_p = lookup_address_in_line_info_table (unit->line_table, addr,
                                              function, filename_ptr,
                                              linenumber_ptr);
@@ -1954,6 +2002,8 @@ _bfd_dwarf2_find_nearest_line (bfd *abfd,
   if (! stash->info_ptr)
     return FALSE;
 
+  stash->inliner_chain = NULL;
+
   /* Check the previously read comp. units first.  */
   for (each = stash->all_comp_units; each; each = each->next_unit)
     if (comp_unit_contains_address (each, addr))
@@ -2047,6 +2097,32 @@ _bfd_dwarf2_find_nearest_line (bfd *abfd,
   return FALSE;
 }
 
+bfd_boolean
+_bfd_dwarf2_find_inliner_info (bfd *abfd ATTRIBUTE_UNUSED,
+                              const char **filename_ptr,
+                              const char **functionname_ptr,
+                              unsigned int *linenumber_ptr,
+                              void **pinfo)
+{
+  struct dwarf2_debug *stash;
+
+  stash = *pinfo;
+  if (stash)
+    {
+      struct funcinfo *func = stash->inliner_chain;
+      if (func && func->caller_func)
+       {
+         *filename_ptr = func->caller_file;
+         *functionname_ptr = func->caller_func->name;
+         *linenumber_ptr = func->caller_line;
+         stash->inliner_chain = func->caller_func;
+         return (TRUE);
+       }
+    }
+
+  return (FALSE);
+}
+
 void
 _bfd_dwarf2_cleanup_debug_info (bfd *abfd)
 {
index ca51e35adb852a465e546e7f9638d36549bc41aa..53f2845be9e892acdd833d668385d293b371f6aa 100644 (file)
@@ -1488,6 +1488,8 @@ extern bfd_boolean _bfd_elf_set_arch_mach
 extern bfd_boolean _bfd_elf_find_nearest_line
   (bfd *, asection *, asymbol **, bfd_vma, const char **, const char **,
    unsigned int *);
+extern bfd_boolean _bfd_elf_find_inliner_info
+  (bfd *, const char **, const char **, unsigned int *);
 #define _bfd_elf_read_minisymbols _bfd_generic_read_minisymbols
 #define _bfd_elf_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol
 extern int _bfd_elf_sizeof_headers
index b6ec5c98ad743f70540a1c1ecd8493de320f2753..4ff1d256ce1ae49a6a1903b255c82e9a836140e8 100644 (file)
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -6672,6 +6672,25 @@ _bfd_elf_find_nearest_line (bfd *abfd,
   return TRUE;
 }
 
+/* After a call to bfd_find_nearest_line, successive calls to
+   bfd_find_inliner_info can be used to get source information about
+   each level of function inlining that terminated at the address
+   passed to bfd_find_nearest_line.  Currently this is only supported
+   for DWARF2 with appropriate DWARF3 extensions. */
+
+bfd_boolean
+_bfd_elf_find_inliner_info (bfd *abfd,
+                           const char **filename_ptr,
+                           const char **functionname_ptr,
+                           unsigned int *line_ptr)
+{
+  bfd_boolean found;
+  found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
+                                        functionname_ptr, line_ptr,
+                                        & elf_tdata (abfd)->dwarf2_find_line_info);
+  return found;
+}
+
 int
 _bfd_elf_sizeof_headers (bfd *abfd, bfd_boolean reloc)
 {
index 34c887d26997e21a069e3a90e119e4691b1b8313..af46138baa64f1ba7d1ddf930eda52537d02d9c5 100644 (file)
@@ -5289,6 +5289,19 @@ elf32_arm_find_nearest_line (bfd *          abfd,
   return TRUE;
 }
 
+static bfd_boolean
+elf32_arm_find_inliner_info (bfd *          abfd,
+                            const char **  filename_ptr,
+                            const char **  functionname_ptr,
+                            unsigned int * line_ptr)
+{
+  bfd_boolean found;
+  found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
+                                        functionname_ptr, line_ptr,
+                                        & elf_tdata (abfd)->dwarf2_find_line_info);
+  return found;
+}
+
 /* Adjust a symbol defined by a dynamic object and referenced by a
    regular object.  The current definition is in some section of the
    dynamic object, but we're not including those sections.  We have to
@@ -6810,6 +6823,7 @@ const struct elf_size_info elf32_arm_size_info = {
 #define bfd_elf32_bfd_link_hash_table_create    elf32_arm_link_hash_table_create
 #define bfd_elf32_bfd_reloc_type_lookup                elf32_arm_reloc_type_lookup
 #define bfd_elf32_find_nearest_line            elf32_arm_find_nearest_line
+#define bfd_elf32_find_inliner_info            elf32_arm_find_inliner_info
 #define bfd_elf32_new_section_hook             elf32_arm_new_section_hook
 #define bfd_elf32_bfd_is_target_special_symbol elf32_arm_is_target_special_symbol
 
index 0ed4b44069604290a40aeccabc8a5ae2b75c4c0b..9684d0bf854d43e8a5df292c6fd8658a294cacef 100644 (file)
@@ -1573,6 +1573,7 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = {
 #define bfd_elf32_bfd_is_local_label_name \
                                        mips_elf_is_local_label_name
 #define bfd_elf32_find_nearest_line    _bfd_mips_elf_find_nearest_line
+#define bfd_elf32_find_inliner_info    _bfd_mips_elf_find_inliner_info
 #define bfd_elf32_new_section_hook     _bfd_mips_elf_new_section_hook
 #define bfd_elf32_set_section_contents _bfd_mips_elf_set_section_contents
 #define bfd_elf32_bfd_get_relocated_section_contents \
index cc226e570ab76663424951541e12f750f9071a73..7f0bb12e670149eee7d9df7e06ce7c4651830662 100644 (file)
@@ -3102,6 +3102,7 @@ const struct elf_size_info mips_elf64_size_info =
    MIPS-specific function only applies to IRIX5, which had no 64-bit
    ABI.  */
 #define bfd_elf64_find_nearest_line    _bfd_mips_elf_find_nearest_line
+#define bfd_elf64_find_inliner_info    _bfd_mips_elf_find_inliner_info
 #define bfd_elf64_new_section_hook     _bfd_mips_elf_new_section_hook
 #define bfd_elf64_set_section_contents _bfd_mips_elf_set_section_contents
 #define bfd_elf64_bfd_get_relocated_section_contents \
index 102b9acd13c3cff41e9420783d6adf25f219fb80..b4fafb7e41bcbbab8cf067dfc34a05e5d03e389a 100644 (file)
@@ -2356,6 +2356,7 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = {
 #define elf_backend_mips_irix_compat   elf_n32_mips_irix_compat
 #define elf_backend_mips_rtype_to_howto        mips_elf_n32_rtype_to_howto
 #define bfd_elf32_find_nearest_line    _bfd_mips_elf_find_nearest_line
+#define bfd_elf32_find_inliner_info    _bfd_mips_elf_find_inliner_info
 #define bfd_elf32_new_section_hook     _bfd_mips_elf_new_section_hook
 #define bfd_elf32_set_section_contents _bfd_mips_elf_set_section_contents
 #define bfd_elf32_bfd_get_relocated_section_contents \
index 6e5d968a275a9b41779068fa449e327601a51812..c0bcfc5512cc221a0905624494a0a1288f0afb15 100644 (file)
@@ -8625,6 +8625,20 @@ _bfd_mips_elf_find_nearest_line (bfd *abfd, asection *section,
                                     filename_ptr, functionname_ptr,
                                     line_ptr);
 }
+
+bfd_boolean
+_bfd_mips_elf_find_inliner_info (bfd *abfd,
+                                const char **filename_ptr,
+                                const char **functionname_ptr,
+                                unsigned int *line_ptr)
+{
+  bfd_boolean found;
+  found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
+                                        functionname_ptr, line_ptr,
+                                        & elf_tdata (abfd)->dwarf2_find_line_info);
+  return found;
+}
+
 \f
 /* When are writing out the .options or .MIPS.options section,
    remember the bytes we are writing out, so that we can install the
index 6d9b34879007683faa80c87a04c809ab81ccd475..624d4ab7ce7b3d5d0815393aae095ecbe58f47e7 100644 (file)
@@ -81,6 +81,8 @@ extern bfd_boolean _bfd_mips_elf_ignore_discarded_relocs
 extern bfd_boolean _bfd_mips_elf_find_nearest_line
   (bfd *, asection *, asymbol **, bfd_vma, const char **,
    const char **, unsigned int *);
+extern bfd_boolean _bfd_mips_elf_find_inliner_info
+  (bfd *, const char **, const char **, unsigned int *);
 extern bfd_boolean _bfd_mips_elf_set_section_contents
   (bfd *, asection *, const void *, file_ptr, bfd_size_type);
 extern bfd_byte *_bfd_elf_mips_get_relocated_section_contents
index 77b29cc7853c7d19b5f58a9bdcdad4404b4ba0cb..fcfd0402d9c30cb44f91d24d166ebfaf32ba22e9 100644 (file)
@@ -44,6 +44,9 @@
 #ifndef bfd_elfNN_find_nearest_line
 #define bfd_elfNN_find_nearest_line    _bfd_elf_find_nearest_line
 #endif
+#ifndef bfd_elfNN_find_inliner_info
+#define bfd_elfNN_find_inliner_info    _bfd_elf_find_inliner_info
+#endif
 #define bfd_elfNN_read_minisymbols     _bfd_elf_read_minisymbols
 #define bfd_elfNN_minisymbol_to_symbol _bfd_elf_minisymbol_to_symbol
 #define bfd_elfNN_get_dynamic_symtab_upper_bound \
index 1e747efd5d2c07905c600bb04db7f1fb116ff816..bb25acd7324e7feda16514d530304c23f5b98333 100644 (file)
@@ -169,6 +169,7 @@ msdos_set_section_contents (abfd, section, location, offset, count)
 #define msdos_print_symbol _bfd_nosymbols_print_symbol
 #define msdos_get_symbol_info _bfd_nosymbols_get_symbol_info
 #define msdos_find_nearest_line _bfd_nosymbols_find_nearest_line
+#define msdos_find_inliner_info _bfd_nosymbols_find_inliner_info
 #define msdos_get_lineno _bfd_nosymbols_get_lineno
 #define msdos_bfd_is_target_special_symbol ((bfd_boolean (*) (bfd *, asymbol *)) bfd_false)
 #define msdos_bfd_is_local_label_name _bfd_nosymbols_bfd_is_local_label_name
index e2b0b6aeb856e60c7aa73d9dfbdcdf29354d9cb7..b517c02a3f87caa94dc6af953dc9b7a31fd65915 100644 (file)
@@ -3664,6 +3664,15 @@ ieee_find_nearest_line (bfd *abfd ATTRIBUTE_UNUSED,
   return FALSE;
 }
 
+static bfd_boolean
+ieee_find_inliner_info (bfd *abfd ATTRIBUTE_UNUSED,
+                       const char **filename_ptr ATTRIBUTE_UNUSED,
+                       const char **functionname_ptr ATTRIBUTE_UNUSED,
+                       unsigned int *line_ptr ATTRIBUTE_UNUSED)
+{
+  return FALSE;
+}
+
 static int
 ieee_generic_stat_arch_elt (bfd *abfd, struct stat *buf)
 {
index 8e9a4bbebe2af96a7d4b73b8198f266a8466ecc2..fb2ab96c99ed602ebbedb1558fca12fdcb50945d 100644 (file)
@@ -920,6 +920,7 @@ ihex_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED, bfd_boolean exec ATTRIBUTE_UNUS
 #define ihex_bfd_is_local_label_name              _bfd_nosymbols_bfd_is_local_label_name
 #define ihex_get_lineno                           _bfd_nosymbols_get_lineno
 #define ihex_find_nearest_line                    _bfd_nosymbols_find_nearest_line
+#define ihex_find_inliner_info                    _bfd_nosymbols_find_inliner_info
 #define ihex_bfd_make_debug_symbol                _bfd_nosymbols_bfd_make_debug_symbol
 #define ihex_read_minisymbols                     _bfd_nosymbols_read_minisymbols
 #define ihex_minisymbol_to_symbol                 _bfd_nosymbols_minisymbol_to_symbol
index 6b326939b224794b1145f566342fe3d8335cc232..79f540221ef4f73a439791ad53c8a8703374e788 100644 (file)
@@ -590,6 +590,12 @@ extern bfd_boolean NAME (aout, final_link)
 extern bfd_boolean NAME (aout, bfd_free_cached_info)
   (bfd *);
 
+#define aout_32_find_inliner_info      _bfd_nosymbols_find_inliner_info
+#if 0  /* Are these needed? */
+#define aout_16_find_inliner_info      _bfd_nosymbols_find_inliner_info
+#define aout_64_find_inliner_info      _bfd_nosymbols_find_inliner_info
+#endif
+
 /* A.out uses the generic versions of these routines...  */
 
 #define        aout_16_get_section_contents    _bfd_generic_get_section_contents
index 18c9e69fa694b4c610758f10ce1d02c0635d4040..84236f9d570c17438a3eb067fa0e6e8021b1e6fb 100644 (file)
@@ -312,6 +312,9 @@ extern bfd_boolean _bfd_archive_coff_construct_extended_name_table
   ((bfd_boolean (*) (bfd *, asection *, asymbol **, bfd_vma, const char **, \
                     const char **, unsigned int *)) \
    bfd_false)
+#define _bfd_nosymbols_find_inliner_info \
+  ((bfd_boolean (*) (bfd *, const char **, const char **, unsigned int *)) \
+   bfd_false)
 #define _bfd_nosymbols_bfd_make_debug_symbol \
   ((asymbol *(*) (bfd *, void *, unsigned long)) bfd_nullvoidptr)
 #define _bfd_nosymbols_read_minisymbols \
@@ -425,6 +428,10 @@ extern bfd_boolean _bfd_dwarf2_find_nearest_line
   (bfd *, asection *, asymbol **, bfd_vma, const char **, const char **,
    unsigned int *, unsigned int, void **);
 
+/* Find inliner info after calling bfd_find_nearest_line. */
+extern bfd_boolean _bfd_dwarf2_find_inliner_info
+  (bfd *, const char **, const char **, unsigned int *, void **);
+  
 /* Create a new section entry.  */
 extern struct bfd_hash_entry *bfd_section_hash_newfunc
   (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
index 5b83a81c036443f88aef5f8e13dc9b87382ea8df..f2d51efb9e1db376bd202c519e703cba12300586 100644 (file)
@@ -317,6 +317,9 @@ extern bfd_boolean _bfd_archive_coff_construct_extended_name_table
   ((bfd_boolean (*) (bfd *, asection *, asymbol **, bfd_vma, const char **, \
                     const char **, unsigned int *)) \
    bfd_false)
+#define _bfd_nosymbols_find_inliner_info \
+  ((bfd_boolean (*) (bfd *, const char **, const char **, unsigned int *)) \
+   bfd_false)
 #define _bfd_nosymbols_bfd_make_debug_symbol \
   ((asymbol *(*) (bfd *, void *, unsigned long)) bfd_nullvoidptr)
 #define _bfd_nosymbols_read_minisymbols \
@@ -430,6 +433,10 @@ extern bfd_boolean _bfd_dwarf2_find_nearest_line
   (bfd *, asection *, asymbol **, bfd_vma, const char **, const char **,
    unsigned int *, unsigned int, void **);
 
+/* Find inliner info after calling bfd_find_nearest_line. */
+extern bfd_boolean _bfd_dwarf2_find_inliner_info
+  (bfd *, const char **, const char **, unsigned int *, void **);
+  
 /* Create a new section entry.  */
 extern struct bfd_hash_entry *bfd_section_hash_newfunc
   (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
index a6707278585de8897171eb28cab9f9abf8d27ae8..490f2a8046240e2f4b775c657cfca3b14d2920c1 100644 (file)
@@ -345,6 +345,8 @@ 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 *);
+extern bfd_boolean coff_find_inliner_info
+  (bfd *, const char **, const char **, unsigned int *);
 extern int coff_sizeof_headers
   (bfd *, bfd_boolean);
 extern bfd_boolean bfd_coff_reloc16_relax_section
index decd146ab29c37d2c2b62e9ca350cd4654d1f4fa..67ff404895a5130af3f557439333339f108e4aeb 100644 (file)
@@ -349,6 +349,8 @@ 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 *);
+extern bfd_boolean coff_find_inliner_info
+  (bfd *, const char **, const char **, unsigned int *);
 extern int coff_sizeof_headers
   (bfd *, bfd_boolean);
 extern bfd_boolean bfd_coff_reloc16_relax_section
index becc75cc1532c7875e2727e27e4424134c474863..8c5e218ee58dab5909a6eccc02fe37df973661c2 100644 (file)
@@ -289,6 +289,7 @@ extern bfd_boolean _bfd_ecoff_find_nearest_line
 #define _bfd_ecoff_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
 #define _bfd_ecoff_read_minisymbols _bfd_generic_read_minisymbols
 #define _bfd_ecoff_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol
+#define _bfd_ecoff_find_inliner_info _bfd_nosymbols_find_inliner_info
 
 #define _bfd_ecoff_get_reloc_upper_bound coff_get_reloc_upper_bound
 extern long _bfd_ecoff_canonicalize_reloc
index f25b42bcff4c7ff4336e46568dff6b7011c69966..6991612f07cffee1edb7fad041b201daca526418 100644 (file)
@@ -48,6 +48,7 @@
 #define bfd_mach_o_bfd_is_local_label_name            _bfd_nosymbols_bfd_is_local_label_name
 #define bfd_mach_o_get_lineno                         _bfd_nosymbols_get_lineno
 #define bfd_mach_o_find_nearest_line                  _bfd_nosymbols_find_nearest_line
+#define bfd_mach_o_find_inliner_info                  _bfd_nosymbols_find_inliner_info
 #define bfd_mach_o_bfd_make_debug_symbol              _bfd_nosymbols_bfd_make_debug_symbol
 #define bfd_mach_o_read_minisymbols                   _bfd_generic_read_minisymbols
 #define bfd_mach_o_minisymbol_to_symbol               _bfd_generic_minisymbol_to_symbol
index e7543d923385879401fc74a71918662cc3b0ffd3..a4559e1ba27993645e90198237f40761a29c3311 100644 (file)
--- a/bfd/mmo.c
+++ b/bfd/mmo.c
@@ -3202,6 +3202,7 @@ mmo_canonicalize_reloc (bfd *abfd ATTRIBUTE_UNUSED,
 /* FIXME: We can do better on this one, if we have a dwarf2 .debug_line
    section or if MMO line numbers are implemented.  */
 #define mmo_find_nearest_line _bfd_nosymbols_find_nearest_line
+#define mmo_find_inliner_info _bfd_nosymbols_find_inliner_info
 #define mmo_make_empty_symbol _bfd_generic_make_empty_symbol
 #define mmo_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
 #define mmo_read_minisymbols _bfd_generic_read_minisymbols
index f99aa429ee62ed637d41eefa9f39e6a3bf106918..3358aef8e75e31c89603bc370d21636093959a94 100644 (file)
@@ -29,6 +29,7 @@
 #define nlm_bfd_is_target_special_symbol ((bfd_boolean (*) (bfd *, asymbol *)) bfd_false)
 #define nlm_get_lineno                          _bfd_nosymbols_get_lineno
 #define nlm_find_nearest_line                   _bfd_nosymbols_find_nearest_line
+#define nlm_find_inliner_info                   _bfd_nosymbols_find_inliner_info
 #define nlm_bfd_make_debug_symbol               _bfd_nosymbols_bfd_make_debug_symbol
 #define nlm_read_minisymbols                    _bfd_generic_read_minisymbols
 #define nlm_minisymbol_to_symbol                _bfd_generic_minisymbol_to_symbol
index 2813d4d0541109748b6f520a3f99e4c1833edbdb..2647f82f00c3a30efb489a41029c14384181d264 100644 (file)
@@ -1132,6 +1132,15 @@ oasys_find_nearest_line (bfd *abfd ATTRIBUTE_UNUSED,
   return FALSE;
 }
 
+static bfd_boolean
+oasys_find_inliner_info (bfd *abfd ATTRIBUTE_UNUSED,
+                        const char **filename_ptr ATTRIBUTE_UNUSED,
+                        const char **functionname_ptr ATTRIBUTE_UNUSED,
+                        unsigned int *line_ptr ATTRIBUTE_UNUSED)
+{
+  return FALSE;
+}
+
 static int
 oasys_generic_stat_arch_elt (bfd *abfd, struct stat *buf)
 {
index d9e05b1d52627ed703af10d264a6319137c81cd2..2aca6a445b76665c9299f0633539518d51a25104 100644 (file)
--- a/bfd/pef.c
+++ b/bfd/pef.c
@@ -37,6 +37,7 @@
 #define bfd_pef_bfd_is_target_special_symbol ((bfd_boolean (*) (bfd *, asymbol *)) bfd_false)
 #define bfd_pef_get_lineno                          _bfd_nosymbols_get_lineno
 #define bfd_pef_find_nearest_line                   _bfd_nosymbols_find_nearest_line
+#define bfd_pef_find_inliner_info                   _bfd_nosymbols_find_inliner_info
 #define bfd_pef_bfd_make_debug_symbol               _bfd_nosymbols_bfd_make_debug_symbol
 #define bfd_pef_read_minisymbols                    _bfd_generic_read_minisymbols
 #define bfd_pef_minisymbol_to_symbol                _bfd_generic_minisymbol_to_symbol
index 87cacfa81aa0fd5cea96df479e52b058b800f7f3..7c8a4190bac2ec8e3713c461644070cfbba3473b 100644 (file)
@@ -350,6 +350,7 @@ ppcboot_get_symbol_info (ignore_abfd, symbol, ret)
 #define ppcboot_bfd_is_local_label_name bfd_generic_is_local_label_name
 #define ppcboot_get_lineno _bfd_nosymbols_get_lineno
 #define ppcboot_find_nearest_line _bfd_nosymbols_find_nearest_line
+#define ppcboot_find_inliner_info _bfd_nosymbols_find_inliner_info
 #define ppcboot_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
 #define ppcboot_read_minisymbols _bfd_generic_read_minisymbols
 #define ppcboot_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol
index 32aaca918e64b7d72a25d948c02447ee58e99073..2b24f46ffb643dc5224b42fc8152079b82997a4a 100644 (file)
@@ -1188,6 +1188,7 @@ srec_print_symbol (bfd *abfd,
 #define srec_bfd_is_local_label_name              bfd_generic_is_local_label_name
 #define srec_get_lineno                           _bfd_nosymbols_get_lineno
 #define srec_find_nearest_line                    _bfd_nosymbols_find_nearest_line
+#define srec_find_inliner_info                    _bfd_nosymbols_find_inliner_info
 #define srec_make_empty_symbol                    _bfd_generic_make_empty_symbol
 #define srec_bfd_make_debug_symbol                _bfd_nosymbols_bfd_make_debug_symbol
 #define srec_read_minisymbols                     _bfd_generic_read_minisymbols
index a9e4c1ecdcbedfbaed30ecad7e21266a460ceaa5..50b3eeb50033a9ae241f07dd7b52611a4e64b233 100644 (file)
@@ -349,6 +349,7 @@ BFD_JUMP_TABLE macros.
 .  NAME##_bfd_is_target_special_symbol, \
 .  NAME##_get_lineno, \
 .  NAME##_find_nearest_line, \
+.  NAME##_find_inliner_info, \
 .  NAME##_bfd_make_debug_symbol, \
 .  NAME##_read_minisymbols, \
 .  NAME##_minisymbol_to_symbol
@@ -370,6 +371,8 @@ BFD_JUMP_TABLE macros.
 .  bfd_boolean (*_bfd_find_nearest_line)
 .    (bfd *, struct bfd_section *, struct bfd_symbol **, bfd_vma,
 .     const char **, const char **, unsigned int *);
+.  bfd_boolean (*_bfd_find_inliner_info)
+.    (bfd *, const char **, const char **, unsigned int *);
 . {* Back-door to allow format-aware applications to create debug symbols
 .    while using BFD for everything else.  Currently used by the assembler
 .    when creating COFF files.  *}
index a2017d229dc2cc509fbe6e5a26c68d112bff00a2..559f21afb5ccce6f00b6d635060cb45aabadeb30 100644 (file)
@@ -895,6 +895,7 @@ tekhex_print_symbol (bfd *abfd,
 #define tekhex_bfd_is_local_label_name               bfd_generic_is_local_label_name
 #define tekhex_get_lineno                           _bfd_nosymbols_get_lineno
 #define tekhex_find_nearest_line                    _bfd_nosymbols_find_nearest_line
+#define tekhex_find_inliner_info                    _bfd_nosymbols_find_inliner_info
 #define tekhex_bfd_make_debug_symbol                _bfd_nosymbols_bfd_make_debug_symbol
 #define tekhex_read_minisymbols                     _bfd_generic_read_minisymbols
 #define tekhex_minisymbol_to_symbol                 _bfd_generic_minisymbol_to_symbol
index f04cc3726db54ff74b749a808c1fd404143974d7..fb6cfbd22ac0ab4cbf8463c9dc659576f7beda4f 100644 (file)
@@ -792,6 +792,7 @@ versados_canonicalize_reloc (bfd *abfd,
 #define versados_bfd_is_local_label_name              bfd_generic_is_local_label_name
 #define versados_get_lineno                           _bfd_nosymbols_get_lineno
 #define versados_find_nearest_line                    _bfd_nosymbols_find_nearest_line
+#define versados_find_inliner_info                    _bfd_nosymbols_find_inliner_info
 #define versados_make_empty_symbol                    _bfd_generic_make_empty_symbol
 #define versados_bfd_make_debug_symbol                _bfd_nosymbols_bfd_make_debug_symbol
 #define versados_read_minisymbols                     _bfd_generic_read_minisymbols
index 69888671863e4bb9caa8f7dcfa4dbd0e8a39f2db..cdac38130127c1b6039b9c1d7118f13a0a45b093 100644 (file)
--- a/bfd/vms.c
+++ b/bfd/vms.c
@@ -972,6 +972,19 @@ vms_find_nearest_line (bfd * abfd ATTRIBUTE_UNUSED,
   return FALSE;
 }
 
+static bfd_boolean
+vms_find_inliner_info (bfd * abfd ATTRIBUTE_UNUSED,
+                      const char **file ATTRIBUTE_UNUSED,
+                      const char **func ATTRIBUTE_UNUSED,
+                      unsigned int *line ATTRIBUTE_UNUSED)
+{
+#if VMS_DEBUG
+  vms_debug (1, "vms_find_inliner_info (%p, <ret>, <ret>, <ret>)\n",
+            abfd);
+#endif
+  return FALSE;
+}
+
 /* Back-door to allow format-aware applications to create debug symbols
    while using BFD for everything else.  Currently used by the assembler
    when creating COFF files.  */
index e38f9baca21bb611d2c892fe6a17a0647df79f8e..9659a65e021bec11d4c6e210a9f00b8be382fe7f 100644 (file)
@@ -30,6 +30,7 @@
 #define bfd_sym_bfd_is_target_special_symbol       ((bfd_boolean (*) (bfd *, asymbol *)) bfd_false)
 #define bfd_sym_get_lineno                          _bfd_nosymbols_get_lineno
 #define bfd_sym_find_nearest_line                   _bfd_nosymbols_find_nearest_line
+#define bfd_sym_find_inliner_info                   _bfd_nosymbols_find_inliner_info
 #define bfd_sym_bfd_make_debug_symbol               _bfd_nosymbols_bfd_make_debug_symbol
 #define bfd_sym_read_minisymbols                    _bfd_generic_read_minisymbols
 #define bfd_sym_minisymbol_to_symbol                _bfd_generic_minisymbol_to_symbol