Using libbacktrace in libgfortran: some questions

Ian Lance Taylor iant@google.com
Thu Aug 13 23:56:00 GMT 2015


On Thu, Aug 13, 2015 at 8:50 AM, FX <fxcoudert@gmail.com> wrote:
>> And yet, that patch has absolutely nothing to do with libbacktrace.
>> Hmmm.  Let's try this one.
>
> Works perfectly with the patch:

Patch tested and committed with this ChangeLog entry.

2015-08-13  Ian Lance Taylor  <iant@google.com>

* dwarf.c (read_function_entry): Add vec_inlined parameter.
Change all callers.
-------------- next part --------------
Index: dwarf.c
===================================================================
--- dwarf.c	(revision 226846)
+++ dwarf.c	(working copy)
@@ -2250,7 +2250,8 @@ read_function_entry (struct backtrace_st
 		     struct unit *u, uint64_t base, struct dwarf_buf *unit_buf,
 		     const struct line_header *lhdr,
 		     backtrace_error_callback error_callback, void *data,
-		     struct function_vector *vec)
+		     struct function_vector *vec_function,
+		     struct function_vector *vec_inlined)
 {
   while (unit_buf->left > 0)
     {
@@ -2258,6 +2259,7 @@ read_function_entry (struct backtrace_st
       const struct abbrev *abbrev;
       int is_function;
       struct function *function;
+      struct function_vector *vec;
       size_t i;
       uint64_t lowpc;
       int have_lowpc;
@@ -2279,6 +2281,11 @@ read_function_entry (struct backtrace_st
 		     || abbrev->tag == DW_TAG_entry_point
 		     || abbrev->tag == DW_TAG_inlined_subroutine);
 
+      if (abbrev->tag == DW_TAG_inlined_subroutine)
+	vec = vec_inlined;
+      else
+	vec = vec_function;
+
       function = NULL;
       if (is_function)
 	{
@@ -2458,7 +2465,8 @@ read_function_entry (struct backtrace_st
 	  if (!is_function)
 	    {
 	      if (!read_function_entry (state, ddata, u, base, unit_buf, lhdr,
-					error_callback, data, vec))
+					error_callback, data, vec_function,
+					vec_inlined))
 		return 0;
 	    }
 	  else
@@ -2471,7 +2479,8 @@ read_function_entry (struct backtrace_st
 	      memset (&fvec, 0, sizeof fvec);
 
 	      if (!read_function_entry (state, ddata, u, base, unit_buf, lhdr,
-					error_callback, data, &fvec))
+					error_callback, data, vec_function,
+					&fvec))
 		return 0;
 
 	      if (fvec.count > 0)
@@ -2535,7 +2544,7 @@ read_function_info (struct backtrace_sta
   while (unit_buf.left > 0)
     {
       if (!read_function_entry (state, ddata, u, 0, &unit_buf, lhdr,
-				error_callback, data, pfvec))
+				error_callback, data, pfvec, pfvec))
 	return;
     }
 


More information about the Gcc-patches mailing list