| //===- 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 <inttypes.h> | |
| using namespace llvm; | |
| using namespace gsym; | |
| void GlobalData::encode(FileWriter &O) const { | |
| O.writeU32(static_cast<uint32_t>(Type)); | |
| O.writeU64(FileOffset); | |
| O.writeU64(FileSize); | |
| } | |
| llvm::Expected<GlobalData> 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<GlobalInfoType>(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"; | |
| } |