blob: bd396d29d7a582ef8b9e245073aaa0c534f619c8 [file] [log] [blame]
Charles Davis4e786dd2010-05-25 19:52:27 +00001//===------- ItaniumCXXABI.cpp - Emit LLVM Code from ASTs for a Module ----===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This provides C++ code generation targetting the Itanium C++ ABI. The class
11// in this file generates structures that follow the Itanium C++ ABI, which is
12// documented at:
13// http://www.codesourcery.com/public/cxx-abi/abi.html
14// http://www.codesourcery.com/public/cxx-abi/abi-eh.html
John McCall86353412010-08-21 22:46:04 +000015//
16// It also supports the closely-related ARM ABI, documented at:
17// http://infocenter.arm.com/help/topic/com.arm.doc.ihi0041c/IHI0041C_cppabi.pdf
18//
Charles Davis4e786dd2010-05-25 19:52:27 +000019//===----------------------------------------------------------------------===//
20
21#include "CGCXXABI.h"
22#include "CodeGenModule.h"
23#include "Mangle.h"
24
25using namespace clang;
26
27namespace {
Charles Davis53c59df2010-08-16 03:33:14 +000028class ItaniumCXXABI : public CodeGen::CGCXXABI {
Charles Davis4e786dd2010-05-25 19:52:27 +000029 CodeGen::MangleContext MangleCtx;
30public:
31 ItaniumCXXABI(CodeGen::CodeGenModule &CGM) :
32 MangleCtx(CGM.getContext(), CGM.getDiags()) { }
33
34 CodeGen::MangleContext &getMangleContext() {
35 return MangleCtx;
36 }
37};
John McCall86353412010-08-21 22:46:04 +000038
39class ARMCXXABI : public ItaniumCXXABI {
40public:
41 ARMCXXABI(CodeGen::CodeGenModule &CGM) : ItaniumCXXABI(CGM) {}
42};
Charles Davis4e786dd2010-05-25 19:52:27 +000043}
44
Charles Davis53c59df2010-08-16 03:33:14 +000045CodeGen::CGCXXABI *CodeGen::CreateItaniumCXXABI(CodeGenModule &CGM) {
Charles Davis4e786dd2010-05-25 19:52:27 +000046 return new ItaniumCXXABI(CGM);
47}
48
John McCall86353412010-08-21 22:46:04 +000049CodeGen::CGCXXABI *CodeGen::CreateARMCXXABI(CodeGenModule &CGM) {
50 return new ARMCXXABI(CGM);
51}
52