//===- GlobalData.cpp -----------------------------------------------------===// // // 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/GSYM/GlobalData.h" #include "llvm/DebugInfo/GSYM/FileWriter.h" #include "llvm/DebugInfo/GSYM/GsymDataExtractor.h" #include using namespace llvm; using namespace gsym; void GlobalData::encode(FileWriter &O) const { O.writeU32(static_cast(Type)); O.writeU64(FileOffset); O.writeU64(FileSize); } llvm::Expected GlobalData::decode(GsymDataExtractor &GsymData, uint64_t &Offset) { if (!GsymData.isValidOffsetForDataOfSize(Offset, 20)) return createStringError(std::errc::invalid_argument, "not enough data for a GlobalData entry"); GlobalData GD; GD.Type = static_cast(GsymData.getU32(&Offset)); GD.FileOffset = GsymData.getU64(&Offset); GD.FileSize = GsymData.getU64(&Offset); return GD; } StringRef llvm::gsym::getNameForGlobalInfoType(GlobalInfoType Type) { switch (Type) { case GlobalInfoType::EndOfList: return "EndOfList"; case GlobalInfoType::AddrOffsets: return "AddrOffsets"; case GlobalInfoType::AddrInfoOffsets: return "AddrInfoOffsets"; case GlobalInfoType::StringTable: return "StringTable"; case GlobalInfoType::FileTable: return "FileTable"; case GlobalInfoType::FunctionInfo: return "FunctionInfo"; case GlobalInfoType::UUID: return "UUID"; } return "Unknown"; }