diff options
Diffstat (limited to 'source/Plugins/SymbolFile/DWARF/DIERef.cpp')
-rw-r--r-- | source/Plugins/SymbolFile/DWARF/DIERef.cpp | 69 |
1 files changed, 10 insertions, 59 deletions
diff --git a/source/Plugins/SymbolFile/DWARF/DIERef.cpp b/source/Plugins/SymbolFile/DWARF/DIERef.cpp index 0cd0f0c0272a2..f7f2a5bf006b3 100644 --- a/source/Plugins/SymbolFile/DWARF/DIERef.cpp +++ b/source/Plugins/SymbolFile/DWARF/DIERef.cpp @@ -1,67 +1,18 @@ //===-- DIERef.cpp ----------------------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// 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 "DIERef.h" -#include "DWARFUnit.h" -#include "DWARFDebugInfo.h" -#include "DWARFFormValue.h" -#include "SymbolFileDWARF.h" -#include "SymbolFileDWARFDebugMap.h" - -DIERef::DIERef(lldb::user_id_t uid, SymbolFileDWARF *dwarf) - : cu_offset(DW_INVALID_OFFSET), die_offset(uid & 0xffffffff) { - SymbolFileDWARFDebugMap *debug_map = dwarf->GetDebugMapSymfile(); - if (debug_map) { - const uint32_t oso_idx = debug_map->GetOSOIndexFromUserID(uid); - SymbolFileDWARF *actual_dwarf = debug_map->GetSymbolFileByOSOIndex(oso_idx); - if (actual_dwarf) { - DWARFDebugInfo *debug_info = actual_dwarf->DebugInfo(); - if (debug_info) { - DWARFUnit *dwarf_cu = - debug_info->GetCompileUnitContainingDIEOffset(die_offset); - if (dwarf_cu) { - cu_offset = dwarf_cu->GetOffset(); - return; - } - } - } - die_offset = DW_INVALID_OFFSET; - } else { - cu_offset = uid >> 32; - } -} - -DIERef::DIERef(const DWARFFormValue &form_value) - : cu_offset(DW_INVALID_OFFSET), die_offset(DW_INVALID_OFFSET) { - if (form_value.IsValid()) { - const DWARFUnit *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(); - } -} +#include "llvm/Support/Format.h" -lldb::user_id_t DIERef::GetUID(SymbolFileDWARF *dwarf) const { - //---------------------------------------------------------------------- - // Each SymbolFileDWARF will set its ID to what is expected. - // - // SymbolFileDWARF, when used for DWARF with .o files on MacOSX, has the - // ID set to the compile unit index. - // - // SymbolFileDWARFDwo sets the ID to the compile unit offset. - //---------------------------------------------------------------------- - if (dwarf && die_offset != DW_INVALID_OFFSET) - return dwarf->GetID() | die_offset; - else - return LLDB_INVALID_UID; +void llvm::format_provider<DIERef>::format(const DIERef &ref, raw_ostream &OS, + StringRef Style) { + if (ref.dwo_num()) + OS << format_hex_no_prefix(*ref.dwo_num(), 8) << "/"; + OS << (ref.section() == DIERef::DebugInfo ? "INFO" : "TYPE"); + OS << "/" << format_hex_no_prefix(ref.die_offset(), 8); } |