Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/llvm/lib/DebugInfo/CodeView/StringsAndChecksums.cpp
35271 views
1
//===- StringsAndChecksums.cpp --------------------------------------------===//
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
#include "llvm/DebugInfo/CodeView/StringsAndChecksums.h"
10
#include "llvm/DebugInfo/CodeView/CodeView.h"
11
#include "llvm/DebugInfo/CodeView/DebugChecksumsSubsection.h"
12
#include "llvm/DebugInfo/CodeView/DebugStringTableSubsection.h"
13
#include "llvm/DebugInfo/CodeView/DebugSubsectionRecord.h"
14
#include "llvm/Support/Error.h"
15
#include <cassert>
16
17
using namespace llvm;
18
using namespace llvm::codeview;
19
20
StringsAndChecksumsRef::StringsAndChecksumsRef() = default;
21
22
StringsAndChecksumsRef::StringsAndChecksumsRef(
23
const DebugStringTableSubsectionRef &Strings)
24
: Strings(&Strings) {}
25
26
StringsAndChecksumsRef::StringsAndChecksumsRef(
27
const DebugStringTableSubsectionRef &Strings,
28
const DebugChecksumsSubsectionRef &Checksums)
29
: Strings(&Strings), Checksums(&Checksums) {}
30
31
void StringsAndChecksumsRef::initializeStrings(
32
const DebugSubsectionRecord &SR) {
33
assert(SR.kind() == DebugSubsectionKind::StringTable);
34
assert(!Strings && "Found a string table even though we already have one!");
35
36
OwnedStrings = std::make_shared<DebugStringTableSubsectionRef>();
37
consumeError(OwnedStrings->initialize(SR.getRecordData()));
38
Strings = OwnedStrings.get();
39
}
40
41
void StringsAndChecksumsRef::reset() {
42
resetStrings();
43
resetChecksums();
44
}
45
46
void StringsAndChecksumsRef::resetStrings() {
47
OwnedStrings.reset();
48
Strings = nullptr;
49
}
50
51
void StringsAndChecksumsRef::resetChecksums() {
52
OwnedChecksums.reset();
53
Checksums = nullptr;
54
}
55
56
void StringsAndChecksumsRef::setStrings(
57
const DebugStringTableSubsectionRef &StringsRef) {
58
OwnedStrings = std::make_shared<DebugStringTableSubsectionRef>();
59
*OwnedStrings = StringsRef;
60
Strings = OwnedStrings.get();
61
}
62
63
void StringsAndChecksumsRef::setChecksums(
64
const DebugChecksumsSubsectionRef &CS) {
65
OwnedChecksums = std::make_shared<DebugChecksumsSubsectionRef>();
66
*OwnedChecksums = CS;
67
Checksums = OwnedChecksums.get();
68
}
69
70
void StringsAndChecksumsRef::initializeChecksums(
71
const DebugSubsectionRecord &FCR) {
72
assert(FCR.kind() == DebugSubsectionKind::FileChecksums);
73
if (Checksums)
74
return;
75
76
OwnedChecksums = std::make_shared<DebugChecksumsSubsectionRef>();
77
consumeError(OwnedChecksums->initialize(FCR.getRecordData()));
78
Checksums = OwnedChecksums.get();
79
}
80
81