summaryrefslogtreecommitdiffstats
path: root/llvm/lib/MC
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2010-11-13 03:18:27 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2010-11-13 03:18:27 +0000
commitf01b622902269c7fc01fbd9b26393eabdfb82076 (patch)
tree2101a87c019706b8e580b6bf09e137c52304ecae /llvm/lib/MC
parent99837837ec76b1880b23efe672a0d9aaf11b5059 (diff)
downloadbcm5719-llvm-f01b622902269c7fc01fbd9b26393eabdfb82076.tar.gz
bcm5719-llvm-f01b622902269c7fc01fbd9b26393eabdfb82076.zip
Parse and remember discriminators in .loc line. I try to output them with
another patch. This lets us parse a bit more of the gcc 4.5 output. llvm-svn: 118975
Diffstat (limited to 'llvm/lib/MC')
-rw-r--r--llvm/lib/MC/MCContext.cpp2
-rw-r--r--llvm/lib/MC/MCParser/AsmParser.cpp8
2 files changed, 8 insertions, 2 deletions
diff --git a/llvm/lib/MC/MCContext.cpp b/llvm/lib/MC/MCContext.cpp
index 311f383a3aa..87619d5cece 100644
--- a/llvm/lib/MC/MCContext.cpp
+++ b/llvm/lib/MC/MCContext.cpp
@@ -25,7 +25,7 @@ typedef StringMap<const MCSectionCOFF*> COFFUniqueMapTy;
MCContext::MCContext(const MCAsmInfo &mai) : MAI(mai), NextUniqueID(0),
- CurrentDwarfLoc(0,0,0,0,0) {
+ CurrentDwarfLoc(0,0,0,0,0,0) {
MachOUniquingMap = 0;
ELFUniquingMap = 0;
COFFUniquingMap = 0;
diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp
index 489d451f7fb..24b94d11cb0 100644
--- a/llvm/lib/MC/MCParser/AsmParser.cpp
+++ b/llvm/lib/MC/MCParser/AsmParser.cpp
@@ -2019,6 +2019,7 @@ bool GenericAsmParser::ParseDirectiveLoc(StringRef, SMLoc DirectiveLoc) {
unsigned Flags = DWARF2_LINE_DEFAULT_IS_STMT ? DWARF2_FLAG_IS_STMT : 0;
unsigned Isa = 0;
+ int64_t Discriminator = 0;
if (getLexer().isNot(AsmToken::EndOfStatement)) {
for (;;) {
if (getLexer().is(AsmToken::EndOfStatement))
@@ -2070,6 +2071,10 @@ bool GenericAsmParser::ParseDirectiveLoc(StringRef, SMLoc DirectiveLoc) {
return Error(Loc, "isa number not a constant value");
}
}
+ else if (Name == "discriminator") {
+ if (getParser().ParseAbsoluteExpression(Discriminator))
+ return true;
+ }
else {
return Error(Loc, "unknown sub-directive in '.loc' directive");
}
@@ -2079,7 +2084,8 @@ bool GenericAsmParser::ParseDirectiveLoc(StringRef, SMLoc DirectiveLoc) {
}
}
- getContext().setCurrentDwarfLoc(FileNumber, LineNumber, ColumnPos, Flags,Isa);
+ getContext().setCurrentDwarfLoc(FileNumber, LineNumber, ColumnPos, Flags,
+ Isa, Discriminator);
return false;
}
OpenPOWER on IntegriCloud