diff options
Diffstat (limited to 'source/Plugins/SymbolFile/DWARF/DIERef.cpp')
-rw-r--r-- | source/Plugins/SymbolFile/DWARF/DIERef.cpp | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/source/Plugins/SymbolFile/DWARF/DIERef.cpp b/source/Plugins/SymbolFile/DWARF/DIERef.cpp new file mode 100644 index 0000000000000..c0754a1fdd542 --- /dev/null +++ b/source/Plugins/SymbolFile/DWARF/DIERef.cpp @@ -0,0 +1,56 @@ +//===-- DIERef.cpp ----------------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "DIERef.h" +#include "DWARFCompileUnit.h" +#include "DWARFFormValue.h" + +DIERef::DIERef() : + cu_offset(DW_INVALID_OFFSET), + die_offset(DW_INVALID_OFFSET) +{} + +DIERef::DIERef(dw_offset_t d) : + cu_offset(DW_INVALID_OFFSET), + die_offset(d) +{} + +DIERef::DIERef(dw_offset_t c, dw_offset_t d) : + cu_offset(c), + die_offset(d) +{} + +DIERef::DIERef(lldb::user_id_t uid) : + cu_offset(uid>>32), + die_offset(uid&0xffffffff) +{} + +DIERef::DIERef(const DWARFFormValue& form_value) : + cu_offset(DW_INVALID_OFFSET), + die_offset(DW_INVALID_OFFSET) +{ + if (form_value.IsValid()) + { + const DWARFCompileUnit* dwarf_cu = form_value.GetCompileUnit(); + if (dwarf_cu) + { + if (dwarf_cu->GetBaseObjOffset() != DW_INVALID_OFFSET) + cu_offset = dwarf_cu->GetBaseObjOffset(); + else + cu_offset = dwarf_cu->GetOffset(); + } + die_offset = form_value.Reference(); + } +} + +lldb::user_id_t +DIERef::GetUID() const +{ + return ((lldb::user_id_t)cu_offset) << 32 | die_offset; +} |