diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2015-04-17 12:28:43 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2015-04-17 12:28:43 +0000 |
commit | 7f4e07befc5a22b48e30aa8abc4fe98b22bfa784 (patch) | |
tree | 74eb864fc8feafc1d3b5523dce7921f0ff3d7dd3 /llvm/lib/MC/MachObjectWriter.cpp | |
parent | 97de57343a1dadbd87e931d8506952fd01104d00 (diff) | |
download | bcm5719-llvm-7f4e07befc5a22b48e30aa8abc4fe98b22bfa784.tar.gz bcm5719-llvm-7f4e07befc5a22b48e30aa8abc4fe98b22bfa784.zip |
Move AliasedSymbol to MachObjectWriter.
It was only used by MachO.
Part of pr19627.
llvm-svn: 235185
Diffstat (limited to 'llvm/lib/MC/MachObjectWriter.cpp')
-rw-r--r-- | llvm/lib/MC/MachObjectWriter.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/llvm/lib/MC/MachObjectWriter.cpp b/llvm/lib/MC/MachObjectWriter.cpp index f04d0edc688..97143a94fb1 100644 --- a/llvm/lib/MC/MachObjectWriter.cpp +++ b/llvm/lib/MC/MachObjectWriter.cpp @@ -321,11 +321,23 @@ MachObjectWriter::findSymbolData(const MCSymbol &Sym) { return nullptr; } +const MCSymbol &MachObjectWriter::findAliasedSymbol(const MCSymbol &Sym) const { + const MCSymbol *S = &Sym; + while (S->isVariable()) { + const MCExpr *Value = S->getVariableValue(); + const auto *Ref = dyn_cast<MCSymbolRefExpr>(Value); + if (!Ref) + return *S; + S = &Ref->getSymbol(); + } + return *S; +} + void MachObjectWriter::WriteNlist(MachSymbolData &MSD, const MCAsmLayout &Layout) { MCSymbolData &Data = *MSD.SymbolData; const MCSymbol *Symbol = &Data.getSymbol(); - const MCSymbol *AliasedSymbol = &Symbol->AliasedSymbol(); + const MCSymbol *AliasedSymbol = &findAliasedSymbol(*Symbol); uint8_t SectionIndex = MSD.SectionIndex; uint8_t Type = 0; uint16_t Flags = Data.getFlags(); @@ -674,7 +686,7 @@ IsSymbolRefDifferenceFullyResolvedImpl(const MCAssembler &Asm, // addr(atom(A)) - addr(atom(B)) == 0. const MCSymbolData *A_Base = nullptr, *B_Base = nullptr; - const MCSymbol &SA = DataA.getSymbol().AliasedSymbol(); + const MCSymbol &SA = findAliasedSymbol(DataA.getSymbol()); const MCSection &SecA = SA.getSection(); const MCSection &SecB = FB.getParent()->getSection(); |