2009-06-23 Sami Wagiaalla <swagiaal@redhat.com>
[deliverable/binutils-gdb.git] / gdb / dwarf2-frame.c
index c1b3e60e3d529cd1729e43e12abc67739591c888..67265f2d7ec69d095a132f5e28957fae68dab53b 100644 (file)
@@ -1,6 +1,7 @@
 /* Frame unwinder for frames with DWARF Call Frame Information.
 
-   Copyright (C) 2003, 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009
+   Free Software Foundation, Inc.
 
    Contributed by Mark Kettenis.
 
@@ -129,7 +130,7 @@ struct comp_unit
   gdb_byte *dwarf_frame_buffer;
 
   /* Length of the loaded .debug_frame section.  */
-  unsigned long dwarf_frame_size;
+  bfd_size_type dwarf_frame_size;
 
   /* Pointer to the .debug_frame section.  */
   asection *dwarf_frame_section;
@@ -1895,15 +1896,9 @@ decode_frame_entry (struct comp_unit *unit, gdb_byte *start, int eh_frame_p)
 }
 \f
 
-/* FIXME: kettenis/20030504: This still needs to be integrated with
-   dwarf2read.c in a better way.  */
-
-/* Imported from dwarf2read.c.  */
-extern asection *dwarf_frame_section;
-extern asection *dwarf_eh_frame_section;
-
 /* Imported from dwarf2read.c.  */
-extern gdb_byte *dwarf2_read_section (struct objfile *objfile, asection *sectp);
+extern void dwarf2_get_section_info (struct objfile *, const char *, asection **,
+                                     gdb_byte **, bfd_size_type *);
 
 void
 dwarf2_build_frame_info (struct objfile *objfile)
@@ -1921,17 +1916,15 @@ dwarf2_build_frame_info (struct objfile *objfile)
 
   /* First add the information from the .eh_frame section.  That way,
      the FDEs from that section are searched last.  */
-  if (dwarf_eh_frame_section)
+  dwarf2_get_section_info (objfile, ".eh_frame",
+                           &unit->dwarf_frame_section,
+                           &unit->dwarf_frame_buffer,
+                           &unit->dwarf_frame_size);
+  if (unit->dwarf_frame_size)
     {
       asection *got, *txt;
 
       unit->cie = NULL;
-      unit->dwarf_frame_buffer = dwarf2_read_section (objfile,
-                                                     dwarf_eh_frame_section);
-
-      unit->dwarf_frame_size = bfd_get_section_size (dwarf_eh_frame_section);
-      unit->dwarf_frame_section = dwarf_eh_frame_section;
-
       /* FIXME: kettenis/20030602: This is the DW_EH_PE_datarel base
         that is used for the i386/amd64 target, which currently is
         the only target in GCC that supports/uses the
@@ -1951,13 +1944,13 @@ dwarf2_build_frame_info (struct objfile *objfile)
        frame_ptr = decode_frame_entry (unit, frame_ptr, 1);
     }
 
-  if (dwarf_frame_section)
+  dwarf2_get_section_info (objfile, ".debug_frame",
+                           &unit->dwarf_frame_section,
+                           &unit->dwarf_frame_buffer,
+                           &unit->dwarf_frame_size);
+  if (unit->dwarf_frame_size)
     {
       unit->cie = NULL;
-      unit->dwarf_frame_buffer = dwarf2_read_section (objfile,
-                                                     dwarf_frame_section);
-      unit->dwarf_frame_size = bfd_get_section_size (dwarf_frame_section);
-      unit->dwarf_frame_section = dwarf_frame_section;
 
       frame_ptr = unit->dwarf_frame_buffer;
       while (frame_ptr < unit->dwarf_frame_buffer + unit->dwarf_frame_size)
This page took 0.024664 seconds and 4 git commands to generate.