mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-21 03:32:29 +00:00
implement .cfi_adjust_cfa_offset.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129296 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
2227f154eb
commit
53abbe5064
@ -80,6 +80,7 @@ private:
|
||||
SourceMgr &SrcMgr;
|
||||
MCAsmParserExtension *GenericParser;
|
||||
MCAsmParserExtension *PlatformParser;
|
||||
int64_t LastOffset;
|
||||
|
||||
/// This is the current buffer index we're lexing from as managed by the
|
||||
/// SourceMgr object.
|
||||
@ -140,6 +141,14 @@ public:
|
||||
|
||||
/// }
|
||||
|
||||
int64_t adjustLastOffset(int64_t Adjustment) {
|
||||
LastOffset += Adjustment;
|
||||
return LastOffset;
|
||||
}
|
||||
void setLastOffset(int64_t Offset) {
|
||||
LastOffset = Offset;
|
||||
}
|
||||
|
||||
private:
|
||||
void CheckForValidSection();
|
||||
|
||||
@ -251,6 +260,8 @@ public:
|
||||
".cfi_def_cfa");
|
||||
AddDirectiveHandler<&GenericAsmParser::ParseDirectiveCFIDefCfaOffset>(
|
||||
".cfi_def_cfa_offset");
|
||||
AddDirectiveHandler<&GenericAsmParser::ParseDirectiveCFIAdjustCfaOffset>(
|
||||
".cfi_adjust_cfa_offset");
|
||||
AddDirectiveHandler<&GenericAsmParser::ParseDirectiveCFIDefCfaRegister>(
|
||||
".cfi_def_cfa_register");
|
||||
AddDirectiveHandler<&GenericAsmParser::ParseDirectiveCFIOffset>(
|
||||
@ -287,6 +298,7 @@ public:
|
||||
bool ParseDirectiveCFIEndProc(StringRef, SMLoc DirectiveLoc);
|
||||
bool ParseDirectiveCFIDefCfa(StringRef, SMLoc DirectiveLoc);
|
||||
bool ParseDirectiveCFIDefCfaOffset(StringRef, SMLoc DirectiveLoc);
|
||||
bool ParseDirectiveCFIAdjustCfaOffset(StringRef, SMLoc DirectiveLoc);
|
||||
bool ParseDirectiveCFIDefCfaRegister(StringRef, SMLoc DirectiveLoc);
|
||||
bool ParseDirectiveCFIOffset(StringRef, SMLoc DirectiveLoc);
|
||||
bool ParseDirectiveCFIPersonalityOrLsda(StringRef, SMLoc DirectiveLoc);
|
||||
@ -315,7 +327,7 @@ enum { DEFAULT_ADDRSPACE = 0 };
|
||||
AsmParser::AsmParser(const Target &T, SourceMgr &_SM, MCContext &_Ctx,
|
||||
MCStreamer &_Out, const MCAsmInfo &_MAI)
|
||||
: Lexer(_MAI), Ctx(_Ctx), Out(_Out), SrcMgr(_SM),
|
||||
GenericParser(new GenericAsmParser), PlatformParser(0),
|
||||
GenericParser(new GenericAsmParser), PlatformParser(0), LastOffset(0),
|
||||
CurBuffer(0), MacrosEnabled(true) {
|
||||
Lexer.setBuffer(SrcMgr.getMemoryBuffer(CurBuffer));
|
||||
|
||||
@ -2309,6 +2321,21 @@ bool GenericAsmParser::ParseDirectiveCFIDefCfaOffset(StringRef,
|
||||
if (getParser().ParseAbsoluteExpression(Offset))
|
||||
return true;
|
||||
|
||||
getParser().setLastOffset(Offset);
|
||||
|
||||
return getStreamer().EmitCFIDefCfaOffset(Offset);
|
||||
}
|
||||
|
||||
/// ParseDirectiveCFIAdjustCfaOffset
|
||||
/// ::= .cfi_adjust_cfa_offset adjustment
|
||||
bool GenericAsmParser::ParseDirectiveCFIAdjustCfaOffset(StringRef,
|
||||
SMLoc DirectiveLoc) {
|
||||
int64_t Adjustment = 0;
|
||||
if (getParser().ParseAbsoluteExpression(Adjustment))
|
||||
return true;
|
||||
|
||||
int64_t Offset = getParser().adjustLastOffset(Adjustment);
|
||||
|
||||
return getStreamer().EmitCFIDefCfaOffset(Offset);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user