mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-31 07:43:37 +00:00
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118975 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
7247c079f7
commit
c50a0fd7cb
@ -186,12 +186,14 @@ namespace llvm {
|
|||||||
/// is assembled an entry in the line number table with this information and
|
/// is assembled an entry in the line number table with this information and
|
||||||
/// the address of the instruction will be created.
|
/// the address of the instruction will be created.
|
||||||
void setCurrentDwarfLoc(unsigned FileNum, unsigned Line, unsigned Column,
|
void setCurrentDwarfLoc(unsigned FileNum, unsigned Line, unsigned Column,
|
||||||
unsigned Flags, unsigned Isa) {
|
unsigned Flags, unsigned Isa,
|
||||||
|
unsigned Discriminator) {
|
||||||
CurrentDwarfLoc.setFileNum(FileNum);
|
CurrentDwarfLoc.setFileNum(FileNum);
|
||||||
CurrentDwarfLoc.setLine(Line);
|
CurrentDwarfLoc.setLine(Line);
|
||||||
CurrentDwarfLoc.setColumn(Column);
|
CurrentDwarfLoc.setColumn(Column);
|
||||||
CurrentDwarfLoc.setFlags(Flags);
|
CurrentDwarfLoc.setFlags(Flags);
|
||||||
CurrentDwarfLoc.setIsa(Isa);
|
CurrentDwarfLoc.setIsa(Isa);
|
||||||
|
CurrentDwarfLoc.setDiscriminator(Discriminator);
|
||||||
DwarfLocSeen = true;
|
DwarfLocSeen = true;
|
||||||
}
|
}
|
||||||
void ClearDwarfLocSeen() { DwarfLocSeen = false; }
|
void ClearDwarfLocSeen() { DwarfLocSeen = false; }
|
||||||
|
@ -83,6 +83,8 @@ namespace llvm {
|
|||||||
unsigned Flags;
|
unsigned Flags;
|
||||||
// Isa
|
// Isa
|
||||||
unsigned Isa;
|
unsigned Isa;
|
||||||
|
// Discriminator
|
||||||
|
unsigned Discriminator;
|
||||||
|
|
||||||
// Flag that indicates the initial value of the is_stmt_start flag.
|
// Flag that indicates the initial value of the is_stmt_start flag.
|
||||||
#define DWARF2_LINE_DEFAULT_IS_STMT 1
|
#define DWARF2_LINE_DEFAULT_IS_STMT 1
|
||||||
@ -96,8 +98,9 @@ namespace llvm {
|
|||||||
friend class MCContext;
|
friend class MCContext;
|
||||||
friend class MCLineEntry;
|
friend class MCLineEntry;
|
||||||
MCDwarfLoc(unsigned fileNum, unsigned line, unsigned column, unsigned flags,
|
MCDwarfLoc(unsigned fileNum, unsigned line, unsigned column, unsigned flags,
|
||||||
unsigned isa)
|
unsigned isa, unsigned discriminator)
|
||||||
: FileNum(fileNum), Line(line), Column(column), Flags(flags), Isa(isa) {}
|
: FileNum(fileNum), Line(line), Column(column), Flags(flags), Isa(isa),
|
||||||
|
Discriminator(discriminator) {}
|
||||||
|
|
||||||
// Allow the default copy constructor and assignment operator to be used
|
// Allow the default copy constructor and assignment operator to be used
|
||||||
// for an MCDwarfLoc object.
|
// for an MCDwarfLoc object.
|
||||||
@ -118,6 +121,9 @@ namespace llvm {
|
|||||||
/// getIsa - Get the Isa of this MCDwarfLoc.
|
/// getIsa - Get the Isa of this MCDwarfLoc.
|
||||||
unsigned getIsa() { return Isa; }
|
unsigned getIsa() { return Isa; }
|
||||||
|
|
||||||
|
/// getDiscriminator - Get the Discriminator of this MCDwarfLoc.
|
||||||
|
unsigned getDiscriminator() { return Discriminator; }
|
||||||
|
|
||||||
/// setFileNum - Set the FileNum of this MCDwarfLoc.
|
/// setFileNum - Set the FileNum of this MCDwarfLoc.
|
||||||
void setFileNum(unsigned fileNum) { FileNum = fileNum; }
|
void setFileNum(unsigned fileNum) { FileNum = fileNum; }
|
||||||
|
|
||||||
@ -132,6 +138,11 @@ namespace llvm {
|
|||||||
|
|
||||||
/// setIsa - Set the Isa of this MCDwarfLoc.
|
/// setIsa - Set the Isa of this MCDwarfLoc.
|
||||||
void setIsa(unsigned isa) { Isa = isa; }
|
void setIsa(unsigned isa) { Isa = isa; }
|
||||||
|
|
||||||
|
/// setDiscriminator - Set the Discriminator of this MCDwarfLoc.
|
||||||
|
void setDiscriminator(unsigned discriminator) {
|
||||||
|
Discriminator = discriminator;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/// MCLineEntry - Instances of this class represent the line information for
|
/// MCLineEntry - Instances of this class represent the line information for
|
||||||
|
@ -25,7 +25,7 @@ typedef StringMap<const MCSectionCOFF*> COFFUniqueMapTy;
|
|||||||
|
|
||||||
|
|
||||||
MCContext::MCContext(const MCAsmInfo &mai) : MAI(mai), NextUniqueID(0),
|
MCContext::MCContext(const MCAsmInfo &mai) : MAI(mai), NextUniqueID(0),
|
||||||
CurrentDwarfLoc(0,0,0,0,0) {
|
CurrentDwarfLoc(0,0,0,0,0,0) {
|
||||||
MachOUniquingMap = 0;
|
MachOUniquingMap = 0;
|
||||||
ELFUniquingMap = 0;
|
ELFUniquingMap = 0;
|
||||||
COFFUniquingMap = 0;
|
COFFUniquingMap = 0;
|
||||||
|
@ -2019,6 +2019,7 @@ bool GenericAsmParser::ParseDirectiveLoc(StringRef, SMLoc DirectiveLoc) {
|
|||||||
|
|
||||||
unsigned Flags = DWARF2_LINE_DEFAULT_IS_STMT ? DWARF2_FLAG_IS_STMT : 0;
|
unsigned Flags = DWARF2_LINE_DEFAULT_IS_STMT ? DWARF2_FLAG_IS_STMT : 0;
|
||||||
unsigned Isa = 0;
|
unsigned Isa = 0;
|
||||||
|
int64_t Discriminator = 0;
|
||||||
if (getLexer().isNot(AsmToken::EndOfStatement)) {
|
if (getLexer().isNot(AsmToken::EndOfStatement)) {
|
||||||
for (;;) {
|
for (;;) {
|
||||||
if (getLexer().is(AsmToken::EndOfStatement))
|
if (getLexer().is(AsmToken::EndOfStatement))
|
||||||
@ -2070,6 +2071,10 @@ bool GenericAsmParser::ParseDirectiveLoc(StringRef, SMLoc DirectiveLoc) {
|
|||||||
return Error(Loc, "isa number not a constant value");
|
return Error(Loc, "isa number not a constant value");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (Name == "discriminator") {
|
||||||
|
if (getParser().ParseAbsoluteExpression(Discriminator))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
return Error(Loc, "unknown sub-directive in '.loc' directive");
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -5,4 +5,4 @@
|
|||||||
.loc 1
|
.loc 1
|
||||||
.loc 1 2
|
.loc 1 2
|
||||||
.loc 1 2 3
|
.loc 1 2 3
|
||||||
|
.loc 1 2 discriminator 1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user