summaryrefslogtreecommitdiffstats
path: root/llvm/lib/MC/MCParser
diff options
context:
space:
mode:
authorReid Kleckner <rnk@google.com>2016-02-02 17:41:18 +0000
committerReid Kleckner <rnk@google.com>2016-02-02 17:41:18 +0000
commit1fcd610c9499d8f1eb42f339926ed17ec6d98ddd (patch)
treeb80a02a7939d74d6657ce1523b272f81ea84b403 /llvm/lib/MC/MCParser
parent7d6b924df841faff6893207044cc57b02464b255 (diff)
downloadbcm5719-llvm-1fcd610c9499d8f1eb42f339926ed17ec6d98ddd.tar.gz
bcm5719-llvm-1fcd610c9499d8f1eb42f339926ed17ec6d98ddd.zip
[codeview] Wire up the .cv_inline_linetable directive
This directive emits the binary annotations that describe line and code deltas in inlined call sites. Single-stepping through inlined frames in windbg now works. llvm-svn: 259535
Diffstat (limited to 'llvm/lib/MC/MCParser')
-rw-r--r--llvm/lib/MC/MCParser/AsmParser.cpp13
1 files changed, 10 insertions, 3 deletions
diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp
index 621618a5666..9f8027a381e 100644
--- a/llvm/lib/MC/MCParser/AsmParser.cpp
+++ b/llvm/lib/MC/MCParser/AsmParser.cpp
@@ -3229,7 +3229,7 @@ bool AsmParser::parseDirectiveCVLinetable() {
}
/// parseDirectiveCVInlineLinetable
-/// ::= .cv_inline_linetable PrimaryFunctionId FileId LineNum
+/// ::= .cv_inline_linetable PrimaryFunctionId FileId LineNum FnStart
/// ("contains" SecondaryFunctionId+)?
bool AsmParser::parseDirectiveCVInlineLinetable() {
int64_t PrimaryFunctionId = getTok().getIntVal();
@@ -3250,6 +3250,12 @@ bool AsmParser::parseDirectiveCVInlineLinetable() {
"Line number less than zero in '.cv_inline_linetable' directive");
Lex();
+ SMLoc Loc = getLexer().getLoc();
+ StringRef FnStartName;
+ if (parseIdentifier(FnStartName))
+ return Error(Loc, "expected identifier in directive");
+ MCSymbol *FnStartSym = getContext().getOrCreateSymbol(FnStartName);
+
SmallVector<unsigned, 8> SecondaryFunctionIds;
if (getLexer().is(AsmToken::Identifier)) {
if (getTok().getIdentifier() != "contains")
@@ -3268,8 +3274,9 @@ bool AsmParser::parseDirectiveCVInlineLinetable() {
}
}
- getStreamer().EmitCVInlineLinetableDirective(
- PrimaryFunctionId, SourceFileId, SourceLineNum, SecondaryFunctionIds);
+ getStreamer().EmitCVInlineLinetableDirective(PrimaryFunctionId, SourceFileId,
+ SourceLineNum, FnStartSym,
+ SecondaryFunctionIds);
return false;
}
OpenPOWER on IntegriCloud