clang 20.0.0 (based on r547379) from build 12806354. Bug: http://b/379133546 Test: N/A Change-Id: I2eb8938af55d809de674be63cb30cf27e801862b Upstream-Commit: ad834e67b1105d15ef907f6255d4c96e8e733f57
130 lines
4.9 KiB
Modula-2
130 lines
4.9 KiB
Modula-2
//===--- TargetCXXABI.def - Target C++ ABI database --------------- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file defines the various C++ ABI kinds used on different platforms.
|
|
// Users of this file must define the CXXABI macro to make use of this
|
|
// information.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef CXXABI
|
|
#error Define the CXXABI macro to handle C++ ABI kinds.
|
|
#endif
|
|
|
|
#ifndef ITANIUM_CXXABI
|
|
#define ITANIUM_CXXABI(Name, Str) CXXABI(Name, Str)
|
|
#endif
|
|
|
|
#ifndef MICROSOFT_CXXABI
|
|
#define MICROSOFT_CXXABI(Name, Str) CXXABI(Name, Str)
|
|
#endif
|
|
|
|
/// The generic Itanium ABI is the standard ABI of most open-source
|
|
/// and Unix-like platforms. It is the primary ABI targeted by
|
|
/// many compilers, including Clang and GCC.
|
|
///
|
|
/// It is documented here:
|
|
/// http://www.codesourcery.com/public/cxx-abi/
|
|
ITANIUM_CXXABI(GenericItanium, "itanium")
|
|
|
|
/// The generic ARM ABI is a modified version of the Itanium ABI
|
|
/// proposed by ARM for use on ARM-based platforms.
|
|
///
|
|
/// These changes include:
|
|
/// - the representation of member function pointers is adjusted
|
|
/// to not conflict with the 'thumb' bit of ARM function pointers;
|
|
/// - constructors and destructors return 'this';
|
|
/// - guard variables are smaller;
|
|
/// - inline functions are never key functions;
|
|
/// - array cookies have a slightly different layout;
|
|
/// - additional convenience functions are specified;
|
|
/// - and more!
|
|
///
|
|
/// It is documented here:
|
|
/// http://infocenter.arm.com
|
|
/// /help/topic/com.arm.doc.ihi0041c/IHI0041C_cppabi.pdf
|
|
ITANIUM_CXXABI(GenericARM, "arm")
|
|
|
|
/// The iOS ABI is a partial implementation of the ARM ABI.
|
|
/// Several of the features of the ARM ABI were not fully implemented
|
|
/// in the compilers that iOS was launched with.
|
|
///
|
|
/// Essentially, the iOS ABI includes the ARM changes to:
|
|
/// - member function pointers,
|
|
/// - guard variables,
|
|
/// - array cookies, and
|
|
/// - constructor/destructor signatures.
|
|
ITANIUM_CXXABI(iOS, "ios")
|
|
|
|
/// The iOS 64-bit and macOS 64-bit ARM ABI follows ARM's published 64-bit
|
|
/// ABI more closely, but we don't guarantee to follow it perfectly.
|
|
///
|
|
/// It is documented here:
|
|
/// http://infocenter.arm.com
|
|
/// /help/topic/com.arm.doc.ihi0059a/IHI0059A_cppabi64.pdf
|
|
ITANIUM_CXXABI(AppleARM64, "applearm64")
|
|
|
|
/// WatchOS is a modernisation of the iOS ABI, which roughly means it's
|
|
/// the iOS64 ABI ported to 32-bits. The primary difference from iOS64 is
|
|
/// that RTTI objects must still be unique at the moment.
|
|
ITANIUM_CXXABI(WatchOS, "watchos")
|
|
|
|
/// The generic AArch64 ABI is also a modified version of the Itanium ABI,
|
|
/// but it has fewer divergences than the 32-bit ARM ABI.
|
|
///
|
|
/// The relevant changes from the generic ABI in this case are:
|
|
/// - representation of member function pointers adjusted as in ARM.
|
|
/// - guard variables are smaller.
|
|
ITANIUM_CXXABI(GenericAArch64, "aarch64")
|
|
|
|
/// The generic Mips ABI is a modified version of the Itanium ABI.
|
|
///
|
|
/// At the moment, only change from the generic ABI in this case is:
|
|
/// - representation of member function pointers adjusted as in ARM.
|
|
ITANIUM_CXXABI(GenericMIPS, "mips")
|
|
|
|
/// The WebAssembly ABI is a modified version of the Itanium ABI.
|
|
///
|
|
/// The changes from the Itanium ABI are:
|
|
/// - representation of member function pointers is adjusted, as in ARM;
|
|
/// - member functions are not specially aligned;
|
|
/// - constructors and destructors return 'this', as in ARM;
|
|
/// - guard variables are 32-bit on wasm32, as in ARM;
|
|
/// - unused bits of guard variables are reserved, as in ARM;
|
|
/// - inline functions are never key functions, as in ARM;
|
|
/// - C++11 POD rules are used for tail padding, as in iOS64.
|
|
///
|
|
/// TODO: At present the WebAssembly ABI is not considered stable, so none
|
|
/// of these details is necessarily final yet.
|
|
ITANIUM_CXXABI(WebAssembly, "webassembly")
|
|
|
|
/// The Fuchsia ABI is a modified version of the Itanium ABI.
|
|
///
|
|
/// The relevant changes from the Itanium ABI are:
|
|
/// - constructors and destructors return 'this', as in ARM.
|
|
ITANIUM_CXXABI(Fuchsia, "fuchsia")
|
|
|
|
/// The XL ABI is the ABI used by IBM xlclang compiler and is a modified
|
|
/// version of the Itanium ABI.
|
|
///
|
|
/// The relevant changes from the Itanium ABI are:
|
|
/// - static initialization is adjusted to use sinit and sterm functions;
|
|
ITANIUM_CXXABI(XL, "xl")
|
|
|
|
/// The Microsoft ABI is the ABI used by Microsoft Visual Studio (and
|
|
/// compatible compilers).
|
|
///
|
|
/// FIXME: should this be split into Win32 and Win64 variants?
|
|
///
|
|
/// Only scattered and incomplete official documentation exists.
|
|
MICROSOFT_CXXABI(Microsoft, "microsoft")
|
|
|
|
#undef CXXABI
|
|
#undef ITANIUM_CXXABI
|
|
#undef MICROSOFT_CXXABI
|