summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSaleem Abdulrasool <compnerd@compnerd.org>2014-06-11 04:19:25 +0000
committerSaleem Abdulrasool <compnerd@compnerd.org>2014-06-11 04:19:25 +0000
commitfaa29bd5297298a7efb671e96609666c2e753d70 (patch)
treeb55e85233c35d207f2866c362d02dea5eccba1aa
parentbfa9be26a741c8a43e84216d5f8e6f8a427ebd86 (diff)
downloadbcm5719-llvm-faa29bd5297298a7efb671e96609666c2e753d70.tar.gz
bcm5719-llvm-faa29bd5297298a7efb671e96609666c2e753d70.zip
MC: add enumeration of WinEH data encoding
Most Windows platforms use auxiliary data for unwinding. This information is stored in the .pdata section. The encoding format for the data differs between architectures and Windows variants. Windows MIPS and Alpha use identical formats; Alpha64 is the same with different widths. Windows x86_64 and Itanium share the representation. All Windows CE entries are identical irrespective of the architecture. ARMv7 (Windows [NT] on ARM) has its own format. This enumeration will become the differentiator once the windows EH emission infrastructure is generalised, allowing us to emit the necessary unwinding information for Windows on ARM. llvm-svn: 210634
-rw-r--r--llvm/include/llvm/MC/MCAsmInfo.h20
-rw-r--r--llvm/lib/MC/MCAsmInfo.cpp3
2 files changed, 21 insertions, 2 deletions
diff --git a/llvm/include/llvm/MC/MCAsmInfo.h b/llvm/include/llvm/MC/MCAsmInfo.h
index a091bbd85d8..55dc40afe5a 100644
--- a/llvm/include/llvm/MC/MCAsmInfo.h
+++ b/llvm/include/llvm/MC/MCAsmInfo.h
@@ -29,6 +29,18 @@ class MCStreamer;
class MCSymbol;
class MCContext;
+namespace WinEH {
+enum class EncodingType {
+ ET_Invalid, /// Invalid
+ ET_Alpha, /// Windows Alpha
+ ET_Alpha64, /// Windows AXP64
+ ET_ARM, /// Windows NT (Windows on ARM)
+ ET_CE, /// Windows CE ARM, PowerPC, SH3, SH4
+ ET_Itanium, /// Windows x64, Windows Itanium (IA-64)
+ ET_MIPS = ET_Alpha,
+};
+}
+
namespace ExceptionHandling {
enum ExceptionsType { None, DwarfCFI, SjLj, ARM, Win64 };
}
@@ -286,9 +298,12 @@ protected:
/// false.
bool SupportsDebugInformation;
- /// True if target supports exception handling. Defaults to None
+ /// Exception handling format for the target. Defaults to None.
ExceptionHandling::ExceptionsType ExceptionsType;
+ /// Windows exception handling data (.pdata) encoding. Defaults to Invalid.
+ WinEH::EncodingType WinEHEncodingType;
+
/// True if Dwarf2 output generally uses relocations for references to other
/// .debug_* sections.
bool DwarfUsesRelocationsAcrossSections;
@@ -460,6 +475,9 @@ public:
ExceptionHandling::ExceptionsType getExceptionHandlingType() const {
return ExceptionsType;
}
+ WinEH::EncodingType getWinEHEncodingType() const {
+ return WinEHEncodingType;
+ }
bool isExceptionHandlingDwarf() const {
return (ExceptionsType == ExceptionHandling::DwarfCFI ||
ExceptionsType == ExceptionHandling::ARM ||
diff --git a/llvm/lib/MC/MCAsmInfo.cpp b/llvm/lib/MC/MCAsmInfo.cpp
index c0777a6e98c..29105834499 100644
--- a/llvm/lib/MC/MCAsmInfo.cpp
+++ b/llvm/lib/MC/MCAsmInfo.cpp
@@ -82,6 +82,7 @@ MCAsmInfo::MCAsmInfo() {
HasLEB128 = false;
SupportsDebugInformation = false;
ExceptionsType = ExceptionHandling::None;
+ WinEHEncodingType = WinEH::EncodingType::ET_Invalid;
DwarfUsesRelocationsAcrossSections = true;
DwarfFDESymbolsUseAbsDiff = false;
DwarfRegNumForCFI = false;
@@ -99,7 +100,7 @@ MCAsmInfo::MCAsmInfo() {
// - MCAsmInfoDarwin is handling this case
// - Generic_GCC toolchains enable the integrated assembler on a per
// architecture basis.
- // - The target subclasses for AArch64, ARM, and X86 handle these cases
+ // - The target subclasses for AArch64, ARM, and X86 handle these cases
UseIntegratedAssembler = false;
CompressDebugSections = false;
OpenPOWER on IntegriCloud