Skip to content

Commit 262ad4c

Browse files
committed
[MC] Remove the MCAsmLayout parameter from MCMachObjectTargetWriter
1 parent 8598bcb commit 262ad4c

File tree

5 files changed

+83
-108
lines changed

5 files changed

+83
-108
lines changed

llvm/include/llvm/MC/MCMachObjectWriter.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,6 @@ class MCMachObjectTargetWriter : public MCObjectTargetWriter {
7373
/// @{
7474

7575
virtual void recordRelocation(MachObjectWriter *Writer, MCAssembler &Asm,
76-
const MCAsmLayout &Layout,
7776
const MCFragment *Fragment,
7877
const MCFixup &Fixup, MCValue Target,
7978
uint64_t &FixedValue) = 0;

llvm/lib/MC/MachObjectWriter.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -502,8 +502,8 @@ void MachObjectWriter::recordRelocation(MCAssembler &Asm,
502502
return;
503503
}
504504

505-
TargetObjectWriter->recordRelocation(this, Asm, Layout, Fragment, Fixup,
506-
Target, FixedValue);
505+
TargetObjectWriter->recordRelocation(this, Asm, Fragment, Fixup, Target,
506+
FixedValue);
507507
}
508508

509509
void MachObjectWriter::bindIndirectSymbols(MCAssembler &Asm) {

llvm/lib/Target/AArch64/MCTargetDesc/AArch64MachObjectWriter.cpp

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,8 @@ class AArch64MachObjectWriter : public MCMachObjectTargetWriter {
4242
: MCMachObjectTargetWriter(!IsILP32 /* is64Bit */, CPUType, CPUSubtype) {}
4343

4444
void recordRelocation(MachObjectWriter *Writer, MCAssembler &Asm,
45-
const MCAsmLayout &Layout, const MCFragment *Fragment,
46-
const MCFixup &Fixup, MCValue Target,
47-
uint64_t &FixedValue) override;
45+
const MCFragment *Fragment, const MCFixup &Fixup,
46+
MCValue Target, uint64_t &FixedValue) override;
4847
};
4948

5049
} // end anonymous namespace
@@ -148,13 +147,12 @@ static bool canUseLocalRelocation(const MCSectionMachO &Section,
148147
}
149148

150149
void AArch64MachObjectWriter::recordRelocation(
151-
MachObjectWriter *Writer, MCAssembler &Asm, const MCAsmLayout &Layout,
152-
const MCFragment *Fragment, const MCFixup &Fixup, MCValue Target,
153-
uint64_t &FixedValue) {
150+
MachObjectWriter *Writer, MCAssembler &Asm, const MCFragment *Fragment,
151+
const MCFixup &Fixup, MCValue Target, uint64_t &FixedValue) {
154152
unsigned IsPCRel = Writer->isFixupKindPCRel(Asm, Fixup.getKind());
155153

156154
// See <reloc.h>.
157-
uint32_t FixupOffset = Layout.getFragmentOffset(Fragment);
155+
uint32_t FixupOffset = Asm.getFragmentOffset(*Fragment);
158156
unsigned Log2Size = 0;
159157
int64_t Value = 0;
160158
unsigned Index = 0;
@@ -227,8 +225,8 @@ void AArch64MachObjectWriter::recordRelocation(
227225
// ... _foo@got - Ltmp0
228226
if (Target.getSymA()->getKind() == MCSymbolRefExpr::VK_GOT &&
229227
Target.getSymB()->getKind() == MCSymbolRefExpr::VK_None &&
230-
Layout.getSymbolOffset(*B) ==
231-
Layout.getFragmentOffset(Fragment) + Fixup.getOffset()) {
228+
Asm.getSymbolOffset(*B) ==
229+
Asm.getFragmentOffset(*Fragment) + Fixup.getOffset()) {
232230
// SymB is the PC, so use a PC-rel pointer-to-GOT relocation.
233231
Type = MachO::ARM64_RELOC_POINTER_TO_GOT;
234232
IsPCRel = 1;
@@ -280,12 +278,18 @@ void AArch64MachObjectWriter::recordRelocation(
280278
return;
281279
}
282280

283-
Value += (!A->getFragment() ? 0 : Writer->getSymbolAddress(*A, Layout)) -
284-
(!A_Base || !A_Base->getFragment() ? 0 : Writer->getSymbolAddress(
285-
*A_Base, Layout));
286-
Value -= (!B->getFragment() ? 0 : Writer->getSymbolAddress(*B, Layout)) -
287-
(!B_Base || !B_Base->getFragment() ? 0 : Writer->getSymbolAddress(
288-
*B_Base, Layout));
281+
Value +=
282+
(!A->getFragment() ? 0
283+
: Writer->getSymbolAddress(*A, *Asm.getLayout())) -
284+
(!A_Base || !A_Base->getFragment()
285+
? 0
286+
: Writer->getSymbolAddress(*A_Base, *Asm.getLayout()));
287+
Value -=
288+
(!B->getFragment() ? 0
289+
: Writer->getSymbolAddress(*B, *Asm.getLayout())) -
290+
(!B_Base || !B_Base->getFragment()
291+
? 0
292+
: Writer->getSymbolAddress(*B_Base, *Asm.getLayout()));
289293

290294
Type = MachO::ARM64_RELOC_UNSIGNED;
291295

@@ -341,8 +345,7 @@ void AArch64MachObjectWriter::recordRelocation(
341345

342346
// Add the local offset, if needed.
343347
if (Base != Symbol)
344-
Value +=
345-
Layout.getSymbolOffset(*Symbol) - Layout.getSymbolOffset(*Base);
348+
Value += Asm.getSymbolOffset(*Symbol) - Asm.getSymbolOffset(*Base);
346349
} else if (Symbol->isInSection()) {
347350
if (!CanUseLocalRelocation) {
348351
Asm.getContext().reportError(
@@ -355,10 +358,10 @@ void AArch64MachObjectWriter::recordRelocation(
355358
// The index is the section ordinal (1-based).
356359
const MCSection &Sec = Symbol->getSection();
357360
Index = Sec.getOrdinal() + 1;
358-
Value += Writer->getSymbolAddress(*Symbol, Layout);
361+
Value += Writer->getSymbolAddress(*Symbol, *Asm.getLayout());
359362

360363
if (IsPCRel)
361-
Value -= Writer->getFragmentAddress(Fragment, Layout) +
364+
Value -= Writer->getFragmentAddress(Fragment, *Asm.getLayout()) +
362365
Fixup.getOffset() + (1ULL << Log2Size);
363366
} else {
364367
llvm_unreachable(

llvm/lib/Target/ARM/MCTargetDesc/ARMMachObjectWriter.cpp

Lines changed: 28 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,14 @@ using namespace llvm;
2727

2828
namespace {
2929
class ARMMachObjectWriter : public MCMachObjectTargetWriter {
30-
void RecordARMScatteredRelocation(MachObjectWriter *Writer,
30+
void recordARMScatteredRelocation(MachObjectWriter *Writer,
3131
const MCAssembler &Asm,
32-
const MCAsmLayout &Layout,
3332
const MCFragment *Fragment,
34-
const MCFixup &Fixup,
35-
MCValue Target,
36-
unsigned Type,
37-
unsigned Log2Size,
33+
const MCFixup &Fixup, MCValue Target,
34+
unsigned Type, unsigned Log2Size,
3835
uint64_t &FixedValue);
39-
void RecordARMScatteredHalfRelocation(MachObjectWriter *Writer,
36+
void recordARMScatteredHalfRelocation(MachObjectWriter *Writer,
4037
const MCAssembler &Asm,
41-
const MCAsmLayout &Layout,
4238
const MCFragment *Fragment,
4339
const MCFixup &Fixup, MCValue Target,
4440
uint64_t &FixedValue);
@@ -53,9 +49,8 @@ class ARMMachObjectWriter : public MCMachObjectTargetWriter {
5349
: MCMachObjectTargetWriter(Is64Bit, CPUType, CPUSubtype) {}
5450

5551
void recordRelocation(MachObjectWriter *Writer, MCAssembler &Asm,
56-
const MCAsmLayout &Layout, const MCFragment *Fragment,
57-
const MCFixup &Fixup, MCValue Target,
58-
uint64_t &FixedValue) override;
52+
const MCFragment *Fragment, const MCFixup &Fixup,
53+
MCValue Target, uint64_t &FixedValue) override;
5954
};
6055
}
6156

@@ -136,15 +131,11 @@ static bool getARMFixupKindMachOInfo(unsigned Kind, unsigned &RelocType,
136131
}
137132
}
138133

139-
void ARMMachObjectWriter::
140-
RecordARMScatteredHalfRelocation(MachObjectWriter *Writer,
141-
const MCAssembler &Asm,
142-
const MCAsmLayout &Layout,
143-
const MCFragment *Fragment,
144-
const MCFixup &Fixup,
145-
MCValue Target,
146-
uint64_t &FixedValue) {
147-
uint32_t FixupOffset = Layout.getFragmentOffset(Fragment)+Fixup.getOffset();
134+
void ARMMachObjectWriter::recordARMScatteredHalfRelocation(
135+
MachObjectWriter *Writer, const MCAssembler &Asm,
136+
const MCFragment *Fragment, const MCFixup &Fixup, MCValue Target,
137+
uint64_t &FixedValue) {
138+
uint32_t FixupOffset = Asm.getFragmentOffset(*Fragment) + Fixup.getOffset();
148139

149140
if (FixupOffset & 0xff000000) {
150141
Asm.getContext().reportError(Fixup.getLoc(),
@@ -167,7 +158,7 @@ RecordARMScatteredHalfRelocation(MachObjectWriter *Writer,
167158
return;
168159
}
169160

170-
uint32_t Value = Writer->getSymbolAddress(*A, Layout);
161+
uint32_t Value = Writer->getSymbolAddress(*A, *Asm.getLayout());
171162
uint32_t Value2 = 0;
172163
uint64_t SecAddr = Writer->getSectionAddress(A->getFragment()->getParent());
173164
FixedValue += SecAddr;
@@ -184,7 +175,7 @@ RecordARMScatteredHalfRelocation(MachObjectWriter *Writer,
184175

185176
// Select the appropriate difference relocation type.
186177
Type = MachO::ARM_RELOC_HALF_SECTDIFF;
187-
Value2 = Writer->getSymbolAddress(B->getSymbol(), Layout);
178+
Value2 = Writer->getSymbolAddress(B->getSymbol(), *Asm.getLayout());
188179
FixedValue -= Writer->getSectionAddress(SB->getFragment()->getParent());
189180
}
190181

@@ -250,16 +241,11 @@ RecordARMScatteredHalfRelocation(MachObjectWriter *Writer,
250241
Writer->addRelocation(nullptr, Fragment->getParent(), MRE);
251242
}
252243

253-
void ARMMachObjectWriter::RecordARMScatteredRelocation(MachObjectWriter *Writer,
254-
const MCAssembler &Asm,
255-
const MCAsmLayout &Layout,
256-
const MCFragment *Fragment,
257-
const MCFixup &Fixup,
258-
MCValue Target,
259-
unsigned Type,
260-
unsigned Log2Size,
261-
uint64_t &FixedValue) {
262-
uint32_t FixupOffset = Layout.getFragmentOffset(Fragment)+Fixup.getOffset();
244+
void ARMMachObjectWriter::recordARMScatteredRelocation(
245+
MachObjectWriter *Writer, const MCAssembler &Asm,
246+
const MCFragment *Fragment, const MCFixup &Fixup, MCValue Target,
247+
unsigned Type, unsigned Log2Size, uint64_t &FixedValue) {
248+
uint32_t FixupOffset = Asm.getFragmentOffset(*Fragment) + Fixup.getOffset();
263249

264250
if (FixupOffset & 0xff000000) {
265251
Asm.getContext().reportError(Fixup.getLoc(),
@@ -281,7 +267,7 @@ void ARMMachObjectWriter::RecordARMScatteredRelocation(MachObjectWriter *Writer,
281267
return;
282268
}
283269

284-
uint32_t Value = Writer->getSymbolAddress(*A, Layout);
270+
uint32_t Value = Writer->getSymbolAddress(*A, *Asm.getLayout());
285271
uint64_t SecAddr = Writer->getSectionAddress(A->getFragment()->getParent());
286272
FixedValue += SecAddr;
287273
uint32_t Value2 = 0;
@@ -299,7 +285,7 @@ void ARMMachObjectWriter::RecordARMScatteredRelocation(MachObjectWriter *Writer,
299285

300286
// Select the appropriate difference relocation type.
301287
Type = MachO::ARM_RELOC_SECTDIFF;
302-
Value2 = Writer->getSymbolAddress(B->getSymbol(), Layout);
288+
Value2 = Writer->getSymbolAddress(B->getSymbol(), *Asm.getLayout());
303289
FixedValue -= Writer->getSectionAddress(SB->getFragment()->getParent());
304290
}
305291

@@ -374,7 +360,6 @@ bool ARMMachObjectWriter::requiresExternRelocation(MachObjectWriter *Writer,
374360

375361
void ARMMachObjectWriter::recordRelocation(MachObjectWriter *Writer,
376362
MCAssembler &Asm,
377-
const MCAsmLayout &Layout,
378363
const MCFragment *Fragment,
379364
const MCFixup &Fixup, MCValue Target,
380365
uint64_t &FixedValue) {
@@ -395,11 +380,10 @@ void ARMMachObjectWriter::recordRelocation(MachObjectWriter *Writer,
395380
// relocations.
396381
if (Target.getSymB()) {
397382
if (RelocType == MachO::ARM_RELOC_HALF)
398-
return RecordARMScatteredHalfRelocation(Writer, Asm, Layout, Fragment,
399-
Fixup, Target, FixedValue);
400-
return RecordARMScatteredRelocation(Writer, Asm, Layout, Fragment, Fixup,
401-
Target, RelocType, Log2Size,
402-
FixedValue);
383+
return recordARMScatteredHalfRelocation(Writer, Asm, Fragment, Fixup,
384+
Target, FixedValue);
385+
return recordARMScatteredRelocation(Writer, Asm, Fragment, Fixup, Target,
386+
RelocType, Log2Size, FixedValue);
403387
}
404388

405389
// Get the symbol data, if any.
@@ -417,12 +401,11 @@ void ARMMachObjectWriter::recordRelocation(MachObjectWriter *Writer,
417401
Offset += 1 << Log2Size;
418402
if (Offset && A && !Writer->doesSymbolRequireExternRelocation(*A) &&
419403
RelocType != MachO::ARM_RELOC_HALF)
420-
return RecordARMScatteredRelocation(Writer, Asm, Layout, Fragment, Fixup,
421-
Target, RelocType, Log2Size,
422-
FixedValue);
404+
return recordARMScatteredRelocation(Writer, Asm, Fragment, Fixup, Target,
405+
RelocType, Log2Size, FixedValue);
423406

424407
// See <reloc.h>.
425-
uint32_t FixupOffset = Layout.getFragmentOffset(Fragment)+Fixup.getOffset();
408+
uint32_t FixupOffset = Asm.getFragmentOffset(*Fragment) + Fixup.getOffset();
426409
unsigned Index = 0;
427410
unsigned Type = 0;
428411
const MCSymbol *RelSymbol = nullptr;
@@ -453,7 +436,7 @@ void ARMMachObjectWriter::recordRelocation(MachObjectWriter *Writer,
453436
// compensate for the addend of the symbol address, if it was
454437
// undefined. This occurs with weak definitions, for example.
455438
if (!A->isUndefined())
456-
FixedValue -= Layout.getSymbolOffset(*A);
439+
FixedValue -= Asm.getSymbolOffset(*A);
457440
} else {
458441
// The index is the section ordinal (1-based).
459442
const MCSection &Sec = A->getSection();

0 commit comments

Comments
 (0)