[Lldb-commits] [lldb] r114616 - in /lldb/trunk: include/lldb/Core/ClangForward.h include/lldb/Symbol/ClangASTContext.h lldb.xcodeproj/project.pbxproj source/Expression/ClangExpressionDeclMap.cpp source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h source/Symbol/ClangASTContext.cpp source/Symbol/UnwindTable.cpp

Greg Clayton gclayton at apple.com
Wed Sep 22 18:09:22 PDT 2010


Author: gclayton
Date: Wed Sep 22 20:09:21 2010
New Revision: 114616

URL: http://llvm.org/viewvc/llvm-project?rev=114616&view=rev
Log:
Added motheds to C++ classes as we parse them to keep clang happy.


Modified:
    lldb/trunk/include/lldb/Core/ClangForward.h
    lldb/trunk/include/lldb/Symbol/ClangASTContext.h
    lldb/trunk/lldb.xcodeproj/project.pbxproj
    lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp
    lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
    lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h
    lldb/trunk/source/Symbol/ClangASTContext.cpp
    lldb/trunk/source/Symbol/UnwindTable.cpp

Modified: lldb/trunk/include/lldb/Core/ClangForward.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/ClangForward.h?rev=114616&r1=114615&r2=114616&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Core/ClangForward.h (original)
+++ lldb/trunk/include/lldb/Core/ClangForward.h Wed Sep 22 20:09:21 2010
@@ -37,6 +37,7 @@
     class CXXBaseSpecifier;
     class CXXBoolLiteralExpr;
     class CXXFunctionalCastExpr;
+    class CXXMethodDecl;
     class CXXNamedCastExpr;
     class CXXRecordDecl;
     class CXXThisExpr;

Modified: lldb/trunk/include/lldb/Symbol/ClangASTContext.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/ClangASTContext.h?rev=114616&r1=114615&r2=114616&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Symbol/ClangASTContext.h (original)
+++ lldb/trunk/include/lldb/Symbol/ClangASTContext.h Wed Sep 22 20:09:21 2010
@@ -182,22 +182,28 @@
                                                      bitfield_bit_size);
     }
     
-    static bool
+    static clang::CXXMethodDecl *
     AddMethodToCXXRecordType (clang::ASTContext *ast_context,
-                              void *record_clang_type,
+                              void *record_opaque_type,
                               const char *name,
-                              void *method_type);
+                              void *method_opaque_type,
+                              lldb::AccessType access,
+                              bool is_virtual);
     
-    bool
-    AddMethodToCXXRecordType (void *record_clang_type,
+    clang::CXXMethodDecl *
+    AddMethodToCXXRecordType (void *record_opaque_type,
                               const char *name,
-                              void *method_type)
+                              void *method_opaque_type,
+                              lldb::AccessType access,
+                              bool is_virtual)
     
     {
         return ClangASTContext::AddMethodToCXXRecordType(getASTContext(),
-                                                         record_clang_type,
+                                                         record_opaque_type,
                                                          name,
-                                                         method_type);
+                                                         method_opaque_type,
+                                                         access,
+                                                         is_virtual);
     }
     
     bool

Modified: lldb/trunk/lldb.xcodeproj/project.pbxproj
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lldb.xcodeproj/project.pbxproj?rev=114616&r1=114615&r2=114616&view=diff
==============================================================================
--- lldb/trunk/lldb.xcodeproj/project.pbxproj (original)
+++ lldb/trunk/lldb.xcodeproj/project.pbxproj Wed Sep 22 20:09:21 2010
@@ -584,6 +584,9 @@
 		268F9D54123AA16600B91E9B /* SBSymbolContextList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SBSymbolContextList.cpp; path = source/API/SBSymbolContextList.cpp; sourceTree = "<group>"; };
 		269416AD119A024800FF2715 /* CommandObjectTarget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CommandObjectTarget.cpp; path = source/Commands/CommandObjectTarget.cpp; sourceTree = "<group>"; };
 		269416AE119A024800FF2715 /* CommandObjectTarget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CommandObjectTarget.h; path = source/Commands/CommandObjectTarget.h; sourceTree = "<group>"; };
+		269FF07D12494F7D00225026 /* FuncUnwinders.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FuncUnwinders.h; path = include/lldb/Symbol/FuncUnwinders.h; sourceTree = "<group>"; };
+		269FF07F12494F8E00225026 /* UnwindPlan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UnwindPlan.h; path = include/lldb/Symbol/UnwindPlan.h; sourceTree = "<group>"; };
+		269FF08112494FC200225026 /* UnwindTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UnwindTable.h; path = include/lldb/Symbol/UnwindTable.h; sourceTree = "<group>"; };
 		26A0604711A5BC7A00F75969 /* Baton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Baton.h; path = include/lldb/Core/Baton.h; sourceTree = "<group>"; };
 		26A0604811A5D03C00F75969 /* Baton.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Baton.cpp; path = source/Core/Baton.cpp; sourceTree = "<group>"; };
 		26A3B4AC1181454800381BC2 /* ObjectContainerBSDArchive.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ObjectContainerBSDArchive.cpp; sourceTree = "<group>"; };
@@ -1741,9 +1744,6 @@
 		26BC7C4B10F1B6C100F91463 /* Symbol */ = {
 			isa = PBXGroup;
 			children = (
-				961FABB81235DE1600F93A47 /* FuncUnwinders.cpp */,
-				961FABB91235DE1600F93A47 /* UnwindPlan.cpp */,
-				961FABBA1235DE1600F93A47 /* UnwindTable.cpp */,
 				26BC7C5510F1B6E900F91463 /* Block.h */,
 				26BC7F1310F1B8EC00F91463 /* Block.cpp */,
 				26BC7C5610F1B6E900F91463 /* ClangASTContext.h */,
@@ -1758,6 +1758,8 @@
 				26BC7F1710F1B8EC00F91463 /* DWARFCallFrameInfo.cpp */,
 				26BC7C5A10F1B6E900F91463 /* Function.h */,
 				26BC7F1810F1B8EC00F91463 /* Function.cpp */,
+				269FF07D12494F7D00225026 /* FuncUnwinders.h */,
+				961FABB81235DE1600F93A47 /* FuncUnwinders.cpp */,
 				26BC7C5B10F1B6E900F91463 /* LineEntry.h */,
 				26BC7F1910F1B8EC00F91463 /* LineEntry.cpp */,
 				26BC7C5C10F1B6E900F91463 /* LineTable.h */,
@@ -1781,6 +1783,10 @@
 				26BC7F2010F1B8EC00F91463 /* Type.cpp */,
 				26BC7C6610F1B6E900F91463 /* TypeList.h */,
 				26BC7F2110F1B8EC00F91463 /* TypeList.cpp */,
+				269FF07F12494F8E00225026 /* UnwindPlan.h */,
+				961FABB91235DE1600F93A47 /* UnwindPlan.cpp */,
+				269FF08112494FC200225026 /* UnwindTable.h */,
+				961FABBA1235DE1600F93A47 /* UnwindTable.cpp */,
 				26BC7C6710F1B6E900F91463 /* Variable.h */,
 				26BC7F2210F1B8EC00F91463 /* Variable.cpp */,
 				26BC7C6810F1B6E900F91463 /* VariableList.h */,

Modified: lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp?rev=114616&r1=114615&r2=114616&view=diff
==============================================================================
--- lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp (original)
+++ lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp Wed Sep 22 20:09:21 2010
@@ -1205,10 +1205,12 @@
                                                                  false,
                                                                  ClangASTContext::GetTypeQualifiers(copied_type));
         
-        ClangASTContext::AddMethodToCXXRecordType(parser_ast_context,
-                                                  copied_type,
-                                                  "___clang_expr",
-                                                  method_type);
+        ClangASTContext::AddMethodToCXXRecordType (parser_ast_context,
+                                                   copied_type,
+                                                   "___clang_expr",
+                                                   method_type,
+                                                   lldb::eAccessPublic,
+                                                   false);
     }
     
     context.AddTypeDecl(copied_type);

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=114616&r1=114615&r2=114616&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp (original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp Wed Sep 22 20:09:21 2010
@@ -1108,18 +1108,133 @@
 
         case DW_TAG_subprogram:
             {
+                DWARFDebugInfoEntry::Attributes attributes;
                 is_a_class = true;
                 if (default_accessibility == eAccessNone)
                     default_accessibility = eAccessPrivate;
-                // TODO: implement DW_TAG_subprogram type parsing
-//              UserDefTypeChildInfo method_info(die->GetOffset());
-//
-//              FunctionSP func_sp (sc.comp_unit->FindFunctionByUID (die->GetOffset()));
-//              if (func_sp.get() == NULL)
-//                  ParseCompileUnitFunction(sc, dwarf_cu, die);
-//
-//              method_info.SetEncodingTypeUID(die->GetOffset());
-//              struct_udt->AddMethod(method_info);
+                    
+                //printf("0x%8.8x: %s (ParesTypes)\n", die->GetOffset(), DW_TAG_value_to_name(tag));
+                // Set a bit that lets us know that we are currently parsing this
+                const_cast<DWARFDebugInfoEntry*>(die)->SetUserData(DIE_IS_BEING_PARSED);
+
+                const char *mangled = NULL;
+                dw_offset_t type_die_offset = DW_INVALID_OFFSET;
+                Declaration decl;
+                bool is_variadic = false;
+                bool is_inline = false;
+                bool is_virtual = false;
+                unsigned type_quals = 0;
+                AccessType accessibility = default_accessibility;
+
+                clang::FunctionDecl::StorageClass storage = clang::FunctionDecl::None;//, Extern, Static, PrivateExtern
+                const char *type_name_cstr = NULL;
+                ConstString type_name_dbstr;
+
+
+                const size_t num_attributes = die->GetAttributes(this, dwarf_cu, NULL, attributes);
+                if (num_attributes > 0)
+                {
+                    uint32_t i;
+                    for (i=0; i<num_attributes; ++i)
+                    {
+                        const dw_attr_t attr = attributes.AttributeAtIndex(i);
+                        DWARFFormValue form_value;
+                        if (attributes.ExtractFormValueAtIndex(this, i, form_value))
+                        {
+                            switch (attr)
+                            {
+                            case DW_AT_decl_file:   decl.SetFile(sc.comp_unit->GetSupportFiles().GetFileSpecAtIndex(form_value.Unsigned())); break;
+                            case DW_AT_decl_line:   decl.SetLine(form_value.Unsigned()); break;
+                            case DW_AT_decl_column: decl.SetColumn(form_value.Unsigned()); break;
+                            case DW_AT_name:
+                                type_name_cstr = form_value.AsCString(&get_debug_str_data());
+                                break;
+
+                            case DW_AT_MIPS_linkage_name:   mangled = form_value.AsCString(&get_debug_str_data()); break;
+                            case DW_AT_type:                type_die_offset = form_value.Reference(dwarf_cu); break;
+                            case DW_AT_accessibility:       accessibility = DW_ACCESS_to_AccessType(form_value.Unsigned()); break;
+                            //case DW_AT_declaration:         is_forward_declaration = form_value.Unsigned() != 0; break;
+                            case DW_AT_external:
+                                if (form_value.Unsigned())
+                                {
+                                    if (storage == clang::FunctionDecl::None)
+                                        storage = clang::FunctionDecl::Extern;
+                                    else
+                                        storage = clang::FunctionDecl::PrivateExtern;
+                                }
+                                break;
+                            case DW_AT_inline:
+                                is_inline = form_value.Unsigned() != 0;
+                                break;
+
+
+                            case DW_AT_virtuality:
+                                is_virtual = form_value.Unsigned() != 0; 
+                                break;
+
+                            case DW_AT_allocated:
+                            case DW_AT_associated:
+                            case DW_AT_address_class:
+                            case DW_AT_artificial:
+                            case DW_AT_calling_convention:
+                            case DW_AT_data_location:
+                            case DW_AT_elemental:
+                            case DW_AT_entry_pc:
+                            case DW_AT_explicit:
+                            case DW_AT_frame_base:
+                            case DW_AT_high_pc:
+                            case DW_AT_low_pc:
+                            case DW_AT_object_pointer:
+                            case DW_AT_prototyped:
+                            case DW_AT_pure:
+                            case DW_AT_ranges:
+                            case DW_AT_recursive:
+                            case DW_AT_return_addr:
+                            case DW_AT_segment:
+                            case DW_AT_specification:
+                            case DW_AT_start_scope:
+                            case DW_AT_static_link:
+                            case DW_AT_trampoline:
+                            case DW_AT_visibility:
+                            case DW_AT_vtable_elem_location:
+                            case DW_AT_abstract_origin:
+                            case DW_AT_description:
+                            case DW_AT_sibling:
+                                break;
+                            }
+                        }
+                    }
+
+                    void *return_clang_type = NULL;
+                    Type *func_type = ResolveTypeUID(type_die_offset);
+                    if (func_type)
+                        return_clang_type = func_type->GetOpaqueClangQualType();
+                    else
+                        return_clang_type = type_list->GetClangASTContext().GetBuiltInType_void();
+
+                    std::vector<void *> function_param_types;
+                    std::vector<clang::ParmVarDecl*> function_param_decls;
+
+                    // Parse the function children for the parameters
+                    bool skip_artificial = true;
+
+                    ParseChildParameters (sc, type_sp, dwarf_cu, die, skip_artificial, type_list, function_param_types, function_param_decls);
+
+                    void *method_function_proto = type_list->GetClangASTContext().CreateFunctionType (return_clang_type, &function_param_types[0], function_param_types.size(), is_variadic, type_quals);
+                    if (type_name_cstr)
+                    {
+                        clang::CXXMethodDecl *method_decl = type_list->GetClangASTContext().AddMethodToCXXRecordType (class_clang_type, 
+                                                                                                                      type_name_cstr,
+                                                                                                                      method_function_proto,
+                                                                                                                      accessibility,
+                                                                                                                      is_virtual);                                                                                                                           
+                        assert (method_decl);
+                        //m_die_to_decl_ctx[die] = method_decl;
+                    }
+
+                    const_cast<DWARFDebugInfoEntry*>(die)->SetUserData(type_sp.get());
+                    assert(type_sp.get());
+                }
             }
             break;
 
@@ -1913,6 +2028,7 @@
     TypeSP& type_sp,
     const DWARFCompileUnit* dwarf_cu,
     const DWARFDebugInfoEntry *parent_die,
+    bool skip_artificial,
     TypeList* type_list,
     std::vector<void *>& function_param_types,
     std::vector<clang::ParmVarDecl*>& function_param_decls
@@ -1939,6 +2055,7 @@
                     const char *name = NULL;
                     Declaration decl;
                     dw_offset_t param_type_die_offset = DW_INVALID_OFFSET;
+                    bool is_artificial = false;
                     // one of None, Auto, Register, Extern, Static, PrivateExtern
 
                     clang::VarDecl::StorageClass storage = clang::VarDecl::None;
@@ -1956,6 +2073,7 @@
                             case DW_AT_decl_column: decl.SetColumn(form_value.Unsigned()); break;
                             case DW_AT_name:        name = form_value.AsCString(&get_debug_str_data()); break;
                             case DW_AT_type:        param_type_die_offset = form_value.Reference(dwarf_cu); break;
+                            case DW_AT_artificial:  is_artificial = form_value.Unsigned() != 0; break;
                             case DW_AT_location:
     //                          if (form_value.BlockData())
     //                          {
@@ -1967,7 +2085,6 @@
     //                          {
     //                          }
     //                          break;
-                            case DW_AT_artificial:
                             case DW_AT_const_value:
                             case DW_AT_default_value:
                             case DW_AT_description:
@@ -1982,6 +2099,10 @@
                             }
                         }
                     }
+
+                    if (skip_artificial && is_artificial)
+                        continue;
+
                     Type *dc_type = ResolveTypeUID(param_type_die_offset);
                     if (dc_type)
                     {
@@ -2717,7 +2838,7 @@
                     const char *mangled = NULL;
                     dw_offset_t type_die_offset = DW_INVALID_OFFSET;
                     Declaration decl;
-                    bool isVariadic = false;
+                    bool is_variadic = false;
                     bool is_inline = false;
                     unsigned type_quals = 0;
                     clang::FunctionDecl::StorageClass storage = clang::FunctionDecl::None;//, Extern, Static, PrivateExtern
@@ -2805,9 +2926,10 @@
                         std::vector<clang::ParmVarDecl*> function_param_decls;
 
                         // Parse the function children for the parameters
-                        ParseChildParameters(sc, type_sp, dwarf_cu, die, type_list, function_param_types, function_param_decls);
+                        bool skip_artificial = false;
+                        ParseChildParameters(sc, type_sp, dwarf_cu, die, skip_artificial, type_list, function_param_types, function_param_decls);
 
-                        clang_type = type_list->GetClangASTContext().CreateFunctionType (return_clang_type, &function_param_types[0], function_param_types.size(), isVariadic, type_quals);
+                        clang_type = type_list->GetClangASTContext().CreateFunctionType (return_clang_type, &function_param_types[0], function_param_types.size(), is_variadic, type_quals);
                         if (type_name_cstr)
                         {
                             clang::FunctionDecl *function_decl = type_list->GetClangASTContext().CreateFunctionDeclaration (type_name_cstr, clang_type, storage, is_inline);

Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h?rev=114616&r1=114615&r2=114616&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h (original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h Wed Sep 22 20:09:21 2010
@@ -248,6 +248,7 @@
                                 lldb::TypeSP& type_sp,
                                 const DWARFCompileUnit* dwarf_cu,
                                 const DWARFDebugInfoEntry *parent_die,
+                                bool skip_artificial,
                                 lldb_private::TypeList* type_list,
                                 std::vector<void *>& function_args,
                                 std::vector<clang::ParmVarDecl*>& function_param_decls);

Modified: lldb/trunk/source/Symbol/ClangASTContext.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/ClangASTContext.cpp?rev=114616&r1=114615&r2=114616&view=diff
==============================================================================
--- lldb/trunk/source/Symbol/ClangASTContext.cpp (original)
+++ lldb/trunk/source/Symbol/ClangASTContext.cpp Wed Sep 22 20:09:21 2010
@@ -803,14 +803,16 @@
     return ast_context->getTagDeclType(decl).getAsOpaquePtr();
 }
 
-bool
+CXXMethodDecl *
 ClangASTContext::AddMethodToCXXRecordType
 (
- clang::ASTContext *ast_context,
- void *record_opaque_type,
- const char *name,
- void *method_opaque_type
- )
+    clang::ASTContext *ast_context,
+    void *record_opaque_type,
+    const char *name,
+    void *method_opaque_type,
+    lldb::AccessType access,
+    bool is_virtual
+)
 {
     if (!record_opaque_type || !method_opaque_type || !name)
         return false;
@@ -825,22 +827,22 @@
     clang::Type *record_type(record_qual_type.getTypePtr());
     
     if (!record_type)
-        return false;
+        return NULL;
     
     RecordType *record_recty(dyn_cast<RecordType>(record_type));
     
     if (!record_recty)
-        return false;
+        return NULL;
     
     RecordDecl *record_decl = record_recty->getDecl();
     
     if (!record_decl)
-        return false;
+        return NULL;
     
     CXXRecordDecl *cxx_record_decl = dyn_cast<CXXRecordDecl>(record_decl);
     
     if (!cxx_record_decl)
-        return false;
+        return NULL;
     
     QualType method_qual_type(QualType::getFromOpaquePtr(method_opaque_type));
     
@@ -851,17 +853,19 @@
                                                            method_qual_type, 
                                                            NULL);
     
+    cxx_method_decl->setAccess (ConvertAccessTypeToAccessSpecifier (access));
+    cxx_method_decl->setVirtualAsWritten (is_virtual);
+
     // Populate the method decl with parameter decls
-    
     clang::Type *method_type(method_qual_type.getTypePtr());
     
     if (!method_type)
-        return false;
+        return NULL;
     
     FunctionProtoType *method_funprototy(dyn_cast<FunctionProtoType>(method_type));
     
     if (!method_funprototy)
-        return false;
+        return NULL;
     
     unsigned int num_params = method_funprototy->getNumArgs();
     
@@ -886,7 +890,7 @@
     
     cxx_record_decl->addDecl(cxx_method_decl);
     
-    return true;
+    return cxx_method_decl;
 }
 
 bool

Modified: lldb/trunk/source/Symbol/UnwindTable.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/UnwindTable.cpp?rev=114616&r1=114615&r2=114616&view=diff
==============================================================================
--- lldb/trunk/source/Symbol/UnwindTable.cpp (original)
+++ lldb/trunk/source/Symbol/UnwindTable.cpp Wed Sep 22 20:09:21 2010
@@ -7,18 +7,19 @@
 //
 //===----------------------------------------------------------------------===//
 
-#include "lldb/Symbol/ObjectFile.h"
+#include "lldb/Symbol/UnwindTable.h"
 
+#include <stdio.h>
+
+#include "lldb/lldb-forward.h"
+
+#include "lldb/Core/Module.h"
+#include "lldb/Core/Section.h"
+#include "lldb/Symbol/ObjectFile.h"
 #include "lldb/Symbol/FuncUnwinders.h"
 #include "lldb/Symbol/SymbolContext.h"
-#include "lldb/Core/Section.h"
-#include "lldb/Core/Module.h"
-#include "lldb/lldb-forward.h"
-#include "lldb/Utility/UnwindAssemblyProfiler.h"
 #include "lldb/Symbol/DWARFCallFrameInfo.h"
-
-#include "lldb/Symbol/UnwindTable.h"
-#include <stdio.h>
+#include "lldb/Utility/UnwindAssemblyProfiler.h"
 
 // There is one UnwindTable object per ObjectFile.
 // It contains a list of Unwind objects -- one per function, populated lazily -- for the ObjectFile.





More information about the lldb-commits mailing list