128 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			128 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C++
		
	
	
	
//===-- DWARFBaseDIE.cpp --------------------------------------------------===//
 | 
						|
//
 | 
						|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 | 
						|
// See https://llvm.org/LICENSE.txt for license information.
 | 
						|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
 | 
						|
#include "DWARFBaseDIE.h"
 | 
						|
 | 
						|
#include "DWARFUnit.h"
 | 
						|
#include "DWARFDebugInfoEntry.h"
 | 
						|
#include "SymbolFileDWARF.h"
 | 
						|
 | 
						|
#include "lldb/Core/Module.h"
 | 
						|
#include "lldb/Symbol/ObjectFile.h"
 | 
						|
#include "lldb/Utility/Log.h"
 | 
						|
 | 
						|
using namespace lldb_private;
 | 
						|
 | 
						|
llvm::Optional<DIERef> DWARFBaseDIE::GetDIERef() const {
 | 
						|
  if (!IsValid())
 | 
						|
    return llvm::None;
 | 
						|
 | 
						|
  return DIERef(m_cu->GetSymbolFileDWARF().GetDwoNum(), m_cu->GetDebugSection(),
 | 
						|
                m_die->GetOffset());
 | 
						|
}
 | 
						|
 | 
						|
dw_tag_t DWARFBaseDIE::Tag() const {
 | 
						|
  if (m_die)
 | 
						|
    return m_die->Tag();
 | 
						|
  else
 | 
						|
    return llvm::dwarf::DW_TAG_null;
 | 
						|
}
 | 
						|
 | 
						|
const char *DWARFBaseDIE::GetTagAsCString() const {
 | 
						|
  return lldb_private::DW_TAG_value_to_name(Tag());
 | 
						|
}
 | 
						|
 | 
						|
const char *DWARFBaseDIE::GetAttributeValueAsString(const dw_attr_t attr,
 | 
						|
                                                const char *fail_value) const {
 | 
						|
  if (IsValid())
 | 
						|
    return m_die->GetAttributeValueAsString(GetCU(), attr, fail_value);
 | 
						|
  else
 | 
						|
    return fail_value;
 | 
						|
}
 | 
						|
 | 
						|
uint64_t DWARFBaseDIE::GetAttributeValueAsUnsigned(const dw_attr_t attr,
 | 
						|
                                               uint64_t fail_value) const {
 | 
						|
  if (IsValid())
 | 
						|
    return m_die->GetAttributeValueAsUnsigned(GetCU(), attr, fail_value);
 | 
						|
  else
 | 
						|
    return fail_value;
 | 
						|
}
 | 
						|
 | 
						|
uint64_t DWARFBaseDIE::GetAttributeValueAsAddress(const dw_attr_t attr,
 | 
						|
                                              uint64_t fail_value) const {
 | 
						|
  if (IsValid())
 | 
						|
    return m_die->GetAttributeValueAsAddress(GetCU(), attr, fail_value);
 | 
						|
  else
 | 
						|
    return fail_value;
 | 
						|
}
 | 
						|
 | 
						|
lldb::user_id_t DWARFBaseDIE::GetID() const {
 | 
						|
  if (IsValid())
 | 
						|
    return GetDWARF()->GetUID(*this);
 | 
						|
  return LLDB_INVALID_UID;
 | 
						|
}
 | 
						|
 | 
						|
const char *DWARFBaseDIE::GetName() const {
 | 
						|
  if (IsValid())
 | 
						|
    return m_die->GetName(m_cu);
 | 
						|
  else
 | 
						|
    return nullptr;
 | 
						|
}
 | 
						|
 | 
						|
lldb::ModuleSP DWARFBaseDIE::GetModule() const {
 | 
						|
  SymbolFileDWARF *dwarf = GetDWARF();
 | 
						|
  if (dwarf)
 | 
						|
    return dwarf->GetObjectFile()->GetModule();
 | 
						|
  else
 | 
						|
    return lldb::ModuleSP();
 | 
						|
}
 | 
						|
 | 
						|
dw_offset_t DWARFBaseDIE::GetOffset() const {
 | 
						|
  if (IsValid())
 | 
						|
    return m_die->GetOffset();
 | 
						|
  else
 | 
						|
    return DW_INVALID_OFFSET;
 | 
						|
}
 | 
						|
 | 
						|
SymbolFileDWARF *DWARFBaseDIE::GetDWARF() const {
 | 
						|
  if (m_cu)
 | 
						|
    return &m_cu->GetSymbolFileDWARF();
 | 
						|
  else
 | 
						|
    return nullptr;
 | 
						|
}
 | 
						|
 | 
						|
bool DWARFBaseDIE::HasChildren() const {
 | 
						|
  return m_die && m_die->HasChildren();
 | 
						|
}
 | 
						|
 | 
						|
bool DWARFBaseDIE::Supports_DW_AT_APPLE_objc_complete_type() const {
 | 
						|
  return IsValid() && GetDWARF()->Supports_DW_AT_APPLE_objc_complete_type(m_cu);
 | 
						|
}
 | 
						|
 | 
						|
size_t DWARFBaseDIE::GetAttributes(DWARFAttributes &attributes,
 | 
						|
                                   Recurse recurse) const {
 | 
						|
  if (IsValid())
 | 
						|
    return m_die->GetAttributes(m_cu, attributes, recurse);
 | 
						|
  attributes.Clear();
 | 
						|
  return 0;
 | 
						|
}
 | 
						|
 | 
						|
bool operator==(const DWARFBaseDIE &lhs, const DWARFBaseDIE &rhs) {
 | 
						|
  return lhs.GetDIE() == rhs.GetDIE() && lhs.GetCU() == rhs.GetCU();
 | 
						|
}
 | 
						|
 | 
						|
bool operator!=(const DWARFBaseDIE &lhs, const DWARFBaseDIE &rhs) {
 | 
						|
  return !(lhs == rhs);
 | 
						|
}
 | 
						|
 | 
						|
const DWARFDataExtractor &DWARFBaseDIE::GetData() const {
 | 
						|
  // Clients must check if this DIE is valid before calling this function.
 | 
						|
  assert(IsValid());
 | 
						|
  return m_cu->GetData();
 | 
						|
}
 |