mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-01 00:11:00 +00:00
PR13754: llvm-mc/x86 crashes on .cfi directives without the % prefix for registers.
gas accepts this and it seems to be common enough to be worth supporting. This doesn't affect the parsing of reg operands outside of .cfi directives. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@163390 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
38539ebc2b
commit
8e70b5506e
@ -521,12 +521,13 @@ bool X86AsmParser::isDstOp(X86Operand &Op) {
|
||||
bool X86AsmParser::ParseRegister(unsigned &RegNo,
|
||||
SMLoc &StartLoc, SMLoc &EndLoc) {
|
||||
RegNo = 0;
|
||||
if (!isParsingIntelSyntax()) {
|
||||
const AsmToken &TokPercent = Parser.getTok();
|
||||
assert(TokPercent.is(AsmToken::Percent) && "Invalid token kind!");
|
||||
StartLoc = TokPercent.getLoc();
|
||||
const AsmToken &PercentTok = Parser.getTok();
|
||||
StartLoc = PercentTok.getLoc();
|
||||
|
||||
// If we encounter a %, ignore it. This code handles registers with and
|
||||
// without the prefix, unprefixed registers can occur in cfi directives.
|
||||
if (!isParsingIntelSyntax() && PercentTok.is(AsmToken::Percent))
|
||||
Parser.Lex(); // Eat percent token.
|
||||
}
|
||||
|
||||
const AsmToken &Tok = Parser.getTok();
|
||||
if (Tok.isNot(AsmToken::Identifier)) {
|
||||
|
18
test/MC/ELF/cfi-reg.s
Normal file
18
test/MC/ELF/cfi-reg.s
Normal file
@ -0,0 +1,18 @@
|
||||
// RUN: llvm-mc -triple x86_64-pc-linux-gnu %s -o - | FileCheck %s
|
||||
// PR13754
|
||||
|
||||
f:
|
||||
.cfi_startproc
|
||||
nop
|
||||
.cfi_offset 6, -16
|
||||
nop
|
||||
.cfi_offset %rsi, -16
|
||||
nop
|
||||
.cfi_offset rbx, -16
|
||||
nop
|
||||
.cfi_endproc
|
||||
|
||||
// CHECK: f:
|
||||
// CHECK: .cfi_offset %rbp, -16
|
||||
// CHECK: .cfi_offset %rsi, -16
|
||||
// CHECK: .cfi_offset %rbx, -16
|
Loading…
Reference in New Issue
Block a user