summaryrefslogtreecommitdiffstats
path: root/llvm/lib/MC/MCParser/COFFAsmParser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/MC/MCParser/COFFAsmParser.cpp')
-rw-r--r--llvm/lib/MC/MCParser/COFFAsmParser.cpp66
1 files changed, 25 insertions, 41 deletions
diff --git a/llvm/lib/MC/MCParser/COFFAsmParser.cpp b/llvm/lib/MC/MCParser/COFFAsmParser.cpp
index b83d68d4fe2..687e0cc1faa 100644
--- a/llvm/lib/MC/MCParser/COFFAsmParser.cpp
+++ b/llvm/lib/MC/MCParser/COFFAsmParser.cpp
@@ -568,7 +568,7 @@ bool COFFAsmParser::ParseDirectiveLinkOnce(StringRef, SMLoc Loc) {
return false;
}
-bool COFFAsmParser::ParseSEHDirectiveStartProc(StringRef, SMLoc) {
+bool COFFAsmParser::ParseSEHDirectiveStartProc(StringRef, SMLoc Loc) {
StringRef SymbolID;
if (getParser().parseIdentifier(SymbolID))
return true;
@@ -579,29 +579,29 @@ bool COFFAsmParser::ParseSEHDirectiveStartProc(StringRef, SMLoc) {
MCSymbol *Symbol = getContext().getOrCreateSymbol(SymbolID);
Lex();
- getStreamer().EmitWinCFIStartProc(Symbol);
+ getStreamer().EmitWinCFIStartProc(Symbol, Loc);
return false;
}
-bool COFFAsmParser::ParseSEHDirectiveEndProc(StringRef, SMLoc) {
+bool COFFAsmParser::ParseSEHDirectiveEndProc(StringRef, SMLoc Loc) {
Lex();
- getStreamer().EmitWinCFIEndProc();
+ getStreamer().EmitWinCFIEndProc(Loc);
return false;
}
-bool COFFAsmParser::ParseSEHDirectiveStartChained(StringRef, SMLoc) {
+bool COFFAsmParser::ParseSEHDirectiveStartChained(StringRef, SMLoc Loc) {
Lex();
- getStreamer().EmitWinCFIStartChained();
+ getStreamer().EmitWinCFIStartChained(Loc);
return false;
}
-bool COFFAsmParser::ParseSEHDirectiveEndChained(StringRef, SMLoc) {
+bool COFFAsmParser::ParseSEHDirectiveEndChained(StringRef, SMLoc Loc) {
Lex();
- getStreamer().EmitWinCFIEndChained();
+ getStreamer().EmitWinCFIEndChained(Loc);
return false;
}
-bool COFFAsmParser::ParseSEHDirectiveHandler(StringRef, SMLoc) {
+bool COFFAsmParser::ParseSEHDirectiveHandler(StringRef, SMLoc Loc) {
StringRef SymbolID;
if (getParser().parseIdentifier(SymbolID))
return true;
@@ -623,17 +623,17 @@ bool COFFAsmParser::ParseSEHDirectiveHandler(StringRef, SMLoc) {
MCSymbol *handler = getContext().getOrCreateSymbol(SymbolID);
Lex();
- getStreamer().EmitWinEHHandler(handler, unwind, except);
+ getStreamer().EmitWinEHHandler(handler, unwind, except, Loc);
return false;
}
-bool COFFAsmParser::ParseSEHDirectiveHandlerData(StringRef, SMLoc) {
+bool COFFAsmParser::ParseSEHDirectiveHandlerData(StringRef, SMLoc Loc) {
Lex();
getStreamer().EmitWinEHHandlerData();
return false;
}
-bool COFFAsmParser::ParseSEHDirectivePushReg(StringRef, SMLoc L) {
+bool COFFAsmParser::ParseSEHDirectivePushReg(StringRef, SMLoc Loc) {
unsigned Reg = 0;
if (ParseSEHRegisterNumber(Reg))
return true;
@@ -642,11 +642,11 @@ bool COFFAsmParser::ParseSEHDirectivePushReg(StringRef, SMLoc L) {
return TokError("unexpected token in directive");
Lex();
- getStreamer().EmitWinCFIPushReg(Reg);
+ getStreamer().EmitWinCFIPushReg(Reg, Loc);
return false;
}
-bool COFFAsmParser::ParseSEHDirectiveSetFrame(StringRef, SMLoc L) {
+bool COFFAsmParser::ParseSEHDirectiveSetFrame(StringRef, SMLoc Loc) {
unsigned Reg = 0;
int64_t Off;
if (ParseSEHRegisterNumber(Reg))
@@ -655,39 +655,31 @@ bool COFFAsmParser::ParseSEHDirectiveSetFrame(StringRef, SMLoc L) {
return TokError("you must specify a stack pointer offset");
Lex();
- SMLoc startLoc = getLexer().getLoc();
if (getParser().parseAbsoluteExpression(Off))
return true;
- if (Off & 0x0F)
- return Error(startLoc, "offset is not a multiple of 16");
-
if (getLexer().isNot(AsmToken::EndOfStatement))
return TokError("unexpected token in directive");
Lex();
- getStreamer().EmitWinCFISetFrame(Reg, Off);
+ getStreamer().EmitWinCFISetFrame(Reg, Off, Loc);
return false;
}
-bool COFFAsmParser::ParseSEHDirectiveAllocStack(StringRef, SMLoc) {
+bool COFFAsmParser::ParseSEHDirectiveAllocStack(StringRef, SMLoc Loc) {
int64_t Size;
- SMLoc startLoc = getLexer().getLoc();
if (getParser().parseAbsoluteExpression(Size))
return true;
- if (Size & 7)
- return Error(startLoc, "size is not a multiple of 8");
-
if (getLexer().isNot(AsmToken::EndOfStatement))
return TokError("unexpected token in directive");
Lex();
- getStreamer().EmitWinCFIAllocStack(Size);
+ getStreamer().EmitWinCFIAllocStack(Size, Loc);
return false;
}
-bool COFFAsmParser::ParseSEHDirectiveSaveReg(StringRef, SMLoc L) {
+bool COFFAsmParser::ParseSEHDirectiveSaveReg(StringRef, SMLoc Loc) {
unsigned Reg = 0;
int64_t Off;
if (ParseSEHRegisterNumber(Reg))
@@ -696,25 +688,21 @@ bool COFFAsmParser::ParseSEHDirectiveSaveReg(StringRef, SMLoc L) {
return TokError("you must specify an offset on the stack");
Lex();
- SMLoc startLoc = getLexer().getLoc();
if (getParser().parseAbsoluteExpression(Off))
return true;
- if (Off & 7)
- return Error(startLoc, "size is not a multiple of 8");
-
if (getLexer().isNot(AsmToken::EndOfStatement))
return TokError("unexpected token in directive");
Lex();
// FIXME: Err on %xmm* registers
- getStreamer().EmitWinCFISaveReg(Reg, Off);
+ getStreamer().EmitWinCFISaveReg(Reg, Off, Loc);
return false;
}
// FIXME: This method is inherently x86-specific. It should really be in the
// x86 backend.
-bool COFFAsmParser::ParseSEHDirectiveSaveXMM(StringRef, SMLoc L) {
+bool COFFAsmParser::ParseSEHDirectiveSaveXMM(StringRef, SMLoc Loc) {
unsigned Reg = 0;
int64_t Off;
if (ParseSEHRegisterNumber(Reg))
@@ -723,23 +711,19 @@ bool COFFAsmParser::ParseSEHDirectiveSaveXMM(StringRef, SMLoc L) {
return TokError("you must specify an offset on the stack");
Lex();
- SMLoc startLoc = getLexer().getLoc();
if (getParser().parseAbsoluteExpression(Off))
return true;
if (getLexer().isNot(AsmToken::EndOfStatement))
return TokError("unexpected token in directive");
- if (Off & 0x0F)
- return Error(startLoc, "offset is not a multiple of 16");
-
Lex();
// FIXME: Err on non-%xmm* registers
- getStreamer().EmitWinCFISaveXMM(Reg, Off);
+ getStreamer().EmitWinCFISaveXMM(Reg, Off, Loc);
return false;
}
-bool COFFAsmParser::ParseSEHDirectivePushFrame(StringRef, SMLoc) {
+bool COFFAsmParser::ParseSEHDirectivePushFrame(StringRef, SMLoc Loc) {
bool Code = false;
StringRef CodeID;
if (getLexer().is(AsmToken::At)) {
@@ -756,13 +740,13 @@ bool COFFAsmParser::ParseSEHDirectivePushFrame(StringRef, SMLoc) {
return TokError("unexpected token in directive");
Lex();
- getStreamer().EmitWinCFIPushFrame(Code);
+ getStreamer().EmitWinCFIPushFrame(Code, Loc);
return false;
}
-bool COFFAsmParser::ParseSEHDirectiveEndProlog(StringRef, SMLoc) {
+bool COFFAsmParser::ParseSEHDirectiveEndProlog(StringRef, SMLoc Loc) {
Lex();
- getStreamer().EmitWinCFIEndProlog();
+ getStreamer().EmitWinCFIEndProlog(Loc);
return false;
}
OpenPOWER on IntegriCloud