45 if (!
Data.isValidOffsetForDataOfSize(
Offset, 4))
47 "0x%8.8" PRIx64
": missing FunctionInfo Size",
Offset);
49 if (!
Data.isValidOffsetForDataOfSize(
Offset, 4))
51 "0x%8.8" PRIx64
": missing FunctionInfo Name",
Offset);
55 "0x%8.8" PRIx64
": invalid FunctionInfo Name value 0x%8.8x",
59 if (!
Data.isValidOffsetForDataOfSize(
Offset, 4))
61 "0x%8.8" PRIx64
": missing FunctionInfo InfoType value",
Offset);
63 if (!
Data.isValidOffsetForDataOfSize(
Offset, 4))
65 "0x%8.8" PRIx64
": missing FunctionInfo InfoType length",
Offset);
67 if (!
Data.isValidOffsetForDataOfSize(
Offset, InfoLength))
69 "0x%8.8" PRIx64
": missing FunctionInfo data for InfoType %u",
72 Data.isLittleEndian(),
73 Data.getAddressSize());
75 case InfoType::EndOfList:
79 case InfoType::LineTableInfo:
83 return LT.takeError();
86 case InfoType::InlineInfo:
90 return II.takeError();
93 case InfoType::MergedFunctionsInfo:
98 return MI.takeError();
101 case InfoType::CallSiteInfo:
106 return CI.takeError();
111 "0x%8.8" PRIx64
": unsupported InfoType %u",
116 return std::move(FI);
135 bool NoPadding)
const {
138 "attempted to encode invalid FunctionInfo object");
140 if (NoPadding ==
false)
152 return FuncInfoOffset;
161 Out.
writeU32(InfoType::LineTableInfo);
165 const auto StartOffset = Out.
tell();
168 return std::move(err);
172 "LineTable length is greater than UINT32_MAX");
183 const auto StartOffset = Out.
tell();
186 return std::move(err);
190 "InlineInfo length is greater than UINT32_MAX");
197 Out.
writeU32(InfoType::MergedFunctionsInfo);
201 const auto StartOffset = Out.
tell();
204 return std::move(err);
208 std::errc::invalid_argument,
209 "MergedFunctionsInfo length is greater than UINT32_MAX");
216 Out.
writeU32(InfoType::CallSiteInfo);
220 const auto StartOffset = Out.
tell();
223 return std::move(Err);
227 "CallSites length is greater than UINT32_MAX");
235 return FuncInfoOffset;
241 std::optional<DataExtractor> *MergedFuncsData) {
252 "FunctionInfo data is truncated");
258 "address 0x%" PRIx64
" is not in GSYM",
Addr);
262 "0x%8.8" PRIx64
": invalid FunctionInfo Name value 0x00000000",
267 std::optional<DataExtractor> InlineInfoData;
269 if (!
Data.isValidOffsetForDataOfSize(
Offset, 8))
271 "FunctionInfo data is truncated");
275 if (InfoLength != InfoBytes.
size())
277 "FunctionInfo data is truncated");
279 Data.getAddressSize());
281 case InfoType::EndOfList:
285 case InfoType::LineTableInfo:
289 return ExpectedLE.takeError();
292 case InfoType::MergedFunctionsInfo:
295 *MergedFuncsData = InfoData;
298 case InfoType::InlineInfo:
301 InlineInfoData = InfoData;
304 case InfoType::CallSiteInfo:
307 for (
const auto &CS : CSIC->CallSites) {
309 if (CS.ReturnOffset ==
Addr - FuncAddr) {
311 for (
uint32_t RegexOffset : CS.MatchRegex) {
318 return CSIC.takeError();
341 "failed to extract file[%" PRIu32
"]",
359 return std::move(Err);
static cl::opt< ITMode > IT(cl::desc("IT block support"), cl::Hidden, cl::init(DefaultIT), cl::values(clEnumValN(DefaultIT, "arm-default-it", "Generate any type of IT block"), clEnumValN(RestrictedIT, "arm-restrict-it", "Disallow complex IT blocks")))
InfoType
FunctionInfo information type that is used to encode the optional data that is associated with a Func...
uint64_t IntrinsicInst * II
bool contains(uint64_t Addr) const
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
Lightweight error class with error context and mandatory checking.
Tagged union holding either a T or a Error.
pointer data()
Return a pointer to the vector's buffer, even if empty().
StringRef - Represent a constant reference to a string, i.e.
constexpr size_t size() const
size - Get the string size.
A simplified binary data writer class that doesn't require targets, target definitions,...
uint64_t tell()
Return the current offset within the file.
void fixup32(uint32_t Value, uint64_t Offset)
Fixup a uint32_t value at the specified offset in the stream.
void alignTo(size_t Align)
Pad with zeroes at the current file position until the current file position matches the specified al...
void writeU32(uint32_t Value)
Write a single uint32_t value into the stream at the current file position.
void writeData(llvm::ArrayRef< uint8_t > Data)
Write an array of uint8_t values into the stream at the current file position.
llvm::endianness getByteOrder() const
GsymReader is used to read GSYM data from a file or buffer.
std::optional< FileEntry > getFile(uint32_t Index) const
Get the a file entry for the suppplied file index.
StringRef getString(uint32_t Offset) const
Get a string from the string table.
static llvm::Expected< LineTable > decode(DataExtractor &Data, uint64_t BaseAddr)
Decode an LineTable object from a binary data stream.
static Expected< LineEntry > lookup(DataExtractor &Data, uint64_t BaseAddr, uint64_t Addr)
Lookup a single address within a line table's data.
This class implements an extremely fast bulk output stream that can only output to a stream.
A raw_ostream that writes to an SmallVector or SmallString.
raw_ostream & operator<<(raw_ostream &OS, const CallSiteInfo &CSI)
This is an optimization pass for GlobalISel generic memory operations.
Error createStringError(std::error_code EC, char const *Fmt, const Ts &... Vals)
Create formatted StringError object.
void consumeError(Error Err)
Consume a Error without doing anything.
static llvm::Expected< CallSiteInfoCollection > decode(DataExtractor &Data)
Decode a CallSiteInfoCollection object from a binary data stream.
Function information in GSYM files encodes information for one contiguous address range.
std::optional< InlineInfo > Inline
std::optional< MergedFunctionsInfo > MergedFunctions
bool isValid() const
Query if a FunctionInfo object is valid.
std::optional< CallSiteInfoCollection > CallSites
static llvm::Expected< LookupResult > lookup(DataExtractor &Data, const GsymReader &GR, uint64_t FuncAddr, uint64_t Addr, std::optional< DataExtractor > *MergedFuncsData=nullptr)
Lookup an address within a FunctionInfo object's data stream.
uint64_t cacheEncoding()
Encode this function info into the internal byte cache and return the size in bytes.
uint32_t Name
String table offset in the string table.
llvm::Expected< uint64_t > encode(FileWriter &O, bool NoPadding=false) const
Encode this object into FileWriter stream.
SmallString< 32 > EncodingCache
If we encode a FunctionInfo during segmenting so we know its size, we can cache that encoding here so...
std::optional< LineTable > OptLineTable
Inline information stores the name of the inline function along with an array of address ranges.
static llvm::Error lookup(const GsymReader &GR, DataExtractor &Data, uint64_t BaseAddr, uint64_t Addr, SourceLocations &SrcLocs)
Lookup a single address within the inline info data.
static llvm::Expected< InlineInfo > decode(DataExtractor &Data, uint64_t BaseAddr)
Decode an InlineInfo object from a binary data stream.
Line entries are used to encode the line tables in FunctionInfo objects.
uint32_t File
1 based index of file in FileTable
uint32_t Line
Source line number.
uint64_t LookupAddr
The address that this lookup pertains to.
AddressRange FuncRange
The concrete function address range.
std::vector< StringRef > CallSiteFuncRegex
Function name regex patterns associated with a call site at the lookup address.
StringRef FuncName
The concrete function name that contains LookupAddr.
SourceLocations Locations
The source locations that match this address.
static llvm::Expected< MergedFunctionsInfo > decode(DataExtractor &Data, uint64_t BaseAddr)
Decode an MergedFunctionsInfo object from a binary data stream.
StringRef Base
Line entry source file basename.
uint32_t Line
Source file line number.
uint32_t Offset
Byte size offset within the named function.
StringRef Dir
Line entry source file directory path.
StringRef Name
Function or symbol name.