summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2015-04-17 12:28:43 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2015-04-17 12:28:43 +0000
commit7f4e07befc5a22b48e30aa8abc4fe98b22bfa784 (patch)
tree74eb864fc8feafc1d3b5523dce7921f0ff3d7dd3
parent97de57343a1dadbd87e931d8506952fd01104d00 (diff)
downloadbcm5719-llvm-7f4e07befc5a22b48e30aa8abc4fe98b22bfa784.tar.gz
bcm5719-llvm-7f4e07befc5a22b48e30aa8abc4fe98b22bfa784.zip
Move AliasedSymbol to MachObjectWriter.
It was only used by MachO. Part of pr19627. llvm-svn: 235185
-rw-r--r--llvm/include/llvm/MC/MCMachObjectWriter.h2
-rw-r--r--llvm/include/llvm/MC/MCSymbol.h5
-rw-r--r--llvm/lib/MC/MCSymbol.cpp12
-rw-r--r--llvm/lib/MC/MachObjectWriter.cpp16
-rw-r--r--llvm/lib/Target/X86/MCTargetDesc/X86MachObjectWriter.cpp4
5 files changed, 18 insertions, 21 deletions
diff --git a/llvm/include/llvm/MC/MCMachObjectWriter.h b/llvm/include/llvm/MC/MCMachObjectWriter.h
index bfe5d3614c0..a06f44a15f1 100644
--- a/llvm/include/llvm/MC/MCMachObjectWriter.h
+++ b/llvm/include/llvm/MC/MCMachObjectWriter.h
@@ -123,6 +123,8 @@ public:
bool IsLittleEndian)
: MCObjectWriter(OS, IsLittleEndian), TargetObjectWriter(MOTW) {}
+ const MCSymbol &findAliasedSymbol(const MCSymbol &Sym) const;
+
/// @name Lifetime management Methods
/// @{
diff --git a/llvm/include/llvm/MC/MCSymbol.h b/llvm/include/llvm/MC/MCSymbol.h
index e4bdfda55d6..f1c36f54e08 100644
--- a/llvm/include/llvm/MC/MCSymbol.h
+++ b/llvm/include/llvm/MC/MCSymbol.h
@@ -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);
/// @}
diff --git a/llvm/lib/MC/MCSymbol.cpp b/llvm/lib/MC/MCSymbol.cpp
index 6582574ae94..ccb9f8def9e 100644
--- a/llvm/lib/MC/MCSymbol.cpp
+++ b/llvm/lib/MC/MCSymbol.cpp
@@ -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!");
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();
diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86MachObjectWriter.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86MachObjectWriter.cpp
index 38539cd7bee..b0ddd767459 100644
--- a/llvm/lib/Target/X86/MCTargetDesc/X86MachObjectWriter.cpp
+++ b/llvm/lib/Target/X86/MCTargetDesc/X86MachObjectWriter.cpp
@@ -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);
OpenPOWER on IntegriCloud