4dda3faefd
Resolved: #1056797
45 lines
1.3 KiB
Diff
45 lines
1.3 KiB
Diff
*** ../binutils-2.24.orig/bfd/dwarf2.c 2014-01-28 11:58:02.072737296 +0000
|
|
--- bfd/dwarf2.c 2014-01-28 11:59:38.575739971 +0000
|
|
*************** find_abstract_instance_name (struct comp
|
|
*** 2126,2131 ****
|
|
--- 2126,2153 ----
|
|
abort ();
|
|
|
|
info_ptr = unit->sec_info_ptr + die_ref;
|
|
+
|
|
+ /* Now find the CU containing this pointer. */
|
|
+ if (info_ptr >= unit->info_ptr_unit && info_ptr < unit->end_ptr)
|
|
+ ;
|
|
+ else
|
|
+ {
|
|
+ /* Check other CUs to see if they contain the abbrev. */
|
|
+ struct comp_unit * u;
|
|
+
|
|
+ for (u = unit->prev_unit; u != NULL; u = u->prev_unit)
|
|
+ if (info_ptr >= u->info_ptr_unit && info_ptr < u->end_ptr)
|
|
+ break;
|
|
+
|
|
+ if (u == NULL)
|
|
+ for (u = unit->next_unit; u != NULL; u = u->next_unit)
|
|
+ if (info_ptr >= u->info_ptr_unit && info_ptr < u->end_ptr)
|
|
+ break;
|
|
+
|
|
+ if (u)
|
|
+ unit = u;
|
|
+ /* else FIXME: What do we do now ? */
|
|
+ }
|
|
}
|
|
else if (attr_ptr->form == DW_FORM_GNU_ref_alt)
|
|
{
|
|
*************** find_abstract_instance_name (struct comp
|
|
*** 2137,2142 ****
|
|
--- 2159,2166 ----
|
|
bfd_set_error (bfd_error_bad_value);
|
|
return name;
|
|
}
|
|
+ /* FIXME: Do we need to locate the correct CU, in a similar
|
|
+ fashion to the code in the DW_FORM_ref_addr case above ? */
|
|
}
|
|
else
|
|
info_ptr = unit->info_ptr_unit + die_ref;
|