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,
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()) {
99 if (Triple.getArch() == llvm::Triple::x86_64 ||
100 Triple.getArch() == llvm::Triple::aarch64)
101 this->TLSSupported = !Triple.isOSVersionLT(8);
102 else if (Triple.getArch() == llvm::Triple::x86 ||
103 Triple.getArch() == llvm::Triple::arm ||
104 Triple.getArch() == llvm::Triple::thumb)
105 this->TLSSupported = !Triple.isOSVersionLT(9);
106 }
else if (Triple.isWatchOS())
107 this->TLSSupported = !Triple.isOSVersionLT(2);
109 this->MCountName =
"\01mcount";
114 StringRef Segment, Section;
115 unsigned TAA, StubSize;
117 return llvm::MCSectionMachO::ParseSectionSpecifier(SR, Segment, Section,
118 TAA, HasTAA, StubSize);
123 return "__TEXT,__StaticInit,regular,pure_instructions";
133 template <
typename Target>
141 Builder.
defineMacro(
"__DragonFly_cc_version",
"100001");
151 switch (Triple.getArch()) {
153 case llvm::Triple::x86:
154 case llvm::Triple::x86_64:
155 this->MCountName =
".mcount";
161 #ifndef FREEBSD_CC_VERSION 162 #define FREEBSD_CC_VERSION 0U 166 template <
typename Target>
173 unsigned Release = Triple.getOSMajorVersion();
178 CCVersion = Release * 100000U + 1U;
180 Builder.
defineMacro(
"__FreeBSD__", Twine(Release));
181 Builder.
defineMacro(
"__FreeBSD_cc_version", Twine(CCVersion));
195 Builder.
defineMacro(
"__STDC_MB_MIGHT_NEQ_WC__",
"1");
201 switch (Triple.getArch()) {
203 case llvm::Triple::x86:
204 case llvm::Triple::x86_64:
205 this->MCountName =
".mcount";
207 case llvm::Triple::mips:
208 case llvm::Triple::mipsel:
209 case llvm::Triple::ppc:
210 case llvm::Triple::ppc64:
211 case llvm::Triple::ppc64le:
212 this->MCountName =
"_mcount";
214 case llvm::Triple::arm:
215 this->MCountName =
"__mcount";
222 template <
typename Target>
233 if (Opts.POSIXThreads)
245 template <
typename Target>
263 this->TLSSupported =
false;
268 template <
typename Target>
292 template <
typename Target>
302 if (Triple.isAndroid()) {
304 unsigned Maj, Min, Rev;
305 Triple.getEnvironmentVersion(Maj, Min, Rev);
306 this->PlatformName =
"android";
309 Builder.
defineMacro(
"__ANDROID_API__", Twine(Maj));
311 if (Opts.POSIXThreads)
315 if (this->HasFloat128)
324 switch (Triple.getArch()) {
327 case llvm::Triple::mips:
328 case llvm::Triple::mipsel:
329 case llvm::Triple::mips64:
330 case llvm::Triple::mips64el:
331 case llvm::Triple::ppc:
332 case llvm::Triple::ppc64:
333 case llvm::Triple::ppc64le:
334 this->MCountName =
"_mcount";
336 case llvm::Triple::x86:
337 case llvm::Triple::x86_64:
338 case llvm::Triple::systemz:
339 this->HasFloat128 =
true;
345 return ".text.startup";
350 template <
typename Target>
359 if (Opts.POSIXThreads)
366 this->MCountName =
"_mcount";
371 template <
typename Target>
381 if (Opts.POSIXThreads)
383 if (this->HasFloat128)
390 switch (Triple.getArch()) {
391 case llvm::Triple::x86:
392 case llvm::Triple::x86_64:
393 this->HasFloat128 =
true;
396 this->MCountName =
"__mcount";
398 case llvm::Triple::mips64:
399 case llvm::Triple::mips64el:
400 case llvm::Triple::ppc:
401 case llvm::Triple::sparcv9:
402 this->MCountName =
"_mcount";
409 template <
typename Target>
426 template <
typename Target>
444 this->LongWidth = this->LongAlign = 32;
445 this->PointerWidth = this->PointerAlign = 32;
449 this->resetDataLayout(
"E-m:e-p:32:32-i64:64-n32:64");
453 template <
typename Target>
459 Builder.
defineMacro(
"__FreeBSD_cc_version",
"900001");
472 this->MaxTLSAlign = 256;
476 this->UseExplicitBitFieldAlignment =
false;
478 switch (Triple.getArch()) {
480 case llvm::Triple::x86_64:
481 this->MCountName =
".mcount";
488 template <
typename Target>
504 switch (Triple.getArch()) {
506 case llvm::Triple::x86:
509 case llvm::Triple::mips:
510 case llvm::Triple::mipsel:
511 case llvm::Triple::ppc:
512 case llvm::Triple::ppc64:
513 case llvm::Triple::ppc64le:
516 case llvm::Triple::arm:
524 template <
typename Target>
558 template <
typename Target>
564 if (Triple.isArch64Bit())
566 if (Triple.isWindowsGNUEnvironment())
572 if (Opts.CPlusPlus) {
576 if (Opts.CXXExceptions)
583 if (!Opts.CharIsSigned)
588 if (Opts.POSIXThreads)
591 if (Opts.MSCompatibilityVersion) {
593 Twine(Opts.MSCompatibilityVersion / 100000));
594 Builder.
defineMacro(
"_MSC_FULL_VER", Twine(Opts.MSCompatibilityVersion));
599 Builder.
defineMacro(
"_HAS_CHAR16_T_LANGUAGE_SUPPORT", Twine(1));
602 if (Opts.CPlusPlus17)
604 else if (Opts.CPlusPlus14)
609 if (Opts.MicrosoftExt) {
612 if (Opts.CPlusPlus11) {
613 Builder.
defineMacro(
"_RVALUE_REFERENCES_V2_SUPPORTED");
614 Builder.
defineMacro(
"_RVALUE_REFERENCES_SUPPORTED");
629 template <
typename Target>
634 if (Opts.POSIXThreads)
647 this->LongAlign = 32;
648 this->LongWidth = 32;
649 this->PointerAlign = 32;
650 this->PointerWidth = 32;
653 this->DoubleAlign = 64;
654 this->LongDoubleWidth = 64;
655 this->LongDoubleAlign = 64;
656 this->LongLongWidth = 64;
657 this->LongLongAlign = 64;
662 this->LongDoubleFormat = &llvm::APFloat::IEEEdouble();
663 if (Triple.getArch() == llvm::Triple::arm) {
665 }
else if (Triple.getArch() == llvm::Triple::x86) {
666 this->resetDataLayout(
"e-m:e-p:32:32-i64:64-n8:16:32-S128");
667 }
else if (Triple.getArch() == llvm::Triple::x86_64) {
668 this->resetDataLayout(
"e-m:e-p:32:32-i64:64-n8:16:32:64-S128");
669 }
else if (Triple.getArch() == llvm::Triple::mipsel) {
672 assert(Triple.getArch() == llvm::Triple::le32);
673 this->resetDataLayout(
"e-p:32:32-i64:64");
679 template <
typename Target>
686 if (Opts.POSIXThreads)
696 this->MCountName =
"__mcount";
701 template <
typename Target>
704 void getOSDefines(
const LangOptions &Opts,
const llvm::Triple &Triple,
707 if (Opts.POSIXThreads)
718 this->MCountName =
"__mcount";
725 #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
Represents a version number in the form major[.minor[.subminor[.build]]].
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)
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)
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.
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
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)
PS3PPUTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)