llvm-mc: When handling a .set, make sure to print subsequent references to the

symbol as the symbol name itself, not the expression it was defined to. These
have different semantics due to the quirky .set behavior (which absolutizes an
expression that would otherwise be treated as a relocation).


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79025 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Daniel Dunbar 2009-08-14 19:10:46 +00:00
parent 9b9014f2a0
commit b2d0b6b8c7
2 changed files with 17 additions and 4 deletions

View File

@ -136,11 +136,18 @@ void MCAsmStreamer::EmitAssignment(MCSymbol *Symbol, const MCValue &Value,
if (MakeAbsolute) {
OS << ".set " << Symbol << ", " << Value << '\n';
// HACK: If the value isn't already absolute, set the symbol value to
// itself, we want to use the .set absolute value, not the actual
// expression.
if (!Value.isAbsolute())
getContext().SetSymbolValue(Symbol, MCValue::get(Symbol));
else
getContext().SetSymbolValue(Symbol, Value);
} else {
OS << Symbol << " = " << Value << '\n';
getContext().SetSymbolValue(Symbol, Value);
}
getContext().SetSymbolValue(Symbol, Value);
}
void MCAsmStreamer::EmitSymbolAttribute(MCSymbol *Symbol,

View File

@ -23,9 +23,9 @@ foo:
// CHECK: addl $10, %eax
addl "b$c", %eax
// CHECK: set "a 0", 11
.set "a 0", 11
.set "a 0", 11
// CHECK: .long 11
.long "a 0"
@ -49,3 +49,9 @@ foo:
// CHECK: .lsym "a 8",1
.lsym "a 8", 1
// CHECK: set "a 9", a - b
.set "a 9", a - b
// CHECK: .long "a 9"
.long "a 9"