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