mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-01 00:33:09 +00:00
When generating code for Win64 EH, emit StartProc and EndProc directives.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132250 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a0112d0c39
commit
f46337004a
@ -192,6 +192,8 @@ namespace llvm {
|
||||
};
|
||||
CFIMoveType needsCFIMoves();
|
||||
|
||||
bool needsSEHMoves();
|
||||
|
||||
/// EmitConstantPool - Print to the current output stream assembly
|
||||
/// representations of the constants in the constant pool MCP. This is
|
||||
/// used to print out constants which have been "spilled to memory" by
|
||||
|
@ -604,6 +604,11 @@ AsmPrinter::CFIMoveType AsmPrinter::needsCFIMoves() {
|
||||
return CFI_M_None;
|
||||
}
|
||||
|
||||
bool AsmPrinter::needsSEHMoves() {
|
||||
return MAI->getExceptionHandlingType() == ExceptionHandling::Win64 &&
|
||||
MF->getFunction()->needsUnwindTableEntry();
|
||||
}
|
||||
|
||||
void AsmPrinter::emitPrologLabel(const MachineInstr &MI) {
|
||||
MCSymbol *Label = MI.getOperand(0).getMCSymbol();
|
||||
|
||||
|
@ -54,9 +54,35 @@ void Win64Exception::EndModule() {
|
||||
/// BeginFunction - Gather pre-function exception information. Assumes it's
|
||||
/// being emitted immediately after the function entry point.
|
||||
void Win64Exception::BeginFunction(const MachineFunction *MF) {
|
||||
shouldEmitMoves = shouldEmitPersonality = shouldEmitLSDA = false;
|
||||
|
||||
// If any landing pads survive, we need an EH table.
|
||||
bool hasLandingPads = !MMI->getLandingPads().empty();
|
||||
|
||||
shouldEmitMoves = Asm->needsSEHMoves();
|
||||
|
||||
const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
|
||||
unsigned PerEncoding = TLOF.getPersonalityEncoding();
|
||||
const Function *Per = MMI->getPersonalities()[MMI->getPersonalityIndex()];
|
||||
|
||||
shouldEmitPersonality = hasLandingPads &&
|
||||
PerEncoding != dwarf::DW_EH_PE_omit && Per;
|
||||
|
||||
unsigned LSDAEncoding = TLOF.getLSDAEncoding();
|
||||
shouldEmitLSDA = shouldEmitPersonality &&
|
||||
LSDAEncoding != dwarf::DW_EH_PE_omit;
|
||||
|
||||
if (!shouldEmitPersonality && !shouldEmitMoves)
|
||||
return;
|
||||
|
||||
Asm->OutStreamer.EmitWin64EHStartProc(Asm->CurrentFnSym);
|
||||
}
|
||||
|
||||
/// EndFunction - Gather and emit post-function exception information.
|
||||
///
|
||||
void Win64Exception::EndFunction() {
|
||||
if (!shouldEmitPersonality && !shouldEmitMoves)
|
||||
return;
|
||||
|
||||
Asm->OutStreamer.EmitWin64EHEndProc();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user