LLDB  mainline
Classes | Macros | Functions
DWARFASTParserClang.cpp File Reference
#include <cstdlib>
#include "DWARFASTParserClang.h"
#include "DWARFDebugInfo.h"
#include "DWARFDeclContext.h"
#include "DWARFDefines.h"
#include "SymbolFileDWARF.h"
#include "SymbolFileDWARFDebugMap.h"
#include "SymbolFileDWARFDwo.h"
#include "UniqueDWARFASTType.h"
#include "Plugins/ExpressionParser/Clang/ClangASTImporter.h"
#include "Plugins/ExpressionParser/Clang/ClangASTMetadata.h"
#include "Plugins/ExpressionParser/Clang/ClangUtil.h"
#include "Plugins/Language/ObjC/ObjCLanguage.h"
#include "lldb/Core/Module.h"
#include "lldb/Core/Value.h"
#include "lldb/Host/Host.h"
#include "lldb/Symbol/CompileUnit.h"
#include "lldb/Symbol/Function.h"
#include "lldb/Symbol/ObjectFile.h"
#include "lldb/Symbol/SymbolFile.h"
#include "lldb/Symbol/TypeList.h"
#include "lldb/Symbol/TypeMap.h"
#include "lldb/Target/Language.h"
#include "lldb/Utility/LLDBAssert.h"
#include "lldb/Utility/Log.h"
#include "lldb/Utility/StreamString.h"
#include "llvm/Demangle/Demangle.h"
#include "clang/AST/CXXInheritance.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/DeclObjC.h"
#include "clang/AST/DeclTemplate.h"
#include <map>
#include <memory>
#include <vector>
Include dependency graph for DWARFASTParserClang.cpp:

Go to the source code of this file.

Classes

class  DWARFASTParserClang::DelayedAddObjCClassProperty
 

Macros

#define DEBUG_PRINTF(fmt, ...)
 

Functions

static AccessType DW_ACCESS_to_AccessType (uint32_t dwarf_accessibility)
 
static bool DeclKindIsCXXClass (clang::Decl::Kind decl_kind)
 
static bool IsClangModuleFwdDecl (const DWARFDIE &Die)
 Detect a forward declaration that is nested in a DW_TAG_module. More...
 
static DWARFDIE GetContainingClangModuleDIE (const DWARFDIE &die)
 
static lldb::ModuleSP GetContainingClangModule (const DWARFDIE &die)
 
static void ForcefullyCompleteType (CompilerType type)
 
static void RequireCompleteType (CompilerType type)
 Complete a type from debug info, or mark it as forcefully completed if there is no definition of the type in the current Module. More...
 
static void PrepareContextToReceiveMembers (TypeSystemClang &ast, ClangASTImporter &ast_importer, clang::DeclContext *decl_ctx, DWARFDIE die, const char *type_name_cstr)
 This function serves a similar purpose as RequireCompleteType above, but it avoids completing the type if it is not immediately necessary. More...
 
static std::string GetUnitName (const DWARFDIE &die)
 
static bool IsSubroutine (const DWARFDIE &die)
 
static DWARFDIE GetContainingFunctionWithAbstractOrigin (const DWARFDIE &die)
 
static DWARFDIE FindAnyChildWithAbstractOrigin (const DWARFDIE &context)
 
static DWARFDIE FindFirstChildWithAbstractOrigin (const DWARFDIE &block, const DWARFDIE &function)
 

Macro Definition Documentation

◆ DEBUG_PRINTF

#define DEBUG_PRINTF (   fmt,
  ... 
)

Definition at line 55 of file DWARFASTParserClang.cpp.

Function Documentation

◆ DeclKindIsCXXClass()

static bool DeclKindIsCXXClass ( clang::Decl::Kind  decl_kind)
static

◆ DW_ACCESS_to_AccessType()

static AccessType DW_ACCESS_to_AccessType ( uint32_t  dwarf_accessibility)
static

◆ FindAnyChildWithAbstractOrigin()

static DWARFDIE FindAnyChildWithAbstractOrigin ( const DWARFDIE context)
static

Definition at line 3315 of file DWARFASTParserClang.cpp.

References DWARFDIE::children().

Referenced by FindFirstChildWithAbstractOrigin().

◆ FindFirstChildWithAbstractOrigin()

static DWARFDIE FindFirstChildWithAbstractOrigin ( const DWARFDIE block,
const DWARFDIE function 
)
static

◆ ForcefullyCompleteType()

static void ForcefullyCompleteType ( CompilerType  type)
static

◆ GetContainingClangModule()

static lldb::ModuleSP GetContainingClangModule ( const DWARFDIE die)
static

◆ GetContainingClangModuleDIE()

static DWARFDIE GetContainingClangModuleDIE ( const DWARFDIE die)
static

◆ GetContainingFunctionWithAbstractOrigin()

static DWARFDIE GetContainingFunctionWithAbstractOrigin ( const DWARFDIE die)
static

◆ GetUnitName()

static std::string GetUnitName ( const DWARFDIE die)
static

Definition at line 431 of file DWARFASTParserClang.cpp.

References DWARFBaseDIE::GetCU().

Referenced by DWARFASTParserClang::ParseSingleMember().

◆ IsClangModuleFwdDecl()

static bool IsClangModuleFwdDecl ( const DWARFDIE Die)
static

Detect a forward declaration that is nested in a DW_TAG_module.

Definition at line 99 of file DWARFASTParserClang.cpp.

References DWARFBaseDIE::GetAttributeValueAsUnsigned(), and DWARFDIE::GetParent().

Referenced by DWARFASTParserClang::ParseSubroutine().

◆ IsSubroutine()

static bool IsSubroutine ( const DWARFDIE die)
static

◆ PrepareContextToReceiveMembers()

static void PrepareContextToReceiveMembers ( TypeSystemClang ast,
ClangASTImporter ast_importer,
clang::DeclContext *  decl_ctx,
DWARFDIE  die,
const char *  type_name_cstr 
)
static

This function serves a similar purpose as RequireCompleteType above, but it avoids completing the type if it is not immediately necessary.

It only ensures we can complete the type later.

Definition at line 267 of file DWARFASTParserClang.cpp.

References lldb_private::ClangASTImporter::CanImport(), ForcefullyCompleteType(), DWARFBaseDIE::GetDWARF(), lldb_private::ModuleChild::GetModule(), lldb_private::SymbolFile::GetObjectFile(), DWARFBaseDIE::GetOffset(), lldb_private::TypeSystemClang::GetTypeForDecl(), and lldb_private::ClangASTImporter::RequireCompleteType().

Referenced by DWARFASTParserClang::ParseStructureLikeDIE(), and DWARFASTParserClang::ParseTypeModifier().

◆ RequireCompleteType()

static void RequireCompleteType ( CompilerType  type)
static

Complete a type from debug info, or mark it as forcefully completed if there is no definition of the type in the current Module.

Call this function in contexts where the usual C++ rules require a type to be complete (base class, member, etc.).

Definition at line 246 of file DWARFASTParserClang.cpp.

References ForcefullyCompleteType(), and lldb_private::CompilerType::GetCompleteType().

Referenced by lldb_private::ClangASTImporter::CompleteAndFetchChildren(), lldb_private::ClangASTImporter::CompleteObjCInterfaceDecl(), DWARFASTParserClang::CompleteRecordType(), DWARFASTParserClang::ParseArrayType(), DWARFASTParserClang::ParseSingleMember(), and lldb_private::ClangASTImporter::RequireCompleteType().