@@ -33,13 +33,14 @@ constexpr uint64_t AlignmentOffset = 0;
33
33
constexpr orc::ExecutorAddrDiff SymbolOffset = 0 ;
34
34
constexpr orc::ExecutorAddrDiff SymbolSize = 4 ;
35
35
36
- class AArch32Errors_ELF : public testing ::Test {
36
+ class AArch32Errors : public testing ::Test {
37
37
protected:
38
- ArmConfig ArmCfg = getArmConfigForCPUArch(ARMBuildAttrs::v7);
38
+ const ArmConfig Cfg = getArmConfigForCPUArch(ARMBuildAttrs::v7);
39
39
std::unique_ptr<LinkGraph> G;
40
40
Section *S = nullptr ;
41
41
42
42
const uint8_t Zeros[4 ]{0x00 , 0x00 , 0x00 , 0x00 };
43
+ uint8_t MutableZeros[4 ]{0x00 , 0x00 , 0x00 , 0x00 };
43
44
44
45
public:
45
46
static void SetUpTestCase () {}
@@ -62,15 +63,24 @@ class AArch32Errors_ELF : public testing::Test {
62
63
return G->createContentBlock (*S, CharContent, orc::ExecutorAddr (Addr),
63
64
Alignment, AlignmentOffset);
64
65
}
66
+
67
+ template <size_t Size>
68
+ Block &createMutableBlock (uint8_t (&Content)[Size], uint64_t Addr,
69
+ uint64_t Alignment = 4) {
70
+ MutableArrayRef<char > CharContent{reinterpret_cast <char *>(&Content),
71
+ sizeof (Content)};
72
+ return G->createMutableContentBlock (
73
+ *S, CharContent, orc::ExecutorAddr (Addr), Alignment, AlignmentOffset);
74
+ }
65
75
};
66
76
67
- TEST_F (AArch32Errors_ELF, readAddendDataErrors ) {
77
+ TEST_F (AArch32Errors, readAddendDataGeneric ) {
68
78
Block &ZerosBlock = createBlock (Zeros, 0x1000 );
69
79
constexpr uint64_t ZerosOffset = 0 ;
70
80
71
81
// Invalid edge kind is the only error we can raise here right now.
72
82
Edge::Kind Invalid = Edge::GenericEdgeKind::Invalid;
73
- EXPECT_THAT_EXPECTED (readAddend (*G, ZerosBlock, ZerosOffset, Invalid, ArmCfg ),
83
+ EXPECT_THAT_EXPECTED (readAddend (*G, ZerosBlock, ZerosOffset, Invalid, Cfg ),
74
84
FailedWithMessage (testing::HasSubstr (
75
85
" can not read implicit addend for aarch32 edge kind "
76
86
" INVALID RELOCATION" )));
@@ -121,6 +131,23 @@ TEST(AArch32_ELF, readAddendThumbErrors) {
121
131
}
122
132
}
123
133
134
+ TEST_F (AArch32Errors, applyFixupDataGeneric) {
135
+ Block &OriginBlock = createMutableBlock (MutableZeros, 0x1000 );
136
+ Block &TargetBlock = createBlock (Zeros, 0x2000 );
137
+
138
+ constexpr uint64_t OffsetInTarget = 0 ;
139
+ Symbol &TargetSymbol = G->addAnonymousSymbol (TargetBlock, OffsetInTarget,
140
+ PointerSize, false , false );
141
+
142
+ constexpr uint64_t OffsetInOrigin = 0 ;
143
+ Edge::Kind Invalid = Edge::GenericEdgeKind::Invalid;
144
+ Edge InvalidEdge (Invalid, OffsetInOrigin, TargetSymbol, 0 /* Addend*/ );
145
+ EXPECT_THAT_ERROR (
146
+ applyFixup (*G, OriginBlock, InvalidEdge, Cfg),
147
+ FailedWithMessage (testing::HasSubstr (
148
+ " encountered unfixable aarch32 edge kind INVALID RELOCATION" )));
149
+ }
150
+
124
151
TEST (AArch32_ELF, applyFixupArmErrors) {
125
152
126
153
constexpr orc::ExecutorAddr B3DummyAddr (0x5000 );
@@ -134,13 +161,6 @@ TEST(AArch32_ELF, applyFixupArmErrors) {
134
161
135
162
Symbol &TargetSymbol =
136
163
G->addAnonymousSymbol (BArm, SymbolOffset, SymbolSize, false , false );
137
- Edge InvalidEdge (Edge::GenericEdgeKind::Invalid, 0 /* Offset*/ , TargetSymbol,
138
- 0 /* Addend*/ );
139
-
140
- EXPECT_THAT_ERROR (
141
- applyFixup (*G, BArm, InvalidEdge, ArmCfg),
142
- FailedWithMessage (testing::HasSubstr (
143
- " encountered unfixable aarch32 edge kind INVALID RELOCATION" )));
144
164
145
165
for (Edge::Kind K = FirstArmRelocation; K < LastArmRelocation; K += 1 ) {
146
166
Edge E (K, 0 , TargetSymbol, 0 );
@@ -180,8 +200,6 @@ TEST(AArch32_ELF, applyFixupThumbErrors) {
180
200
Sec, MutableThumbContent, B4DummyAddr, ThumbAlignment, AlignmentOffset);
181
201
Symbol &TargetSymbol =
182
202
G->addAnonymousSymbol (BThumb, SymbolOffset, SymbolSize, false , false );
183
- Edge InvalidEdge (Edge::GenericEdgeKind::Invalid, 0 /* Offset*/ , TargetSymbol,
184
- 0 /* Addend*/ );
185
203
186
204
for (Edge::Kind K = FirstThumbRelocation; K < LastThumbRelocation; K += 1 ) {
187
205
Edge E (K, 0 , TargetSymbol, 0 );
0 commit comments