13 #ifndef LLVM_CLANG_LIB_BASIC_TARGETS_OSTARGETS_H 14 #define LLVM_CLANG_LIB_BASIC_TARGETS_OSTARGETS_H 17 #include "llvm/MC/MCSectionMachO.h" 22 template <
typename TgtInfo>
25 virtual void getOSDefines(
const LangOptions &Opts,
const llvm::Triple &Triple,
34 TgtInfo::getTargetDefines(Opts, Builder);
35 getOSDefines(Opts, TgtInfo::getTriple(), Builder);
40 template <
typename Target>
49 Builder.
defineMacro(
"__STDC_ISO_10646__",
"201206L");
60 template <
typename Target>
76 const llvm::Triple &Triple, StringRef &PlatformName,
77 VersionTuple &PlatformMinVersion);
79 template <
typename Target>
85 this->PlatformMinVersion);
93 this->TLSSupported =
false;
95 if (Triple.isMacOSX())
96 this->TLSSupported = !Triple.isMacOSXVersionLT(10, 7);
97 else if (Triple.isiOS()) {
100 if (Triple.isArch64Bit())
101 this->TLSSupported = !Triple.isOSVersionLT(8);
102 else if (Triple.isArch32Bit()) {
103 if (!Triple.isSimulatorEnvironment())
104 this->TLSSupported = !Triple.isOSVersionLT(9);
106 this->TLSSupported = !Triple.isOSVersionLT(10);
108 }
else if (Triple.isWatchOS()) {
109 if (!Triple.isSimulatorEnvironment())
110 this->TLSSupported = !Triple.isOSVersionLT(2);
112 this->TLSSupported = !Triple.isOSVersionLT(3);
115 this->MCountName =
"\01mcount";
120 StringRef Segment, Section;
121 unsigned TAA, StubSize;
123 return llvm::MCSectionMachO::ParseSectionSpecifier(SR, Segment, Section,
124 TAA, HasTAA, StubSize);
129 return "__TEXT,__StaticInit,regular,pure_instructions";
138 bool IsSigned)
const final {
140 return BitWidth == 64
148 template <
typename Target>
156 Builder.
defineMacro(
"__DragonFly_cc_version",
"100001");
166 switch (Triple.getArch()) {
168 case llvm::Triple::x86:
169 case llvm::Triple::x86_64:
170 this->MCountName =
".mcount";
176 #ifndef FREEBSD_CC_VERSION 177 #define FREEBSD_CC_VERSION 0U 181 template <
typename Target>
188 unsigned Release = Triple.getOSMajorVersion();
193 CCVersion = Release * 100000U + 1U;
195 Builder.
defineMacro(
"__FreeBSD__", Twine(Release));
196 Builder.
defineMacro(
"__FreeBSD_cc_version", Twine(CCVersion));
210 Builder.
defineMacro(
"__STDC_MB_MIGHT_NEQ_WC__",
"1");
216 switch (Triple.getArch()) {
218 case llvm::Triple::x86:
219 case llvm::Triple::x86_64:
220 this->MCountName =
".mcount";
222 case llvm::Triple::mips:
223 case llvm::Triple::mipsel:
224 case llvm::Triple::ppc:
225 case llvm::Triple::ppc64:
226 case llvm::Triple::ppc64le:
227 this->MCountName =
"_mcount";
229 case llvm::Triple::arm:
230 this->MCountName =
"__mcount";
237 template <
typename Target>
248 if (Opts.POSIXThreads)
260 template <
typename Target>
269 if (this->HasFloat128)
280 this->TLSSupported =
false;
281 switch (Triple.getArch()) {
284 case llvm::Triple::x86:
285 case llvm::Triple::x86_64:
286 this->HasFloat128 =
true;
293 template <
typename Target>
305 if (Opts.POSIXThreads)
316 template <
typename Target>
340 template <
typename Target>
349 if (Triple.isAndroid()) {
351 unsigned Maj, Min, Rev;
352 Triple.getEnvironmentVersion(Maj, Min, Rev);
353 this->PlatformName =
"android";
354 this->PlatformMinVersion = VersionTuple(Maj, Min, Rev);
356 Builder.
defineMacro(
"__ANDROID_API__", Twine(Maj));
360 if (Opts.POSIXThreads)
364 if (this->HasFloat128)
373 switch (Triple.getArch()) {
376 case llvm::Triple::mips:
377 case llvm::Triple::mipsel:
378 case llvm::Triple::mips64:
379 case llvm::Triple::mips64el:
380 case llvm::Triple::ppc:
381 case llvm::Triple::ppc64:
382 case llvm::Triple::ppc64le:
383 this->MCountName =
"_mcount";
385 case llvm::Triple::x86:
386 case llvm::Triple::x86_64:
387 this->HasFloat128 =
true;
393 return ".text.startup";
398 template <
typename Target>
407 if (Opts.POSIXThreads)
414 this->MCountName =
"__mcount";
419 template <
typename Target>
429 if (Opts.POSIXThreads)
431 if (this->HasFloat128)
438 switch (Triple.getArch()) {
439 case llvm::Triple::x86:
440 case llvm::Triple::x86_64:
441 this->HasFloat128 =
true;
444 this->MCountName =
"__mcount";
446 case llvm::Triple::mips64:
447 case llvm::Triple::mips64el:
448 case llvm::Triple::ppc:
449 case llvm::Triple::sparcv9:
450 this->MCountName =
"_mcount";
457 template <
typename Target>
474 template <
typename Target>
492 this->LongWidth = this->LongAlign = 32;
493 this->PointerWidth = this->PointerAlign = 32;
497 this->resetDataLayout(
"E-m:e-p:32:32-i64:64-n32:64");
501 template <
typename Target>
507 Builder.
defineMacro(
"__FreeBSD_cc_version",
"900001");
520 this->MaxTLSAlign = 256;
524 this->UseExplicitBitFieldAlignment =
false;
526 switch (Triple.getArch()) {
528 case llvm::Triple::x86_64:
529 this->MCountName =
".mcount";
530 this->NewAlign = 256;
537 template <
typename Target>
553 switch (Triple.getArch()) {
555 case llvm::Triple::x86:
558 case llvm::Triple::mips:
559 case llvm::Triple::mipsel:
560 case llvm::Triple::ppc:
561 case llvm::Triple::ppc64:
562 case llvm::Triple::ppc64le:
565 case llvm::Triple::arm:
573 template <
typename Target>
596 if (Opts.POSIXThreads)
598 if (this->HasFloat128)
606 switch (Triple.getArch()) {
609 case llvm::Triple::x86:
610 case llvm::Triple::x86_64:
611 this->HasFloat128 =
true;
618 template <
typename Target>
624 if (Triple.isArch64Bit())
626 if (Triple.isWindowsGNUEnvironment())
632 if (Opts.CPlusPlus) {
636 if (Opts.CXXExceptions)
643 if (!Opts.CharIsSigned)
648 if (Opts.POSIXThreads)
651 if (Opts.MSCompatibilityVersion) {
653 Twine(Opts.MSCompatibilityVersion / 100000));
654 Builder.
defineMacro(
"_MSC_FULL_VER", Twine(Opts.MSCompatibilityVersion));
659 Builder.
defineMacro(
"_HAS_CHAR16_T_LANGUAGE_SUPPORT", Twine(1));
662 if (Opts.CPlusPlus2a)
664 else if (Opts.CPlusPlus17)
666 else if (Opts.CPlusPlus14)
671 if (Opts.MicrosoftExt) {
674 if (Opts.CPlusPlus11) {
675 Builder.
defineMacro(
"_RVALUE_REFERENCES_V2_SUPPORTED");
676 Builder.
defineMacro(
"_RVALUE_REFERENCES_SUPPORTED");
692 template <
typename Target>
697 if (Opts.POSIXThreads)
710 this->LongAlign = 32;
711 this->LongWidth = 32;
712 this->PointerAlign = 32;
713 this->PointerWidth = 32;
716 this->DoubleAlign = 64;
717 this->LongDoubleWidth = 64;
718 this->LongDoubleAlign = 64;
719 this->LongLongWidth = 64;
720 this->LongLongAlign = 64;
725 this->LongDoubleFormat = &llvm::APFloat::IEEEdouble();
726 if (Triple.getArch() == llvm::Triple::arm) {
728 }
else if (Triple.getArch() == llvm::Triple::x86) {
729 this->resetDataLayout(
"e-m:e-p:32:32-i64:64-n8:16:32-S128");
730 }
else if (Triple.getArch() == llvm::Triple::x86_64) {
731 this->resetDataLayout(
"e-m:e-p:32:32-i64:64-n8:16:32:64-S128");
732 }
else if (Triple.getArch() == llvm::Triple::mipsel) {
735 assert(Triple.getArch() == llvm::Triple::le32);
736 this->resetDataLayout(
"e-p:32:32-i64:64");
742 template <
typename Target>
749 if (Opts.POSIXThreads)
759 this->MCountName =
"__mcount";
764 template <
typename Target>
771 if (Opts.POSIXThreads)
782 this->MCountName =
"__mcount";
788 template <
typename Target>
791 void getOSDefines(
const LangOptions &Opts,
const llvm::Triple &Triple,
804 #endif // LLVM_CLANG_LIB_BASIC_TARGETS_OSTARGETS_H PSPTargetInfo(const llvm::Triple &Triple)
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
void DefineStd(MacroBuilder &Builder, StringRef MacroName, const LangOptions &Opts)
DefineStd - Define a macro name and standard variants.
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
bool isCompatibleWithMSVC(MSVCMajorVersion MajorVersion) const
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
WindowsTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
virtual IntType getLeastIntTypeByWidth(unsigned BitWidth, bool IsSigned) const
Return the smallest integer type with at least the specified width.
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
const char * getStaticInitSectionSpecifier() const override
Options for controlling the target.
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
WebAssemblyOSTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
LinuxTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const
bool hasProtectedVisibility() const override
Darwin does not support protected visibility.
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
RTEMSTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
AnanasTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
NaClTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
const char * getStaticInitSectionSpecifier() const override
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
void addMinGWDefines(const llvm::Triple &Triple, const LangOptions &Opts, MacroBuilder &Builder)
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
std::string isValidSectionSpecifier(StringRef SR) const override
KFreeBSDTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
SolarisTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void getVisualStudioDefines(const LangOptions &Opts, MacroBuilder &Builder) const
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
DarwinTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
HaikuTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
DragonFlyBSDTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
FreeBSDTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void getDarwinDefines(MacroBuilder &Builder, const LangOptions &Opts, const llvm::Triple &Triple, StringRef &PlatformName, VersionTuple &PlatformMinVersion)
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
#define FREEBSD_CC_VERSION
FuchsiaTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
CloudABITargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
The WebAssembly ABI is a modified version of the Itanium ABI.
IntType
===-— Target Data Type Query Methods ----------------------------—===//
Dataflow Directional Tag Classes.
PS4OSTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
HurdTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
NetBSDTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
MinixTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
OSTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void defineMacro(const Twine &Name, const Twine &Value="1")
Append a #define line for macro of the form "\#define Name Value\n".
OpenBSDTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
WASITargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
PS3PPUTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
TargetInfo::IntType getLeastIntTypeByWidth(unsigned BitWidth, bool IsSigned) const final