diff options
Diffstat (limited to 'clang/lib/CodeGen')
-rw-r--r-- | clang/lib/CodeGen/CGCXXABI.h | 1 | ||||
-rw-r--r-- | clang/lib/CodeGen/CodeGenModule.cpp | 6 | ||||
-rw-r--r-- | clang/lib/CodeGen/ItaniumCXXABI.cpp | 13 |
3 files changed, 19 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CGCXXABI.h b/clang/lib/CodeGen/CGCXXABI.h index 0cebcb1c31b..7df63d38bef 100644 --- a/clang/lib/CodeGen/CGCXXABI.h +++ b/clang/lib/CodeGen/CGCXXABI.h @@ -30,6 +30,7 @@ public: }; /// Creates an instance of a C++ ABI class. +CGCXXABI *CreateARMCXXABI(CodeGenModule &CGM); CGCXXABI *CreateItaniumCXXABI(CodeGenModule &CGM); CGCXXABI *CreateMicrosoftCXXABI(CodeGenModule &CGM); } diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index c0df55b808d..2d9d57393ef 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -91,11 +91,15 @@ void CodeGenModule::createObjCRuntime() { void CodeGenModule::createCXXABI() { switch (Context.Target.getCXXABI()) { - default: + case CXXABI_ARM: + ABI = CreateARMCXXABI(*this); + break; + case CXXABI_Itanium: ABI = CreateItaniumCXXABI(*this); break; case CXXABI_Microsoft: ABI = CreateMicrosoftCXXABI(*this); + break; } } diff --git a/clang/lib/CodeGen/ItaniumCXXABI.cpp b/clang/lib/CodeGen/ItaniumCXXABI.cpp index a6137692fbd..bd396d29d7a 100644 --- a/clang/lib/CodeGen/ItaniumCXXABI.cpp +++ b/clang/lib/CodeGen/ItaniumCXXABI.cpp @@ -12,6 +12,10 @@ // documented at: // http://www.codesourcery.com/public/cxx-abi/abi.html // http://www.codesourcery.com/public/cxx-abi/abi-eh.html +// +// It also supports the closely-related ARM ABI, documented at: +// http://infocenter.arm.com/help/topic/com.arm.doc.ihi0041c/IHI0041C_cppabi.pdf +// //===----------------------------------------------------------------------===// #include "CGCXXABI.h" @@ -31,9 +35,18 @@ public: return MangleCtx; } }; + +class ARMCXXABI : public ItaniumCXXABI { +public: + ARMCXXABI(CodeGen::CodeGenModule &CGM) : ItaniumCXXABI(CGM) {} +}; } CodeGen::CGCXXABI *CodeGen::CreateItaniumCXXABI(CodeGenModule &CGM) { return new ItaniumCXXABI(CGM); } +CodeGen::CGCXXABI *CodeGen::CreateARMCXXABI(CodeGenModule &CGM) { + return new ARMCXXABI(CGM); +} + |