Hi people,

I have been looking into the support for ARM binary images by lldb. One of the ARM tool chains I use produces .debug_line tables as specified by DWARF v3. With lldb and llvm-dwarfdump built from the top of the tree, I observed that the dwarfdump tool dumps the line table, but lldb does not. After some investigation I discovered that the dump tool is built against llvm/lib/DebugInfo/DWARFDebugLine.cpp, whereas lldb uses lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugLine.cpp.

It turned out that the source used by lldb has a subtle difference in flow-control with regards the treatment of the line table's prologue version number compared to that of the llvm source. After duplication of this flow-control, it is possible for lldb to print the line-table built according to DWARF standards above and beyond v2.

Could somebody submit the following patch to the lldb tree which fixes this issue?

Index: source/Plugins/SymbolFile/DWARF/DWARFDebugLine.cpp
===================================================================
--- source/Plugins/SymbolFile/DWARF/DWARFDebugLine.cpp  (revision 205611)
+++ source/Plugins/SymbolFile/DWARF/DWARFDebugLine.cpp  (working copy)
@@ -418,7 +418,7 @@
     const char * s;
prologue->total_length = debug_line_data.GetDWARFInitialLength(offset_ptr);
     prologue->version           = debug_line_data.GetU16(offset_ptr);
-    if (prologue->version != 2)
+    if (prologue->version < 2)
       return false;

prologue->prologue_length = debug_line_data.GetDWARFOffset(offset_ptr);
@@ -486,7 +486,7 @@
     (void)debug_line_data.GetDWARFInitialLength(&offset);
     const char * s;
     uint32_t version = debug_line_data.GetU16(&offset);
-    if (version != 2)
+    if (version < 2)
       return false;

const dw_offset_t end_prologue_offset = debug_line_data.GetDWARFOffset(&offset) + offset;


thank you
Matthew Gardiner


Member of the CSR plc group of companies. CSR plc registered in England and 
Wales, registered number 4187346, registered office Churchill House, Cambridge 
Business Park, Cowley Road, Cambridge, CB4 0WZ, United Kingdom
More information can be found at www.csr.com. Keep up to date with CSR on our 
technical blog, www.csr.com/blog, CSR people blog, www.csr.com/people, YouTube, 
www.youtube.com/user/CSRplc, Facebook, 
www.facebook.com/pages/CSR/191038434253534, or follow us on Twitter at 
www.twitter.com/CSR_plc.
New for 2014, you can now access the wide range of products powered by aptX at 
www.aptx.com.
Index: source/Plugins/SymbolFile/DWARF/DWARFDebugLine.cpp
===================================================================
--- source/Plugins/SymbolFile/DWARF/DWARFDebugLine.cpp	(revision 205611)
+++ source/Plugins/SymbolFile/DWARF/DWARFDebugLine.cpp	(working copy)
@@ -418,7 +418,7 @@
     const char * s;
     prologue->total_length      = debug_line_data.GetDWARFInitialLength(offset_ptr);
     prologue->version           = debug_line_data.GetU16(offset_ptr);
-    if (prologue->version != 2)
+    if (prologue->version < 2)
       return false;
 
     prologue->prologue_length   = debug_line_data.GetDWARFOffset(offset_ptr);
@@ -486,7 +486,7 @@
     (void)debug_line_data.GetDWARFInitialLength(&offset);
     const char * s;
     uint32_t version = debug_line_data.GetU16(&offset);
-    if (version != 2)
+    if (version < 2)
       return false;
 
     const dw_offset_t end_prologue_offset = debug_line_data.GetDWARFOffset(&offset) + offset;
_______________________________________________
lldb-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits

Reply via email to