[Lldb-commits] [lldb] r187423 - Updates the DW_AT_data_member_location handlers for the LLDB DWARF plugin

Thirumurthi, Ashok ashok.thirumurthi at intel.com
Tue Jul 30 12:02:23 PDT 2013


I wanted to follow-up this patch with a fix for DWARFDebugInfoEntry::DumpAttribute such as the attached patch.  However, I couldn't find a test or an LLDB command that exercises this code.  Any hints would be welcome :)

- Ashok

-----Original Message-----
From: lldb-commits-bounces at cs.uiuc.edu [mailto:lldb-commits-bounces at cs.uiuc.edu] On Behalf Of Ashok Thirumurthi
Sent: Tuesday, July 30, 2013 10:59 AM
To: lldb-commits at cs.uiuc.edu
Subject: [Lldb-commits] [lldb] r187423 - Updates the DW_AT_data_member_location handlers for the LLDB DWARF plugin

Author: athirumu
Date: Tue Jul 30 09:58:39 2013
New Revision: 187423

URL: http://llvm.org/viewvc/llvm-project?rev=187423&view=rev
Log:
Updates the DW_AT_data_member_location handlers for the LLDB DWARF plugin to handle the case of an integer constant (DWARF 3 and later).

- Fixes tests that assert in RecordLayoutBuilder::updateExternalFieldOffset
because LLDB was providing an external AST source with missing member offsets.

Modified:
    lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp

Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp?rev=187423&r1=187422&r2=187423&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp (original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp Tue 
+++ Jul 30 09:58:39 2013
@@ -1780,6 +1780,13 @@ SymbolFileDWARF::ParseChildMembers
                                         member_byte_offset = memberOffset.ResolveValue(NULL).UInt();
                                     }
                                 }
+                                else
+                                {
+                                    // With DWARF 3 and later, if the value is an integer constant,
+                                    // this form value is the offset in bytes from the beginning
+                                    // of the containing entity. 
+                                    member_byte_offset = form_value.Unsigned(); 
+                                }
                                 break;
 
                             case DW_AT_accessibility: accessibility = DW_ACCESS_to_AccessType (form_value.Unsigned()); break; @@ -2164,16 +2171,28 @@ SymbolFileDWARF::ParseChildMembers
                                         member_byte_offset = memberOffset.ResolveValue(NULL).UInt();
                                     }
                                 }
+                                else
+                                {
+                                    // With DWARF 3 and later, if the value is an integer constant,
+                                    // this form value is the offset in bytes from the beginning
+                                    // of the containing entity. 
+                                    member_byte_offset = form_value.Unsigned(); 
+                                }
                                 break;
 
                             case DW_AT_accessibility:
                                 accessibility = DW_ACCESS_to_AccessType(form_value.Unsigned());
                                 break;
 
-                            case DW_AT_virtuality: is_virtual = form_value.Boolean(); break;
-                            default:
+                            case DW_AT_virtuality:
+                                is_virtual = form_value.Boolean();
+                                break;
+                                                   
                             case DW_AT_sibling:
                                 break;
+
+                            default:
+                                break;
                             }
                         }
                     }
@@ -2620,7 +2639,7 @@ SymbolFileDWARF::ResolveClangOpaqueTypeD
         assert(false && "not a forward clang type decl!");
         break;
     }
-    return NULL;
+    return false;
 }
 
 Type*


_______________________________________________
lldb-commits mailing list
lldb-commits at cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
-------------- next part --------------
A non-text attachment was scrubbed...
Name: data-member-location.patch
Type: application/octet-stream
Size: 2703 bytes
Desc: data-member-location.patch
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20130730/ceaa4649/attachment.obj>


More information about the lldb-commits mailing list