@@ -142,7 +142,7 @@ bool MCAssembler::isThumbFunc(const MCSymbol *Symbol) const {
142
142
return true ;
143
143
}
144
144
145
- bool MCAssembler::evaluateFixup (const MCFragment &F, const MCFixup &Fixup,
145
+ bool MCAssembler::evaluateFixup (const MCFragment &F, MCFixup &Fixup,
146
146
MCValue &Target, uint64_t &Value,
147
147
bool RecordReloc,
148
148
MutableArrayRef<char > Contents) const {
@@ -163,6 +163,7 @@ bool MCAssembler::evaluateFixup(const MCFragment &F, const MCFixup &Fixup,
163
163
164
164
bool IsResolved = false ;
165
165
unsigned FixupFlags = getBackend ().getFixupKindInfo (Fixup.getKind ()).Flags ;
166
+ bool IsPCRel = FixupFlags & MCFixupKindInfo::FKF_IsPCRel;
166
167
if (FixupFlags & MCFixupKindInfo::FKF_IsTarget) {
167
168
IsResolved = getBackend ().evaluateTargetFixup (Fixup, Target, Value);
168
169
} else {
@@ -174,7 +175,6 @@ bool MCAssembler::evaluateFixup(const MCFragment &F, const MCFixup &Fixup,
174
175
if (Sub && Sub->isDefined ())
175
176
Value -= getSymbolOffset (*Sub);
176
177
177
- bool IsPCRel = FixupFlags & MCFixupKindInfo::FKF_IsPCRel;
178
178
bool ShouldAlignPC =
179
179
FixupFlags & MCFixupKindInfo::FKF_IsAlignedDownTo32Bits;
180
180
if (IsPCRel) {
@@ -202,6 +202,8 @@ bool MCAssembler::evaluateFixup(const MCFragment &F, const MCFixup &Fixup,
202
202
203
203
if (IsResolved && mc::isRelocRelocation (Fixup.getKind ()))
204
204
IsResolved = false ;
205
+ if (IsPCRel)
206
+ Fixup.setPCRel ();
205
207
getBackend ().applyFixup (F, Fixup, Target, Contents, Value, IsResolved);
206
208
return true ;
207
209
}
@@ -875,7 +877,7 @@ void MCAssembler::layout() {
875
877
// Process fragments with fixups here.
876
878
if (auto *F = dyn_cast<MCEncodedFragment>(&Frag)) {
877
879
auto Contents = F->getContents ();
878
- for (const MCFixup &Fixup : F->getFixups ()) {
880
+ for (MCFixup &Fixup : F->getFixups ()) {
879
881
uint64_t FixedValue;
880
882
MCValue Target;
881
883
evaluateFixup (Frag, Fixup, Target, FixedValue,
0 commit comments