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";
139 template <
typename Target>
147 Builder.
defineMacro(
"__DragonFly_cc_version",
"100001");
157 switch (Triple.getArch()) {
159 case llvm::Triple::x86:
160 case llvm::Triple::x86_64:
161 this->MCountName =
".mcount";
167 #ifndef FREEBSD_CC_VERSION 168 #define FREEBSD_CC_VERSION 0U 172 template <
typename Target>
179 unsigned Release = Triple.getOSMajorVersion();
184 CCVersion = Release * 100000U + 1U;
186 Builder.
defineMacro(
"__FreeBSD__", Twine(Release));
187 Builder.
defineMacro(
"__FreeBSD_cc_version", Twine(CCVersion));
201 Builder.
defineMacro(
"__STDC_MB_MIGHT_NEQ_WC__",
"1");
207 switch (Triple.getArch()) {
209 case llvm::Triple::x86:
210 case llvm::Triple::x86_64:
211 this->MCountName =
".mcount";
213 case llvm::Triple::mips:
214 case llvm::Triple::mipsel:
215 case llvm::Triple::ppc:
216 case llvm::Triple::ppc64:
217 case llvm::Triple::ppc64le:
218 this->MCountName =
"_mcount";
220 case llvm::Triple::arm:
221 this->MCountName =
"__mcount";
228 template <
typename Target>
239 if (Opts.POSIXThreads)
251 template <
typename Target>
269 this->TLSSupported =
false;
274 template <
typename Target>
298 template <
typename Target>
308 if (Triple.isAndroid()) {
310 unsigned Maj, Min, Rev;
311 Triple.getEnvironmentVersion(Maj, Min, Rev);
312 this->PlatformName =
"android";
313 this->PlatformMinVersion = VersionTuple(Maj, Min, Rev);
315 Builder.
defineMacro(
"__ANDROID_API__", Twine(Maj));
317 if (Opts.POSIXThreads)
321 if (this->HasFloat128)
330 switch (Triple.getArch()) {
333 case llvm::Triple::mips:
334 case llvm::Triple::mipsel:
335 case llvm::Triple::mips64:
336 case llvm::Triple::mips64el:
337 case llvm::Triple::ppc:
338 case llvm::Triple::ppc64:
339 case llvm::Triple::ppc64le:
340 this->MCountName =
"_mcount";
342 case llvm::Triple::x86:
343 case llvm::Triple::x86_64:
344 case llvm::Triple::systemz:
345 this->HasFloat128 =
true;
351 return ".text.startup";
356 template <
typename Target>
365 if (Opts.POSIXThreads)
372 this->MCountName =
"__mcount";
377 template <
typename Target>
387 if (Opts.POSIXThreads)
389 if (this->HasFloat128)
396 switch (Triple.getArch()) {
397 case llvm::Triple::x86:
398 case llvm::Triple::x86_64:
399 this->HasFloat128 =
true;
402 this->MCountName =
"__mcount";
404 case llvm::Triple::mips64:
405 case llvm::Triple::mips64el:
406 case llvm::Triple::ppc:
407 case llvm::Triple::sparcv9:
408 this->MCountName =
"_mcount";
415 template <
typename Target>
432 template <
typename Target>
450 this->LongWidth = this->LongAlign = 32;
451 this->PointerWidth = this->PointerAlign = 32;
455 this->resetDataLayout(
"E-m:e-p:32:32-i64:64-n32:64");
459 template <
typename Target>
465 Builder.
defineMacro(
"__FreeBSD_cc_version",
"900001");
478 this->MaxTLSAlign = 256;
482 this->UseExplicitBitFieldAlignment =
false;
484 switch (Triple.getArch()) {
486 case llvm::Triple::x86_64:
487 this->MCountName =
".mcount";
488 this->NewAlign = 256;
495 template <
typename Target>
511 switch (Triple.getArch()) {
513 case llvm::Triple::x86:
516 case llvm::Triple::mips:
517 case llvm::Triple::mipsel:
518 case llvm::Triple::ppc:
519 case llvm::Triple::ppc64:
520 case llvm::Triple::ppc64le:
523 case llvm::Triple::arm:
531 template <
typename Target>
554 if (Opts.POSIXThreads)
556 if (this->HasFloat128)
564 switch (Triple.getArch()) {
567 case llvm::Triple::x86:
568 case llvm::Triple::x86_64:
569 this->HasFloat128 =
true;
576 template <
typename Target>
582 if (Triple.isArch64Bit())
584 if (Triple.isWindowsGNUEnvironment())
590 if (Opts.CPlusPlus) {
594 if (Opts.CXXExceptions)
601 if (!Opts.CharIsSigned)
606 if (Opts.POSIXThreads)
609 if (Opts.MSCompatibilityVersion) {
611 Twine(Opts.MSCompatibilityVersion / 100000));
612 Builder.
defineMacro(
"_MSC_FULL_VER", Twine(Opts.MSCompatibilityVersion));
617 Builder.
defineMacro(
"_HAS_CHAR16_T_LANGUAGE_SUPPORT", Twine(1));
620 if (Opts.CPlusPlus2a)
622 else if (Opts.CPlusPlus17)
624 else if (Opts.CPlusPlus14)
629 if (Opts.MicrosoftExt) {
632 if (Opts.CPlusPlus11) {
633 Builder.
defineMacro(
"_RVALUE_REFERENCES_V2_SUPPORTED");
634 Builder.
defineMacro(
"_RVALUE_REFERENCES_SUPPORTED");
649 template <
typename Target>
654 if (Opts.POSIXThreads)
667 this->LongAlign = 32;
668 this->LongWidth = 32;
669 this->PointerAlign = 32;
670 this->PointerWidth = 32;
673 this->DoubleAlign = 64;
674 this->LongDoubleWidth = 64;
675 this->LongDoubleAlign = 64;
676 this->LongLongWidth = 64;
677 this->LongLongAlign = 64;
682 this->LongDoubleFormat = &llvm::APFloat::IEEEdouble();
683 if (Triple.getArch() == llvm::Triple::arm) {
685 }
else if (Triple.getArch() == llvm::Triple::x86) {
686 this->resetDataLayout(
"e-m:e-p:32:32-i64:64-n8:16:32-S128");
687 }
else if (Triple.getArch() == llvm::Triple::x86_64) {
688 this->resetDataLayout(
"e-m:e-p:32:32-i64:64-n8:16:32:64-S128");
689 }
else if (Triple.getArch() == llvm::Triple::mipsel) {
692 assert(Triple.getArch() == llvm::Triple::le32);
693 this->resetDataLayout(
"e-p:32:32-i64:64");
699 template <
typename Target>
706 if (Opts.POSIXThreads)
716 this->MCountName =
"__mcount";
721 template <
typename Target>
724 void getOSDefines(
const LangOptions &Opts,
const llvm::Triple &Triple,
727 if (Opts.POSIXThreads)
738 this->MCountName =
"__mcount";
745 #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)
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)