Move AliasedSymbol to MachObjectWriter.
authorRafael Espindola <rafael.espindola@gmail.com>
Fri, 17 Apr 2015 12:28:43 +0000 (12:28 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Fri, 17 Apr 2015 12:28:43 +0000 (12:28 +0000)
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

include/llvm/MC/MCMachObjectWriter.h
include/llvm/MC/MCSymbol.h
lib/MC/MCSymbol.cpp
lib/MC/MachObjectWriter.cpp
lib/Target/X86/MCTargetDesc/X86MachObjectWriter.cpp

index bfe5d3614c0ab5835d4de8c880546d4c05b9d897..a06f44a15f1f23194b951e9742fdbcbd5035bbdb 100644 (file)
@@ -123,6 +123,8 @@ public:
                    bool IsLittleEndian)
       : MCObjectWriter(OS, IsLittleEndian), TargetObjectWriter(MOTW) {}
 
+  const MCSymbol &findAliasedSymbol(const MCSymbol &Sym) const;
+
   /// @name Lifetime management Methods
   /// @{
 
index e4bdfda55d62d46a3fec82dfd1c12ec7ba85e4a7..f1c36f54e08a6b956424c19d967451f9fdd9dfd6 100644 (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);
 
     /// @}
index 6582574ae941959761d39e9baa843f9b956ae39b..ccb9f8def9ef8f31d33ca270b2877bdb198a2010 100644 (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!");
index f04d0edc688b0f28be8fbe0095eda5e648a8ee4b..97143a94fb1a675c329746f2724f674a54e19046 100644 (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();
 
index 38539cd7bee5521c868e88b8c205d17f6d1956bc..b0ddd7674591ea6fe3b18139f1fe584507551aa4 100644 (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);