diff options
author | Jim Grosbach <grosbach@apple.com> | 2012-09-13 23:11:31 +0000 |
---|---|---|
committer | Jim Grosbach <grosbach@apple.com> | 2012-09-13 23:11:31 +0000 |
commit | b7b750d480ff7714e65f4b92ec1a43be4a9acd30 (patch) | |
tree | d078eb3e627f6a55d56719bb34b1e0702d5045e8 /llvm/lib/MC/MCParser/AsmParser.cpp | |
parent | d96ef194d97a905907eec4f21cf771108c5087aa (diff) | |
download | bcm5719-llvm-b7b750d480ff7714e65f4b92ec1a43be4a9acd30.tar.gz bcm5719-llvm-b7b750d480ff7714e65f4b92ec1a43be4a9acd30.zip |
Assembler: Darwin variables defined via .set are no-dead-strip.
For gas compatibility.
rdar://12219394
llvm-svn: 163854
Diffstat (limited to 'llvm/lib/MC/MCParser/AsmParser.cpp')
-rw-r--r-- | llvm/lib/MC/MCParser/AsmParser.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp index 55ef01c7961..849b7c6e1e2 100644 --- a/llvm/lib/MC/MCParser/AsmParser.cpp +++ b/llvm/lib/MC/MCParser/AsmParser.cpp @@ -221,7 +221,8 @@ private: /// return the contents from the current token up to the end or comma. StringRef ParseStringToComma(); - bool ParseAssignment(StringRef Name, bool allow_redef); + bool ParseAssignment(StringRef Name, bool allow_redef, + bool NoDeadStrip = false); bool ParsePrimaryExpr(const MCExpr *&Res, SMLoc &EndLoc); bool ParseBinOpRHS(unsigned Precedence, const MCExpr *&Res, SMLoc &EndLoc); @@ -1697,7 +1698,8 @@ static bool IsUsedIn(const MCSymbol *Sym, const MCExpr *Value) { llvm_unreachable("Unknown expr kind!"); } -bool AsmParser::ParseAssignment(StringRef Name, bool allow_redef) { +bool AsmParser::ParseAssignment(StringRef Name, bool allow_redef, + bool NoDeadStrip) { // FIXME: Use better location, we should use proper tokens. SMLoc EqualLoc = Lexer.getLoc(); @@ -1752,6 +1754,9 @@ bool AsmParser::ParseAssignment(StringRef Name, bool allow_redef) { // Do the assignment. Out.EmitAssignment(Sym, Value); + if (NoDeadStrip) + Out.EmitSymbolAttribute(Sym, MCSA_NoDeadStrip); + return false; } @@ -1809,7 +1814,7 @@ bool AsmParser::ParseDirectiveSet(StringRef IDVal, bool allow_redef) { return TokError("unexpected token in '" + Twine(IDVal) + "'"); Lex(); - return ParseAssignment(Name, allow_redef); + return ParseAssignment(Name, allow_redef, true); } bool AsmParser::ParseEscapedString(std::string &Data) { |