summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAnders Waldenborg <anders@0x63.nu>2014-02-17 20:48:32 +0000
committerAnders Waldenborg <anders@0x63.nu>2014-02-17 20:48:32 +0000
commit1410f7ffc63aa3ad4b7937491ef860d862846245 (patch)
tree78e8cf6c395e7b452c214cd6c19c0c3f8fcaa2aa /lib
parent3457506fb9e5256fcc3c51ea3fd5bbd0221dead0 (diff)
downloadllvm-1410f7ffc63aa3ad4b7937491ef860d862846245.tar.gz
llvm-1410f7ffc63aa3ad4b7937491ef860d862846245.tar.bz2
llvm-1410f7ffc63aa3ad4b7937491ef860d862846245.tar.xz
Add support for assigning to . in AsmParser.
This is implemented by handling assignments to the '.' pseudo symbol as ".org" directives. Differential Revision: http://llvm-reviews.chandlerc.com/D2625 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@201530 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/MC/MCParser/AsmParser.cpp14
1 files changed, 6 insertions, 8 deletions
diff --git a/lib/MC/MCParser/AsmParser.cpp b/lib/MC/MCParser/AsmParser.cpp
index 4f7734153a..107ae56e91 100644
--- a/lib/MC/MCParser/AsmParser.cpp
+++ b/lib/MC/MCParser/AsmParser.cpp
@@ -2119,12 +2119,6 @@ bool AsmParser::parseAssignment(StringRef Name, bool allow_redef,
if (Lexer.isNot(AsmToken::EndOfStatement))
return TokError("unexpected token in assignment");
- // Error on assignment to '.'.
- if (Name == ".") {
- return Error(EqualLoc, ("assignment to pseudo-symbol '.' is unsupported "
- "(use '.space' or '.org').)"));
- }
-
// Eat the end of statement marker.
Lex();
@@ -2152,11 +2146,15 @@ bool AsmParser::parseAssignment(StringRef Name, bool allow_redef,
// Don't count these checks as uses.
Sym->setUsed(false);
+ } else if (Name == ".") {
+ if (Out.EmitValueToOffset(Value, 0)) {
+ Error(EqualLoc, "expected absolute expression");
+ eatToEndOfStatement();
+ }
+ return false;
} else
Sym = getContext().GetOrCreateSymbol(Name);
- // FIXME: Handle '.'.
-
// Do the assignment.
Out.EmitAssignment(Sym, Value);
if (NoDeadStrip)