Author: sewardj
Date: 2008-02-07 11:53:55 +0000 (Thu, 07 Feb 2008)
New Revision: 7374

Log:

* Improve debug printing
* Find more flavours of Dwarf sections, and hand them off to
  the new .debug_info reader



Modified:
   branches/DATASYMS/coregrind/m_debuginfo/readelf.c


Modified: branches/DATASYMS/coregrind/m_debuginfo/readelf.c
===================================================================
--- branches/DATASYMS/coregrind/m_debuginfo/readelf.c   2008-02-07 11:51:29 UTC 
(rev 7373)
+++ branches/DATASYMS/coregrind/m_debuginfo/readelf.c   2008-02-07 11:53:55 UTC 
(rev 7374)
@@ -50,6 +50,7 @@
 #include "priv_storage.h"
 #include "priv_readelf.h"          /* self */
 #include "priv_readdwarf.h"        /* 'cos ELF contains DWARF */
+#include "priv_readdwarf3.h"
 #include "priv_readstabs.h"        /* and stabs, if we're unlucky */
 
 /* --- !!! --- EXTERNAL HEADERS start --- !!! --- */
@@ -503,7 +504,7 @@
       return;
    }
 
-   TRACE_SYMTAB("\n--- Reading (ELF, standard) %s (%d entries)---\n",
+   TRACE_SYMTAB("\n--- Reading (ELF, standard) %s (%d entries) ---\n",
                 tab_name, symtab_szB/sizeof(ElfXX_Sym) );
 
    /* Perhaps should start at i = 1; ELF docs suggest that entry
@@ -1102,12 +1103,7 @@
    shdr_nent    = ehdr_img->e_shnum;
    shdr_ent_szB = ehdr_img->e_shentsize;
 
-   TRACE_SYMTAB("\n");
-   TRACE_SYMTAB("------ start ELF OBJECT ------------------------------\n");
-   TRACE_SYMTAB("------ name = %s\n", di->filename);
-   TRACE_SYMTAB("\n");
-
-   TRACE_SYMTAB("--- Basic facts about the object ---\n");
+   TRACE_SYMTAB("------ Basic facts about the object ------\n");
    TRACE_SYMTAB("object: img %p n_oimage %ld\n",
                (void*)oimage, n_oimage);
    TRACE_SYMTAB("phdr:   img %p nent %ld ent_szB %ld\n",
@@ -1151,7 +1147,7 @@
       this object.  Apparently requires looking through the program
       header table. */
    TRACE_SYMTAB("\n");
-   TRACE_SYMTAB("--- Looking for the soname ---\n");
+   TRACE_SYMTAB("------ Looking for the soname ------\n");
    vg_assert(di->soname == NULL);
    {
       ElfXX_Addr prev_svma = 0;
@@ -1278,7 +1274,8 @@
 
    /* Now read the section table. */
    TRACE_SYMTAB("\n");
-   TRACE_SYMTAB("--- Examining the section headers and program headers ---\n");
+   TRACE_SYMTAB("------ Examining the section headers "
+                "and program headers ------\n");
    TRACE_SYMTAB("rx: foffsets %ld .. %ld\n",
                di->rx_map_foff, di->rx_map_foff + di->rx_map_size - 1 );
    TRACE_SYMTAB("rw: foffsets %ld .. %ld\n",
@@ -1602,7 +1599,8 @@
                                 di->text_avma );
 
    TRACE_SYMTAB("\n");
-   TRACE_SYMTAB("--- Finding image addresses for debug-info sections ---\n");
+   TRACE_SYMTAB("------ Finding image addresses "
+                "for debug-info sections ------\n");
 
    /* Find interesting sections, read the symbol table(s), read any debug
       information */
@@ -1610,22 +1608,24 @@
       /* IMAGE addresses: pointers to start of sections in the
          transiently loaded oimage, not in the fragments of the file
          mapped in by the guest's dynamic linker. */
-      UChar*     strtab_img      = NULL; /* .strtab */
-      ElfXX_Sym* symtab_img      = NULL; /* .symtab */
-      UChar*     dynstr_img      = NULL; /* .dynstr */
-      ElfXX_Sym* dynsym_img      = NULL; /* .dynsym */
-      UChar*     debuglink_img   = NULL; /* .gnu_debuglink */
-      UChar*     stab_img        = NULL; /* .stab         (stabs)  */
-      UChar*     stabstr_img     = NULL; /* .stabstr      (stabs)  */
-      UChar*     debug_line_img  = NULL; /* .debug_line   (dwarf2) */
-      UChar*     debug_info_img  = NULL; /* .debug_info   (dwarf2) */
-      UChar*     debug_abbv_img  = NULL; /* .debug_abbrev (dwarf2) */
-      UChar*     debug_str_img   = NULL; /* .debug_str    (dwarf2) */
-      UChar*     dwarf1d_img     = NULL; /* .debug        (dwarf1) */
-      UChar*     dwarf1l_img     = NULL; /* .line         (dwarf1) */
-      UChar*     ehframe_img     = NULL; /* .eh_frame     (dwarf2) */
-      UChar*     opd_img         = NULL; /* .opd (dwarf2, ppc64-linux) */
-
+      UChar*     strtab_img       = NULL; /* .strtab */
+      ElfXX_Sym* symtab_img       = NULL; /* .symtab */
+      UChar*     dynstr_img       = NULL; /* .dynstr */
+      ElfXX_Sym* dynsym_img       = NULL; /* .dynsym */
+      UChar*     debuglink_img    = NULL; /* .gnu_debuglink */
+      UChar*     stab_img         = NULL; /* .stab         (stabs)  */
+      UChar*     stabstr_img      = NULL; /* .stabstr      (stabs)  */
+      UChar*     debug_line_img   = NULL; /* .debug_line   (dwarf2) */
+      UChar*     debug_info_img   = NULL; /* .debug_info   (dwarf2) */
+      UChar*     debug_abbv_img   = NULL; /* .debug_abbrev (dwarf2) */
+      UChar*     debug_str_img    = NULL; /* .debug_str    (dwarf2) */
+      UChar*     debug_ranges_img = NULL; /* .debug_ranges (dwarf2) */
+      UChar*     debug_loc_img    = NULL; /* .debug_loc    (dwarf2) */
+      UChar*     dwarf1d_img      = NULL; /* .debug        (dwarf1) */
+      UChar*     dwarf1l_img      = NULL; /* .line         (dwarf1) */
+      UChar*     ehframe_img      = NULL; /* .eh_frame     (dwarf2) */
+      UChar*     opd_img          = NULL; /* .opd (dwarf2,
+                                                   ppc64-linux) */
       /* Section sizes, in bytes */
       SizeT      strtab_sz       = 0;
       SizeT      symtab_sz       = 0;
@@ -1638,6 +1638,8 @@
       SizeT      debug_info_sz   = 0;
       SizeT      debug_abbv_sz   = 0;
       SizeT      debug_str_sz    = 0;
+      SizeT      debug_ranges_sz = 0;
+      SizeT      debug_loc_sz    = 0;
       SizeT      dwarf1d_sz      = 0;
       SizeT      dwarf1l_sz      = 0;
       SizeT      ehframe_sz      = 0;
@@ -1678,27 +1680,29 @@
             } \
          } while (0);
 
-         /*   NAME              SIZE           IMAGE addr */
-         FIND(".dynsym",        dynsym_sz,     dynsym_img)
-         FIND(".dynstr",        dynstr_sz,     dynstr_img)
-         FIND(".symtab",        symtab_sz,     symtab_img)
-         FIND(".strtab",        strtab_sz,     strtab_img)
+         /*   NAME              SIZE             IMAGE addr */
+         FIND(".dynsym",        dynsym_sz,       dynsym_img)
+         FIND(".dynstr",        dynstr_sz,       dynstr_img)
+         FIND(".symtab",        symtab_sz,       symtab_img)
+         FIND(".strtab",        strtab_sz,       strtab_img)
 
-         FIND(".gnu_debuglink", debuglink_sz,  debuglink_img)
+         FIND(".gnu_debuglink", debuglink_sz,    debuglink_img)
 
-         FIND(".stab",          stab_sz,       stab_img)
-         FIND(".stabstr",       stabstr_sz,    stabstr_img)
+         FIND(".stab",          stab_sz,         stab_img)
+         FIND(".stabstr",       stabstr_sz,      stabstr_img)
 
-         FIND(".debug_line",    debug_line_sz, debug_line_img)
-         FIND(".debug_info",    debug_info_sz, debug_info_img)
-         FIND(".debug_abbrev",  debug_abbv_sz, debug_abbv_img)
-         FIND(".debug_str",     debug_str_sz,  debug_str_img)
+         FIND(".debug_line",    debug_line_sz,   debug_line_img)
+         FIND(".debug_info",    debug_info_sz,   debug_info_img)
+         FIND(".debug_abbrev",  debug_abbv_sz,   debug_abbv_img)
+         FIND(".debug_str",     debug_str_sz,    debug_str_img)
+         FIND(".debug_ranges",  debug_ranges_sz, debug_ranges_img)
+         FIND(".debug_loc",     debug_loc_sz,    debug_loc_img)
 
-         FIND(".debug",         dwarf1d_sz,    dwarf1d_img)
-         FIND(".line",          dwarf1l_sz,    dwarf1l_img)
-         FIND(".eh_frame",      ehframe_sz,    ehframe_img)
+         FIND(".debug",         dwarf1d_sz,      dwarf1d_img)
+         FIND(".line",          dwarf1l_sz,      dwarf1l_img)
+         FIND(".eh_frame",      ehframe_sz,      ehframe_img)
 
-         FIND(".opd",           opd_sz_unused, opd_img)
+         FIND(".opd",           opd_sz_unused,   opd_img)
 
 #        undef FIND
       }
@@ -1832,6 +1836,9 @@
                FIND(need_dwarf2, ".debug_info",   debug_info_sz, 
debug_info_img)
                FIND(need_dwarf2, ".debug_abbrev", debug_abbv_sz, 
debug_abbv_img)
                FIND(need_dwarf2, ".debug_str",    debug_str_sz,  debug_str_img)
+               FIND(need_dwarf2, ".debug_ranges", debug_ranges_sz, 
+                                                               
debug_ranges_img)
+               FIND(need_dwarf2, ".debug_str",    debug_loc_sz,  debug_loc_img)
                FIND(need_dwarf1, ".debug",        dwarf1d_sz,    dwarf1d_img)
                FIND(need_dwarf1, ".line",         dwarf1l_sz,    dwarf1l_img)
 
@@ -1888,11 +1895,24 @@
          before using it. */
       if (debug_info_img && debug_abbv_img && debug_line_img
                                            /* && debug_str_img */) {
-         ML_(read_debuginfo_dwarf2) ( di,
-                                      debug_info_img,   debug_info_sz,
-                                      debug_abbv_img,
-                                      debug_line_img,   debug_line_sz,
-                                      debug_str_img );
+
+         /* The old reader: line numbers and unwind info only */
+         ML_(read_debuginfo_dwarf3) ( di,
+                                      debug_info_img, debug_info_sz,
+                                      debug_abbv_img, debug_abbv_sz,
+                                      debug_line_img, debug_line_sz,
+                                      debug_str_img,  debug_str_sz );
+
+         /* The new reader: read the DIEs in .debug_info to acquire
+            information on variable types and locations. */
+         ML_(new_dwarf3_reader) ( di,
+                                  debug_info_img,   debug_info_sz,
+                                  debug_abbv_img,   debug_abbv_sz,
+                                  debug_line_img,   debug_line_sz,
+                                  debug_str_img,    debug_str_sz,
+                                  debug_ranges_img, debug_ranges_sz,
+                                  debug_loc_img,    debug_loc_sz );
+
       }
       if (dwarf1d_img && dwarf1l_img) {
          ML_(read_debuginfo_dwarf1) ( di, dwarf1d_img, dwarf1d_sz, 
@@ -1904,11 +1924,6 @@
   out: {
    SysRes m_res;
 
-   TRACE_SYMTAB("\n");
-   TRACE_SYMTAB("------ name = %s\n", di->filename);
-   TRACE_SYMTAB("------ end ELF OBJECT ------------------------------\n");
-   TRACE_SYMTAB("\n");
-
    /* Last, but not least, heave the image(s) back overboard. */
    if (dimage) {
       m_res = VG_(am_munmap_valgrind) ( dimage, n_dimage );


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Valgrind-developers mailing list
Valgrind-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-developers

Reply via email to