diff --git a/include/llvm/MC/MCAsmInfo.h b/include/llvm/MC/MCAsmInfo.h index 764c1cb8ce2..06e473d6b62 100644 --- a/include/llvm/MC/MCAsmInfo.h +++ b/include/llvm/MC/MCAsmInfo.h @@ -41,9 +41,13 @@ enum class EncodingType { }; } -namespace ExceptionHandling { -enum ExceptionsType { None, DwarfCFI, SjLj, ARM, Win64 }; -} +enum class ExceptionHandling { + None, /// No exception support + DwarfCFI, /// DWARF-like instruction based exceptions + SjLj, /// setjmp/longjmp based exceptions + ARM, /// ARM EHABI + WinEH, /// Windows Exception Handling +}; namespace LCOMM { enum LCOMMType { NoAlignment, ByteAlignment, Log2Alignment }; @@ -299,7 +303,7 @@ protected: bool SupportsDebugInformation; /// Exception handling format for the target. Defaults to None. - ExceptionHandling::ExceptionsType ExceptionsType; + ExceptionHandling ExceptionsType; /// Windows exception handling data (.pdata) encoding. Defaults to Invalid. WinEH::EncodingType WinEHEncodingType; @@ -472,17 +476,13 @@ public: bool doesSupportExceptionHandling() const { return ExceptionsType != ExceptionHandling::None; } - ExceptionHandling::ExceptionsType getExceptionHandlingType() const { - return ExceptionsType; - } - WinEH::EncodingType getWinEHEncodingType() const { - return WinEHEncodingType; - } + ExceptionHandling getExceptionHandlingType() const { return ExceptionsType; } + WinEH::EncodingType getWinEHEncodingType() const { return WinEHEncodingType; } bool isExceptionHandlingDwarf() const { return (ExceptionsType == ExceptionHandling::DwarfCFI || ExceptionsType == ExceptionHandling::ARM || - // Win64 handler data still uses DWARF LSDA encoding. - ExceptionsType == ExceptionHandling::Win64); + // Windows handler data still uses DWARF LSDA encoding. + ExceptionsType == ExceptionHandling::WinEH); } bool doesDwarfUseRelocationsAcrossSections() const { return DwarfUsesRelocationsAcrossSections; diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index 799ee92d3ad..5a809aa8572 100644 --- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -243,7 +243,7 @@ bool AsmPrinter::doInitialization(Module &M) { case ExceptionHandling::ARM: ES = new ARMException(this); break; - case ExceptionHandling::Win64: + case ExceptionHandling::WinEH: ES = new Win64Exception(this); break; } @@ -709,13 +709,12 @@ AsmPrinter::CFIMoveType AsmPrinter::needsCFIMoves() { } bool AsmPrinter::needsSEHMoves() { - return MAI->getExceptionHandlingType() == ExceptionHandling::Win64 && + return MAI->getExceptionHandlingType() == ExceptionHandling::WinEH && MF->getFunction()->needsUnwindTableEntry(); } void AsmPrinter::emitCFIInstruction(const MachineInstr &MI) { - ExceptionHandling::ExceptionsType ExceptionHandlingType = - MAI->getExceptionHandlingType(); + ExceptionHandling ExceptionHandlingType = MAI->getExceptionHandlingType(); if (ExceptionHandlingType != ExceptionHandling::DwarfCFI && ExceptionHandlingType != ExceptionHandling::ARM) return; diff --git a/lib/CodeGen/Passes.cpp b/lib/CodeGen/Passes.cpp index 4eec623e079..249b2d0f6bb 100644 --- a/lib/CodeGen/Passes.cpp +++ b/lib/CodeGen/Passes.cpp @@ -416,7 +416,7 @@ void TargetPassConfig::addPassesToHandleExceptions() { // FALLTHROUGH case ExceptionHandling::DwarfCFI: case ExceptionHandling::ARM: - case ExceptionHandling::Win64: + case ExceptionHandling::WinEH: addPass(createDwarfEHPass(TM)); break; case ExceptionHandling::None: diff --git a/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp b/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp index d2e8caf728c..83b27779a2d 100644 --- a/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp +++ b/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp @@ -146,7 +146,7 @@ X86MCAsmInfoMicrosoft::X86MCAsmInfoMicrosoft(const Triple &Triple) { if (Triple.getArch() == Triple::x86_64) { PrivateGlobalPrefix = ".L"; PointerSize = 8; - ExceptionsType = ExceptionHandling::Win64; + ExceptionsType = ExceptionHandling::WinEH; } AssemblerDialect = AsmWriterFlavor; @@ -165,7 +165,7 @@ X86MCAsmInfoGNUCOFF::X86MCAsmInfoGNUCOFF(const Triple &Triple) { if (Triple.getArch() == Triple::x86_64) { PrivateGlobalPrefix = ".L"; PointerSize = 8; - ExceptionsType = ExceptionHandling::Win64; + ExceptionsType = ExceptionHandling::WinEH; } else { ExceptionsType = ExceptionHandling::DwarfCFI; } diff --git a/lib/Target/X86/X86FrameLowering.cpp b/lib/Target/X86/X86FrameLowering.cpp index 886ee1ef0e4..1544549e5e9 100644 --- a/lib/Target/X86/X86FrameLowering.cpp +++ b/lib/Target/X86/X86FrameLowering.cpp @@ -451,12 +451,12 @@ void X86FrameLowering::emitPrologue(MachineFunction &MF) const { bool Is64Bit = STI.is64Bit(); bool IsLP64 = STI.isTarget64BitLP64(); bool IsWin64 = STI.isTargetWin64(); - bool IsSEH = + bool IsWinEH = MF.getTarget().getMCAsmInfo()->getExceptionHandlingType() == - ExceptionHandling::Win64; // Not necessarily synonymous with IsWin64. - bool NeedsWin64SEH = IsSEH && Fn->needsUnwindTableEntry(); + ExceptionHandling::WinEH; // Not necessarily synonymous with IsWin64. + bool NeedsWinEH = IsWinEH && Fn->needsUnwindTableEntry(); bool NeedsDwarfCFI = - !IsSEH && (MMI.hasDebugInfo() || Fn->needsUnwindTableEntry()); + !IsWinEH && (MMI.hasDebugInfo() || Fn->needsUnwindTableEntry()); bool UseLEA = STI.useLeaForSP(); unsigned StackAlign = getStackAlignment(); unsigned SlotSize = RegInfo->getSlotSize(); @@ -572,7 +572,7 @@ void X86FrameLowering::emitPrologue(MachineFunction &MF) const { .addCFIIndex(CFIIndex); } - if (NeedsWin64SEH) { + if (NeedsWinEH) { BuildMI(MBB, MBBI, DL, TII.get(X86::SEH_PushReg)) .addImm(FramePtr) .setMIFlag(MachineInstr::FrameSetup); @@ -623,7 +623,7 @@ void X86FrameLowering::emitPrologue(MachineFunction &MF) const { StackOffset += stackGrowth; } - if (NeedsWin64SEH) { + if (NeedsWinEH) { BuildMI(MBB, MBBI, DL, TII.get(X86::SEH_PushReg)).addImm(Reg).setMIFlag( MachineInstr::FrameSetup); } @@ -735,7 +735,7 @@ void X86FrameLowering::emitPrologue(MachineFunction &MF) const { } int SEHFrameOffset = 0; - if (NeedsWin64SEH) { + if (NeedsWinEH) { if (HasFP) { // We need to set frame base offset low enough such that all saved // register offsets would be positive relative to it, but we can't @@ -775,7 +775,7 @@ void X86FrameLowering::emitPrologue(MachineFunction &MF) const { ++MBBI; // Emit SEH info for non-GPRs - if (NeedsWin64SEH) { + if (NeedsWinEH) { for (const CalleeSavedInfo &Info : MFI->getCalleeSavedInfo()) { unsigned Reg = Info.getReg(); if (X86::GR64RegClass.contains(Reg) || X86::GR32RegClass.contains(Reg))