LLVM 19.0.0git
CodeViewYAMLTypeHashing.cpp
Go to the documentation of this file.
1//===- CodeViewYAMLTypeHashing.cpp - CodeView YAMLIO type hashing ---------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file defines classes for handling the YAML representation of CodeView
10// Debug Info.
11//
12//===----------------------------------------------------------------------===//
13
15
20
21using namespace llvm;
22using namespace llvm::codeview;
23using namespace llvm::CodeViewYAML;
24using namespace llvm::yaml;
25
26namespace llvm {
27namespace yaml {
28
30 io.mapRequired("Version", DebugH.Version);
31 io.mapRequired("HashAlgorithm", DebugH.HashAlgorithm);
32 io.mapOptional("HashValues", DebugH.Hashes);
33}
34
35void ScalarTraits<GlobalHash>::output(const GlobalHash &GH, void *Ctx,
36 raw_ostream &OS) {
37 ScalarTraits<BinaryRef>::output(GH.Hash, Ctx, OS);
38}
39
40StringRef ScalarTraits<GlobalHash>::input(StringRef Scalar, void *Ctx,
41 GlobalHash &GH) {
42 return ScalarTraits<BinaryRef>::input(Scalar, Ctx, GH.Hash);
43}
44
45} // end namespace yaml
46} // end namespace llvm
47
49 assert(DebugH.size() >= 8);
50 assert((DebugH.size() - 8) % 8 == 0);
51
53 DebugHSection DHS;
54 cantFail(Reader.readInteger(DHS.Magic));
55 cantFail(Reader.readInteger(DHS.Version));
57
58 while (Reader.bytesRemaining() != 0) {
60 cantFail(Reader.readBytes(S, 8));
61 DHS.Hashes.emplace_back(S);
62 }
63 assert(Reader.bytesRemaining() == 0);
64 return DHS;
65}
66
68 BumpPtrAllocator &Alloc) {
69 uint32_t Size = 8 + 8 * DebugH.Hashes.size();
70 uint8_t *Data = Alloc.Allocate<uint8_t>(Size);
71 MutableArrayRef<uint8_t> Buffer(Data, Size);
73
74 cantFail(Writer.writeInteger(DebugH.Magic));
75 cantFail(Writer.writeInteger(DebugH.Version));
76 cantFail(Writer.writeInteger(DebugH.HashAlgorithm));
77 SmallString<8> Hash;
78 for (const auto &H : DebugH.Hashes) {
79 Hash.clear();
81 H.Hash.writeAsBinary(OS);
82 assert((Hash.size() == 8) && "Invalid hash size!");
83 cantFail(Writer.writeFixedString(Hash));
84 }
85 assert(Writer.bytesRemaining() == 0);
86 return Buffer;
87}
uint64_t Size
#define H(x, y, z)
Definition: MD5.cpp:57
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
raw_pwrite_stream & OS
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
Definition: ArrayRef.h:41
size_t size() const
size - Get the array size.
Definition: ArrayRef.h:165
Provides read only access to a subclass of BinaryStream.
Error readBytes(ArrayRef< uint8_t > &Buffer, uint32_t Size)
Read Size bytes from the underlying stream at the current offset and and set Buffer to the resulting ...
Error readInteger(T &Dest)
Read an integer of the specified endianness into Dest and update the stream's offset.
uint64_t bytesRemaining() const
Provides write only access to a subclass of WritableBinaryStream.
Error writeInteger(T Value)
Write the integer Value to the underlying stream in the specified endianness.
uint64_t bytesRemaining() const
Error writeFixedString(StringRef Str)
Write the string Str to the underlying stream without a null terminator.
Allocate memory in an ever growing pool, as if by bump-pointer.
Definition: Allocator.h:66
LLVM_ATTRIBUTE_RETURNS_NONNULL void * Allocate(size_t Size, Align Alignment)
Allocate space at the specified alignment.
Definition: Allocator.h:148
MutableArrayRef - Represent a mutable reference to an array (0 or more elements consecutively in memo...
Definition: ArrayRef.h:307
SmallString - A SmallString is just a SmallVector with methods and accessors that make it work better...
Definition: SmallString.h:26
size_t size() const
Definition: SmallVector.h:91
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:50
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition: raw_ostream.h:52
A raw_ostream that writes to an SmallVector or SmallString.
Definition: raw_ostream.h:690
ArrayRef< uint8_t > toDebugH(const DebugHSection &DebugH, BumpPtrAllocator &Alloc)
DebugHSection fromDebugH(ArrayRef< uint8_t > DebugH)
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
void cantFail(Error Err, const char *Msg=nullptr)
Report a fatal error if Err is a failure value.
Definition: Error.h:749