mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-23 05:40:09 +00:00
Allow .alt_entry symbols to pass the .cfi nesting check (#82268)
A symbol with an `N_ALT_ENTRY` attribute may be defined in the middle of a subsection, so it is reasonable to opt them out of the `.cfi_{start,end}proc` nesting check. Fixes: https://github.com/llvm/llvm-project/issues/82261 (cherry picked from commit 5b91647e3f82c9747c42c3239b7d7f3ade4542a7)
This commit is contained in:
parent
340ba4588c
commit
267d9b1a74
@ -44,6 +44,7 @@
|
||||
#include "llvm/MC/MCSection.h"
|
||||
#include "llvm/MC/MCStreamer.h"
|
||||
#include "llvm/MC/MCSymbol.h"
|
||||
#include "llvm/MC/MCSymbolMachO.h"
|
||||
#include "llvm/MC/MCTargetOptions.h"
|
||||
#include "llvm/MC/MCValue.h"
|
||||
#include "llvm/Support/Casting.h"
|
||||
@ -1950,7 +1951,8 @@ bool AsmParser::parseStatement(ParseStatementInfo &Info,
|
||||
Lex();
|
||||
}
|
||||
|
||||
if (MAI.hasSubsectionsViaSymbols() && CFIStartProcLoc && Sym->isExternal())
|
||||
if (MAI.hasSubsectionsViaSymbols() && CFIStartProcLoc &&
|
||||
Sym->isExternal() && !cast<MCSymbolMachO>(Sym)->isAltEntry())
|
||||
return Error(StartTokLoc, "non-private labels cannot appear between "
|
||||
".cfi_startproc / .cfi_endproc pairs") &&
|
||||
Error(*CFIStartProcLoc, "previous .cfi_startproc was here");
|
||||
|
@ -8,6 +8,10 @@
|
||||
.p2align 2
|
||||
_locomotive:
|
||||
.cfi_startproc
|
||||
; An N_ALT_ENTRY symbol can be defined in the middle of a subsection, so
|
||||
; these are opted out of the .cfi_{start,end}proc nesting check.
|
||||
.alt_entry _engineer
|
||||
_engineer:
|
||||
ret
|
||||
|
||||
; It is invalid to have a non-private label between .cfi_startproc and
|
||||
@ -17,7 +21,7 @@ _locomotive:
|
||||
.p2align 2
|
||||
_caboose:
|
||||
; DARWIN: [[#@LINE-1]]:1: error: non-private labels cannot appear between .cfi_startproc / .cfi_endproc pairs
|
||||
; DARWIN: [[#@LINE-10]]:2: error: previous .cfi_startproc was here
|
||||
; DARWIN: [[#@LINE-14]]:2: error: previous .cfi_startproc was here
|
||||
ret
|
||||
.cfi_endproc
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user