MC/Mach-O: Add MCSymbolData::getAddress() utility.
authorDaniel Dunbar <daniel@zuster.org>
Thu, 11 Mar 2010 18:22:51 +0000 (18:22 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Thu, 11 Mar 2010 18:22:51 +0000 (18:22 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98266 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/MC/MCAssembler.h
lib/MC/MCAssembler.cpp

index 8210db61fca8c6b98c70b8eecee3db91718be157..4ac7ef19df864bc627826e46f5731e140264609e 100644 (file)
@@ -507,6 +507,11 @@ public:
   uint64_t getOffset() const { return Offset; }
   void setOffset(uint64_t Value) { Offset = Value; }
 
+  uint64_t getAddress() const {
+    assert(getFragment() && "Invalid getAddress() on undefined symbol!");
+    return getFragment()->getAddress() + getOffset();
+  }
+
   /// @}
   /// @name Symbol Attributes
   /// @{
index 8d0075e93b306948bd3b8044b922deae42b96734..564111844c21fcb7669bdb478dbdff41823dcb5a 100644 (file)
@@ -400,7 +400,7 @@ public:
       if (Symbol.isAbsolute()) {
         llvm_unreachable("FIXME: Not yet implemented!");
       } else {
-        Address = Data.getFragment()->getAddress() + Data.getOffset();
+        Address = Data.getAddress();
       }
     } else if (Data.isCommon()) {
       // Common symbols are encoded with the size in the address
@@ -452,7 +452,7 @@ public:
       llvm_report_error("symbol '" + A->getName() +
                         "' can not be undefined in a subtraction expression");
 
-    uint32_t Value = A_SD->getFragment()->getAddress() + A_SD->getOffset();
+    uint32_t Value = A_SD->getAddress();
     uint32_t Value2 = 0;
 
     if (const MCSymbol *B = Target.getSymB()) {
@@ -468,7 +468,7 @@ public:
       // relocation types from the linkers point of view, this is done solely
       // for pedantic compatibility with 'as'.
       Type = A_SD->isExternal() ? RIT_Difference : RIT_LocalDifference;
-      Value2 = B_SD->getFragment()->getAddress() + B_SD->getOffset();
+      Value2 = B_SD->getAddress();
     }
 
     // The value which goes in the fixup is current value of the expression.
@@ -561,7 +561,7 @@ public:
           if (&*it == SD->getFragment()->getParent())
             break;
         assert(it != ie && "Unable to find section index!");
-        Value = SD->getFragment()->getAddress() + SD->getOffset();
+        Value = SD->getAddress();
       }
 
       Type = RIT_Vanilla;