LLVM 20.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
18
19using namespace llvm;
20using namespace llvm::codeview;
21using namespace llvm::CodeViewYAML;
22using namespace llvm::yaml;
23
24namespace llvm {
25namespace yaml {
26
28 io.mapRequired("Version", DebugH.Version);
29 io.mapRequired("HashAlgorithm", DebugH.HashAlgorithm);
30 io.mapOptional("HashValues", DebugH.Hashes);
31}
32
33void ScalarTraits<GlobalHash>::output(const GlobalHash &GH, void *Ctx,
34 raw_ostream &OS) {
35 ScalarTraits<BinaryRef>::output(GH.Hash, Ctx, OS);
36}
37
38StringRef ScalarTraits<GlobalHash>::input(StringRef Scalar, void *Ctx,
39 GlobalHash &GH) {
40 return ScalarTraits<BinaryRef>::input(Scalar, Ctx, GH.Hash);
41}
42
43} // end namespace yaml
44} // end namespace llvm
45
47 assert(DebugH.size() >= 8);
48 assert((DebugH.size() - 8) % 8 == 0);
49
51 DebugHSection DHS;
52 cantFail(Reader.readInteger(DHS.Magic));
53 cantFail(Reader.readInteger(DHS.Version));
55
56 while (Reader.bytesRemaining() != 0) {
58 cantFail(Reader.readBytes(S, 8));
59 DHS.Hashes.emplace_back(S);
60 }
61 assert(Reader.bytesRemaining() == 0);
62 return DHS;
63}
64
66 BumpPtrAllocator &Alloc) {
67 uint32_t Size = 8 + 8 * DebugH.Hashes.size();
68 uint8_t *Data = Alloc.Allocate<uint8_t>(Size);
69 MutableArrayRef<uint8_t> Buffer(Data, Size);
71
72 cantFail(Writer.writeInteger(DebugH.Magic));
73 cantFail(Writer.writeInteger(DebugH.Version));
74 cantFail(Writer.writeInteger(DebugH.HashAlgorithm));
75 SmallString<8> Hash;
76 for (const auto &H : DebugH.Hashes) {
77 Hash.clear();
79 H.Hash.writeAsBinary(OS);
80 assert((Hash.size() == 8) && "Invalid hash size!");
81 cantFail(Writer.writeFixedString(Hash));
82 }
83 assert(Writer.bytesRemaining() == 0);
84 return Buffer;
85}
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:168
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:310
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:78
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:51
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:691
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:756