003 File Manager
Current Path:
/usr/src/contrib/llvm-project/llvm/lib/DebugInfo/CodeView
usr
/
src
/
contrib
/
llvm-project
/
llvm
/
lib
/
DebugInfo
/
CodeView
/
📁
..
📄
AppendingTypeTableBuilder.cpp
(3.51 KB)
📄
CVSymbolVisitor.cpp
(2.78 KB)
📄
CVTypeVisitor.cpp
(9.14 KB)
📄
CodeViewError.cpp
(1.89 KB)
📄
CodeViewRecordIO.cpp
(11.73 KB)
📄
ContinuationRecordBuilder.cpp
(9.18 KB)
📄
DebugChecksumsSubsection.cpp
(3.89 KB)
📄
DebugCrossExSubsection.cpp
(1.74 KB)
📄
DebugCrossImpSubsection.cpp
(3.29 KB)
📄
DebugFrameDataSubsection.cpp
(2.02 KB)
📄
DebugInlineeLinesSubsection.cpp
(3.85 KB)
📄
DebugLinesSubsection.cpp
(5.52 KB)
📄
DebugStringTableSubsection.cpp
(3.21 KB)
📄
DebugSubsection.cpp
(538 B)
📄
DebugSubsectionRecord.cpp
(3.4 KB)
📄
DebugSubsectionVisitor.cpp
(3.34 KB)
📄
DebugSymbolRVASubsection.cpp
(1.28 KB)
📄
DebugSymbolsSubsection.cpp
(1.02 KB)
📄
EnumTables.cpp
(21.1 KB)
📄
Formatters.cpp
(1.47 KB)
📄
GlobalTypeTableBuilder.cpp
(4.43 KB)
📄
LazyRandomTypeCollection.cpp
(8.94 KB)
📄
Line.cpp
(748 B)
📄
MergingTypeTableBuilder.cpp
(4.81 KB)
📄
RecordName.cpp
(10.4 KB)
📄
RecordSerialization.cpp
(4.86 KB)
📄
SimpleTypeSerializer.cpp
(2.4 KB)
📄
StringsAndChecksums.cpp
(2.58 KB)
📄
SymbolDumper.cpp
(25.61 KB)
📄
SymbolRecordHelpers.cpp
(2.82 KB)
📄
SymbolRecordMapping.cpp
(16.92 KB)
📄
SymbolSerializer.cpp
(1.83 KB)
📄
TypeDumpVisitor.cpp
(21.43 KB)
📄
TypeHashing.cpp
(3.03 KB)
📄
TypeIndex.cpp
(3.84 KB)
📄
TypeIndexDiscovery.cpp
(16.54 KB)
📄
TypeRecordHelpers.cpp
(1.59 KB)
📄
TypeRecordMapping.cpp
(24.67 KB)
📄
TypeStreamMerger.cpp
(18.42 KB)
📄
TypeTableCollection.cpp
(1.96 KB)
Editing: TypeIndex.cpp
//===-- TypeIndex.cpp - CodeView type index ---------------------*- C++ -*-===// // // 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 "llvm/DebugInfo/CodeView/TypeIndex.h" #include "llvm/DebugInfo/CodeView/TypeCollection.h" #include "llvm/Support/ScopedPrinter.h" using namespace llvm; using namespace llvm::codeview; namespace { struct SimpleTypeEntry { StringRef Name; SimpleTypeKind Kind; }; /// The names here all end in "*". If the simple type is a pointer type, we /// return the whole name. Otherwise we lop off the last character in our /// StringRef. static const SimpleTypeEntry SimpleTypeNames[] = { {"void*", SimpleTypeKind::Void}, {"<not translated>*", SimpleTypeKind::NotTranslated}, {"HRESULT*", SimpleTypeKind::HResult}, {"signed char*", SimpleTypeKind::SignedCharacter}, {"unsigned char*", SimpleTypeKind::UnsignedCharacter}, {"char*", SimpleTypeKind::NarrowCharacter}, {"wchar_t*", SimpleTypeKind::WideCharacter}, {"char16_t*", SimpleTypeKind::Character16}, {"char32_t*", SimpleTypeKind::Character32}, {"__int8*", SimpleTypeKind::SByte}, {"unsigned __int8*", SimpleTypeKind::Byte}, {"short*", SimpleTypeKind::Int16Short}, {"unsigned short*", SimpleTypeKind::UInt16Short}, {"__int16*", SimpleTypeKind::Int16}, {"unsigned __int16*", SimpleTypeKind::UInt16}, {"long*", SimpleTypeKind::Int32Long}, {"unsigned long*", SimpleTypeKind::UInt32Long}, {"int*", SimpleTypeKind::Int32}, {"unsigned*", SimpleTypeKind::UInt32}, {"__int64*", SimpleTypeKind::Int64Quad}, {"unsigned __int64*", SimpleTypeKind::UInt64Quad}, {"__int64*", SimpleTypeKind::Int64}, {"unsigned __int64*", SimpleTypeKind::UInt64}, {"__int128*", SimpleTypeKind::Int128}, {"unsigned __int128*", SimpleTypeKind::UInt128}, {"__half*", SimpleTypeKind::Float16}, {"float*", SimpleTypeKind::Float32}, {"float*", SimpleTypeKind::Float32PartialPrecision}, {"__float48*", SimpleTypeKind::Float48}, {"double*", SimpleTypeKind::Float64}, {"long double*", SimpleTypeKind::Float80}, {"__float128*", SimpleTypeKind::Float128}, {"_Complex float*", SimpleTypeKind::Complex32}, {"_Complex double*", SimpleTypeKind::Complex64}, {"_Complex long double*", SimpleTypeKind::Complex80}, {"_Complex __float128*", SimpleTypeKind::Complex128}, {"bool*", SimpleTypeKind::Boolean8}, {"__bool16*", SimpleTypeKind::Boolean16}, {"__bool32*", SimpleTypeKind::Boolean32}, {"__bool64*", SimpleTypeKind::Boolean64}, }; } // namespace StringRef TypeIndex::simpleTypeName(TypeIndex TI) { assert(TI.isNoneType() || TI.isSimple()); if (TI.isNoneType()) return "<no type>"; if (TI == TypeIndex::NullptrT()) return "std::nullptr_t"; // This is a simple type. for (const auto &SimpleTypeName : SimpleTypeNames) { if (SimpleTypeName.Kind == TI.getSimpleKind()) { if (TI.getSimpleMode() == SimpleTypeMode::Direct) return SimpleTypeName.Name.drop_back(1); // Otherwise, this is a pointer type. We gloss over the distinction // between near, far, 64, 32, etc, and just give a pointer type. return SimpleTypeName.Name; } } return "<unknown simple type>"; } void llvm::codeview::printTypeIndex(ScopedPrinter &Printer, StringRef FieldName, TypeIndex TI, TypeCollection &Types) { StringRef TypeName; if (!TI.isNoneType()) { if (TI.isSimple()) TypeName = TypeIndex::simpleTypeName(TI); else TypeName = Types.getTypeName(TI); } if (!TypeName.empty()) Printer.printHex(FieldName, TypeName, TI.getIndex()); else Printer.printHex(FieldName, TI.getIndex()); }
Upload File
Create Folder