summaryrefslogtreecommitdiff
path: root/source/Plugins/SymbolFile/DWARF/DIERef.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/Plugins/SymbolFile/DWARF/DIERef.cpp')
-rw-r--r--source/Plugins/SymbolFile/DWARF/DIERef.cpp56
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;
+}