summaryrefslogtreecommitdiff
path: root/lib/Target
diff options
context:
space:
mode:
authorRenato Golin <renato.golin@linaro.org>2014-01-29 11:50:56 +0000
committerRenato Golin <renato.golin@linaro.org>2014-01-29 11:50:56 +0000
commit3fca788967bb3fd37675bfb177d38ff8e8e2c920 (patch)
treec785080f963fc374c97b5f65719c4d0cc3899487 /lib/Target
parentb04ddad8eacf727a79524b53d350e9c1dd758084 (diff)
downloadllvm-3fca788967bb3fd37675bfb177d38ff8e8e2c920.tar.gz
llvm-3fca788967bb3fd37675bfb177d38ff8e8e2c920.tar.bz2
llvm-3fca788967bb3fd37675bfb177d38ff8e8e2c920.tar.xz
Enable EHABI by default
After all hard work to implement the EHABI and with the test-suite passing, it's time to turn it on by default and allow users to disable it as a work-around while we fix the eventual bugs that show up. This commit also remove the -arm-enable-ehabi-descriptors, since we want the tables to be printed every time the EHABI is turned on for non-Darwin ARM targets. Although MCJIT EHABI is not working yet (needs linking with the right libraries), this commit also fixes some relocations on MCJIT regarding the EH tables/lib calls, and update some tests to avoid using EH tables when none are needed. The EH tests in the test-suite that were previously disabled on ARM now pass with these changes, so a follow-up commit on the test-suite will re-enable them. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200388 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target')
-rw-r--r--lib/Target/ARM/ARMAsmPrinter.cpp5
-rw-r--r--lib/Target/ARM/ARMSubtarget.h10
-rw-r--r--lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.cpp8
3 files changed, 18 insertions, 5 deletions
diff --git a/lib/Target/ARM/ARMAsmPrinter.cpp b/lib/Target/ARM/ARMAsmPrinter.cpp
index 9c40ac8a7a..46bd34fe39 100644
--- a/lib/Target/ARM/ARMAsmPrinter.cpp
+++ b/lib/Target/ARM/ARMAsmPrinter.cpp
@@ -1106,7 +1106,7 @@ void ARMAsmPrinter::EmitUnwindingInstruction(const MachineInstr *MI) {
}
}
-extern cl::opt<bool> EnableARMEHABI;
+extern cl::opt<bool> DisableARMEHABI;
// Simple pseudo-instructions have their lowering (with expansion to real
// instructions) auto-generated.
@@ -1122,7 +1122,8 @@ void ARMAsmPrinter::EmitInstruction(const MachineInstr *MI) {
}
// Emit unwinding stuff for frame-related instructions
- if (EnableARMEHABI && MI->getFlag(MachineInstr::FrameSetup))
+ if (Subtarget->isTargetEHABICompatible() && !DisableARMEHABI &&
+ MI->getFlag(MachineInstr::FrameSetup))
EmitUnwindingInstruction(MI);
// Do any auto-generated pseudo lowerings.
diff --git a/lib/Target/ARM/ARMSubtarget.h b/lib/Target/ARM/ARMSubtarget.h
index 3a9f940381..200f198d27 100644
--- a/lib/Target/ARM/ARMSubtarget.h
+++ b/lib/Target/ARM/ARMSubtarget.h
@@ -328,6 +328,16 @@ public:
!isTargetDarwin();
}
+ // ARM Targets that support EHABI exception handling standard
+ // Darwin uses SjLj. Other targets might need more checks.
+ bool isTargetEHABICompatible() const {
+ return (TargetTriple.getEnvironment() == Triple::EABI ||
+ TargetTriple.getEnvironment() == Triple::GNUEABI ||
+ TargetTriple.getEnvironment() == Triple::EABIHF ||
+ TargetTriple.getEnvironment() == Triple::GNUEABIHF) &&
+ !isTargetDarwin();
+ }
+
bool isTargetHardFloat() const {
return TargetTriple.getEnvironment() == Triple::GNUEABIHF ||
TargetTriple.getEnvironment() == Triple::EABIHF;
diff --git a/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.cpp b/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.cpp
index b2a71a8706..5cb6c0b44e 100644
--- a/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.cpp
+++ b/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.cpp
@@ -16,9 +16,11 @@
using namespace llvm;
+// ARM EHABI is experimental but the quality is good enough
+// to be turned on by default on non-Darwin ARM targets.
cl::opt<bool>
-EnableARMEHABI("arm-enable-ehabi", cl::Hidden,
- cl::desc("Generate ARM EHABI tables"),
+DisableARMEHABI("arm-disable-ehabi", cl::Hidden,
+ cl::desc("Disable ARM experimental exception handling"),
cl::init(false));
@@ -52,7 +54,7 @@ ARMELFMCAsmInfo::ARMELFMCAsmInfo() {
SupportsDebugInformation = true;
// Exceptions handling
- if (EnableARMEHABI)
+ if (!DisableARMEHABI)
ExceptionsType = ExceptionHandling::ARM;
// foo(plt) instead of foo@plt