About
Contact
QtCreator
KDevelop
Solarized
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
(
Err:
OwnedStrings
->
initialize
(
Contents:
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
(
Err:
OwnedChecksums
->
initialize
(
Stream:
FCR
.
getRecordData
()));
78
Checksums
=
OwnedChecksums
.
get
();
79
}
80