Support Thumb mode in ARMABCCompilerDriver.
Change-Id: I6532e91bfe248b2b8769f83ef21854ed3bea3fd0
diff --git a/lib/AndroidBitcode/ABCCompilerDriver.cpp b/lib/AndroidBitcode/ABCCompilerDriver.cpp
index 15cc6e2..5be45ec 100644
--- a/lib/AndroidBitcode/ABCCompilerDriver.cpp
+++ b/lib/AndroidBitcode/ABCCompilerDriver.cpp
@@ -229,9 +229,11 @@
switch (llvm::Triple::getArchTypeForLLVMName(target->getName())) {
#if defined(PROVIDE_ARM_CODEGEN)
- case llvm::Triple::arm:
+ case llvm::Triple::arm: {
+ return new ARMABCCompilerDriver(/* pInThumbMode */false);
+ }
case llvm::Triple::thumb: {
- return new ARMABCCompilerDriver();
+ return new ARMABCCompilerDriver(/* pInThumbMode */true);
}
#endif
#if defined(PROVIDE_MIPS_CODEGEN)
diff --git a/lib/AndroidBitcode/ARM/ARMABCCompilerDriver.cpp b/lib/AndroidBitcode/ARM/ARMABCCompilerDriver.cpp
index 4e8ca03..f019bde 100644
--- a/lib/AndroidBitcode/ARM/ARMABCCompilerDriver.cpp
+++ b/lib/AndroidBitcode/ARM/ARMABCCompilerDriver.cpp
@@ -22,7 +22,11 @@
namespace bcc {
CompilerConfig *ARMABCCompilerDriver::createCompilerConfig() const {
- return new (std::nothrow) ARMCompilerConfig();
+ if (mInThumbMode) {
+ return new (std::nothrow) ThumbCompilerConfig();
+ } else {
+ return new (std::nothrow) ARMCompilerConfig();
+ }
}
LinkerConfig *ARMABCCompilerDriver::createLinkerConfig() const {
diff --git a/lib/AndroidBitcode/ARM/ARMABCCompilerDriver.h b/lib/AndroidBitcode/ARM/ARMABCCompilerDriver.h
index a34a4d9..97e5f8d 100644
--- a/lib/AndroidBitcode/ARM/ARMABCCompilerDriver.h
+++ b/lib/AndroidBitcode/ARM/ARMABCCompilerDriver.h
@@ -22,11 +22,20 @@
namespace bcc {
class ARMABCCompilerDriver : public ABCCompilerDriver {
+private:
+ bool mInThumbMode;
+
public:
- ARMABCCompilerDriver() : ABCCompilerDriver() { }
+ ARMABCCompilerDriver(bool pInThumbMode)
+ : ABCCompilerDriver(), mInThumbMode(pInThumbMode) { }
virtual ~ARMABCCompilerDriver() { }
+public:
+ inline bool IsInThumbMode() const {
+ return mInThumbMode;
+ }
+
private:
virtual CompilerConfig *createCompilerConfig() const;
virtual LinkerConfig *createLinkerConfig() const;