1 //===-- DIERef.cpp ----------------------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "DIERef.h" 11 #include "DWARFCompileUnit.h" 12 #include "DWARFFormValue.h" 13 14 DIERef::DIERef() : 15 cu_offset(DW_INVALID_OFFSET), 16 die_offset(DW_INVALID_OFFSET) 17 {} 18 19 DIERef::DIERef(dw_offset_t d) : 20 cu_offset(DW_INVALID_OFFSET), 21 die_offset(d) 22 {} 23 24 DIERef::DIERef(dw_offset_t c, dw_offset_t d) : 25 cu_offset(c), 26 die_offset(d) 27 {} 28 29 DIERef::DIERef(lldb::user_id_t uid) : 30 cu_offset(uid>>32), 31 die_offset(uid&0xffffffff) 32 {} 33 34 DIERef::DIERef(const DWARFFormValue& form_value) : 35 cu_offset(DW_INVALID_OFFSET), 36 die_offset(DW_INVALID_OFFSET) 37 { 38 if (form_value.IsValid()) 39 { 40 const DWARFCompileUnit* dwarf_cu = form_value.GetCompileUnit(); 41 if (dwarf_cu) 42 { 43 if (dwarf_cu->GetBaseObjOffset() != DW_INVALID_OFFSET) 44 cu_offset = dwarf_cu->GetBaseObjOffset(); 45 else 46 cu_offset = dwarf_cu->GetOffset(); 47 } 48 die_offset = form_value.Reference(); 49 } 50 } 51 52 lldb::user_id_t 53 DIERef::GetUID() const 54 { 55 return ((lldb::user_id_t)cu_offset) << 32 | die_offset; 56 } 57