]> git.ipfire.org Git - people/ms/ipfire-3.x.git/blobdiff - binutils/patches/binutils-2.24-DW_FORM_ref_addr.patch0
binutils: Update to 2.24
[people/ms/ipfire-3.x.git] / binutils / patches / binutils-2.24-DW_FORM_ref_addr.patch0
diff --git a/binutils/patches/binutils-2.24-DW_FORM_ref_addr.patch0 b/binutils/patches/binutils-2.24-DW_FORM_ref_addr.patch0
new file mode 100644 (file)
index 0000000..92ef150
--- /dev/null
@@ -0,0 +1,44 @@
+*** ../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;