mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
Stub out support for Win64-style exceptions. Note that this is merely using
the Win64 EH mechanism to implement GCC-style exceptions. LLVM supports hardly anything else at this point! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132234 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
be64b39431
commit
d652b1368b
@ -26,12 +26,12 @@ namespace llvm {
|
||||
class MCSymbol;
|
||||
class MCContext;
|
||||
|
||||
/// MCAsmInfo - This class is intended to be used as a base class for asm
|
||||
/// properties and features specific to the target.
|
||||
namespace ExceptionHandling {
|
||||
enum ExceptionsType { None, DwarfCFI, SjLj, ARM };
|
||||
enum ExceptionsType { None, DwarfCFI, SjLj, ARM, Win64 };
|
||||
}
|
||||
|
||||
/// MCAsmInfo - This class is intended to be used as a base class for asm
|
||||
/// properties and features specific to the target.
|
||||
class MCAsmInfo {
|
||||
protected:
|
||||
//===------------------------------------------------------------------===//
|
||||
|
@ -199,6 +199,9 @@ bool AsmPrinter::doInitialization(Module &M) {
|
||||
case ExceptionHandling::ARM:
|
||||
DE = new ARMException(this);
|
||||
return false;
|
||||
case ExceptionHandling::Win64:
|
||||
DE = new Win64Exception(this);
|
||||
return false;
|
||||
}
|
||||
|
||||
llvm_unreachable("Unknown exception type.");
|
||||
|
@ -9,5 +9,6 @@ add_llvm_library(LLVMAsmPrinter
|
||||
DwarfDebug.cpp
|
||||
DwarfException.cpp
|
||||
OcamlGCPrinter.cpp
|
||||
Win64Exception.cpp
|
||||
)
|
||||
|
||||
|
@ -205,6 +205,38 @@ public:
|
||||
virtual void EndFunction();
|
||||
};
|
||||
|
||||
class Win64Exception : public DwarfException {
|
||||
/// shouldEmitPersonality - Per-function flag to indicate if personality
|
||||
/// info should be emitted.
|
||||
bool shouldEmitPersonality;
|
||||
|
||||
/// shouldEmitLSDA - Per-function flag to indicate if the LSDA
|
||||
/// should be emitted.
|
||||
bool shouldEmitLSDA;
|
||||
|
||||
/// shouldEmitMoves - Per-function flag to indicate if frame moves info
|
||||
/// should be emitted.
|
||||
bool shouldEmitMoves;
|
||||
|
||||
public:
|
||||
//===--------------------------------------------------------------------===//
|
||||
// Main entry points.
|
||||
//
|
||||
Win64Exception(AsmPrinter *A);
|
||||
virtual ~Win64Exception();
|
||||
|
||||
/// EndModule - Emit all exception information that should come after the
|
||||
/// content.
|
||||
virtual void EndModule();
|
||||
|
||||
/// BeginFunction - Gather pre-function exception information. Assumes being
|
||||
/// emitted immediately after the function entry point.
|
||||
virtual void BeginFunction(const MachineFunction *MF);
|
||||
|
||||
/// EndFunction - Gather and emit post-function exception information.
|
||||
virtual void EndFunction();
|
||||
};
|
||||
|
||||
} // End of namespace llvm
|
||||
|
||||
#endif
|
||||
|
62
lib/CodeGen/AsmPrinter/Win64Exception.cpp
Normal file
62
lib/CodeGen/AsmPrinter/Win64Exception.cpp
Normal file
@ -0,0 +1,62 @@
|
||||
//===-- CodeGen/AsmPrinter/Win64Exception.cpp - Dwarf Exception Impl ------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// This file contains support for writing Win64 exception info into asm files.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "DwarfException.h"
|
||||
#include "llvm/Module.h"
|
||||
#include "llvm/CodeGen/AsmPrinter.h"
|
||||
#include "llvm/CodeGen/MachineModuleInfo.h"
|
||||
#include "llvm/CodeGen/MachineFrameInfo.h"
|
||||
#include "llvm/CodeGen/MachineFunction.h"
|
||||
#include "llvm/CodeGen/MachineLocation.h"
|
||||
#include "llvm/MC/MCAsmInfo.h"
|
||||
#include "llvm/MC/MCContext.h"
|
||||
#include "llvm/MC/MCExpr.h"
|
||||
#include "llvm/MC/MCSection.h"
|
||||
#include "llvm/MC/MCStreamer.h"
|
||||
#include "llvm/MC/MCSymbol.h"
|
||||
#include "llvm/Target/Mangler.h"
|
||||
#include "llvm/Target/TargetData.h"
|
||||
#include "llvm/Target/TargetFrameLowering.h"
|
||||
#include "llvm/Target/TargetLoweringObjectFile.h"
|
||||
#include "llvm/Target/TargetMachine.h"
|
||||
#include "llvm/Target/TargetOptions.h"
|
||||
#include "llvm/Target/TargetRegisterInfo.h"
|
||||
#include "llvm/Support/Dwarf.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
#include "llvm/Support/FormattedStream.h"
|
||||
#include "llvm/ADT/SmallString.h"
|
||||
#include "llvm/ADT/StringExtras.h"
|
||||
#include "llvm/ADT/Twine.h"
|
||||
using namespace llvm;
|
||||
|
||||
Win64Exception::Win64Exception(AsmPrinter *A)
|
||||
: DwarfException(A),
|
||||
shouldEmitPersonality(false), shouldEmitLSDA(false), shouldEmitMoves(false)
|
||||
{}
|
||||
|
||||
Win64Exception::~Win64Exception() {}
|
||||
|
||||
/// EndModule - Emit all exception information that should come after the
|
||||
/// content.
|
||||
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) {
|
||||
}
|
||||
|
||||
/// EndFunction - Gather and emit post-function exception information.
|
||||
///
|
||||
void Win64Exception::EndFunction() {
|
||||
}
|
@ -329,6 +329,7 @@ bool LLVMTargetMachine::addCommonCodeGenPasses(PassManagerBase &PM,
|
||||
// FALLTHROUGH
|
||||
case ExceptionHandling::DwarfCFI:
|
||||
case ExceptionHandling::ARM:
|
||||
case ExceptionHandling::Win64:
|
||||
PM.add(createDwarfEHPass(this));
|
||||
break;
|
||||
case ExceptionHandling::None:
|
||||
|
Loading…
Reference in New Issue
Block a user