summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2010-03-11 18:22:51 +0000
committerDaniel Dunbar <daniel@zuster.org>2010-03-11 18:22:51 +0000
commit64b408b12438762a412fce7076e847ac9b4a3262 (patch)
treebcb9df15c0e79434fd2d00a3a3479aa806abc391 /llvm
parent3a106e70291140af38dd5107cbbbc86e5835ffa5 (diff)
downloadbcm5719-llvm-64b408b12438762a412fce7076e847ac9b4a3262.tar.gz
bcm5719-llvm-64b408b12438762a412fce7076e847ac9b4a3262.zip
MC/Mach-O: Add MCSymbolData::getAddress() utility.
llvm-svn: 98266
Diffstat (limited to 'llvm')
-rw-r--r--llvm/include/llvm/MC/MCAssembler.h5
-rw-r--r--llvm/lib/MC/MCAssembler.cpp8
2 files changed, 9 insertions, 4 deletions
diff --git a/llvm/include/llvm/MC/MCAssembler.h b/llvm/include/llvm/MC/MCAssembler.h
index 8210db61fca..4ac7ef19df8 100644
--- a/llvm/include/llvm/MC/MCAssembler.h
+++ b/llvm/include/llvm/MC/MCAssembler.h
@@ -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
/// @{
diff --git a/llvm/lib/MC/MCAssembler.cpp b/llvm/lib/MC/MCAssembler.cpp
index 8d0075e93b3..564111844c2 100644
--- a/llvm/lib/MC/MCAssembler.cpp
+++ b/llvm/lib/MC/MCAssembler.cpp
@@ -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;
OpenPOWER on IntegriCloud