Move AliasedSymbol to MachObjectWriter.

It was only used by MachO.
Part of pr19627.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235185 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Rafael Espindola 2015-04-17 12:28:43 +00:00
parent dc71d8a7b9
commit db244041cd
5 changed files with 18 additions and 21 deletions

View File

@ -123,6 +123,8 @@ public:
bool IsLittleEndian)
: MCObjectWriter(OS, IsLittleEndian), TargetObjectWriter(MOTW) {}
const MCSymbol &findAliasedSymbol(const MCSymbol &Sym) const;
/// @name Lifetime management Methods
/// @{

View File

@ -164,11 +164,6 @@ namespace llvm {
return Value;
}
// AliasedSymbol() - If this is an alias (a = b), return the symbol
// we ultimately point to. For a non-alias, this just returns the symbol
// itself.
const MCSymbol &AliasedSymbol() const;
void setVariableValue(const MCExpr *Value);
/// @}

View File

@ -39,18 +39,6 @@ static bool NameNeedsQuoting(StringRef Str) {
return false;
}
const MCSymbol &MCSymbol::AliasedSymbol() const {
const MCSymbol *S = this;
while (S->isVariable()) {
const MCExpr *Value = S->getVariableValue();
if (Value->getKind() != MCExpr::SymbolRef)
return *S;
const MCSymbolRefExpr *Ref = static_cast<const MCSymbolRefExpr*>(Value);
S = &Ref->getSymbol();
}
return *S;
}
void MCSymbol::setVariableValue(const MCExpr *Value) {
assert(!IsUsed && "Cannot set a variable that has already been used.");
assert(Value && "Invalid variable value!");

View File

@ -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();

View File

@ -141,13 +141,13 @@ void X86MachObjectWriter::RecordX86_64Relocation(
} else if (Target.getSymB()) { // A - B + constant
const MCSymbol *A = &Target.getSymA()->getSymbol();
if (A->isTemporary())
A = &A->AliasedSymbol();
A = &Writer->findAliasedSymbol(*A);
const MCSymbolData &A_SD = Asm.getSymbolData(*A);
const MCSymbolData *A_Base = Asm.getAtom(&A_SD);
const MCSymbol *B = &Target.getSymB()->getSymbol();
if (B->isTemporary())
B = &B->AliasedSymbol();
B = &Writer->findAliasedSymbol(*B);
const MCSymbolData &B_SD = Asm.getSymbolData(*B);
const MCSymbolData *B_Base = Asm.getAtom(&B_SD);