mirror of
https://abf.rosa.ru/djam/llvm13.git
synced 2025-02-24 08:52:45 +00:00
92 lines
4.9 KiB
Diff
92 lines
4.9 KiB
Diff
--- llvm-3.5.0.src/lib/Support/Triple.cpp.detectHardfloat~ 2014-07-18 16:28:19.000000000 +0200
|
|
+++ llvm-3.5.0.src/lib/Support/Triple.cpp 2014-09-05 22:24:04.378819536 +0200
|
|
@@ -335,8 +335,8 @@ static Triple::OSType parseOS(StringRef
|
|
.Default(Triple::UnknownOS);
|
|
}
|
|
|
|
-static Triple::EnvironmentType parseEnvironment(StringRef EnvironmentName) {
|
|
- return StringSwitch<Triple::EnvironmentType>(EnvironmentName)
|
|
+static Triple::EnvironmentType parseEnvironment(StringRef EnvironmentName, StringRef ArchName, StringRef VendorName) {
|
|
+ Triple::EnvironmentType t = StringSwitch<Triple::EnvironmentType>(EnvironmentName)
|
|
.StartsWith("eabihf", Triple::EABIHF)
|
|
.StartsWith("eabi", Triple::EABI)
|
|
.StartsWith("gnueabihf", Triple::GNUEABIHF)
|
|
@@ -349,6 +349,15 @@ static Triple::EnvironmentType parseEnvi
|
|
.StartsWith("itanium", Triple::Itanium)
|
|
.StartsWith("cygnus", Triple::Cygnus)
|
|
.Default(Triple::UnknownEnvironment);
|
|
+ if(t == Triple::GNUEABI) {
|
|
+ // There's some special cases where -gnueabi actually means
|
|
+ // GNUEABIHF, such as
|
|
+ // armv7hl-linux-gnueabi (Fedora) and
|
|
+ // armv7a-hardfloat-linux-gnueabi (Gentoo)
|
|
+ if(ArchName.find('h') != StringRef::npos || VendorName.equals("hardfloat"))
|
|
+ return Triple::GNUEABIHF;
|
|
+ }
|
|
+ return t;
|
|
}
|
|
|
|
static Triple::ObjectFormatType parseFormat(StringRef EnvironmentName) {
|
|
@@ -409,7 +418,7 @@ Triple::Triple(const Twine &Str)
|
|
SubArch(parseSubArch(getArchName())),
|
|
Vendor(parseVendor(getVendorName())),
|
|
OS(parseOS(getOSName())),
|
|
- Environment(parseEnvironment(getEnvironmentName())),
|
|
+ Environment(parseEnvironment(getEnvironmentName(), getArchName(), getVendorName())),
|
|
ObjectFormat(parseFormat(getEnvironmentName())) {
|
|
if (ObjectFormat == Triple::UnknownObjectFormat)
|
|
ObjectFormat = getDefaultFormat(*this);
|
|
@@ -444,7 +453,7 @@ Triple::Triple(const Twine &ArchStr, con
|
|
SubArch(parseSubArch(ArchStr.str())),
|
|
Vendor(parseVendor(VendorStr.str())),
|
|
OS(parseOS(OSStr.str())),
|
|
- Environment(parseEnvironment(EnvironmentStr.str())),
|
|
+ Environment(parseEnvironment(EnvironmentStr.str(), ArchStr.str(), VendorStr.str())),
|
|
ObjectFormat(parseFormat(EnvironmentStr.str())) {
|
|
if (ObjectFormat == Triple::UnknownObjectFormat)
|
|
ObjectFormat = getDefaultFormat(*this);
|
|
@@ -471,7 +480,7 @@ std::string Triple::normalize(StringRef
|
|
OS = parseOS(Components[2]);
|
|
EnvironmentType Environment = UnknownEnvironment;
|
|
if (Components.size() > 3)
|
|
- Environment = parseEnvironment(Components[3]);
|
|
+ Environment = parseEnvironment(Components[3], Components[0], Components[1]);
|
|
ObjectFormatType ObjectFormat = UnknownObjectFormat;
|
|
if (Components.size() > 4)
|
|
ObjectFormat = parseFormat(Components[4]);
|
|
@@ -514,7 +523,7 @@ std::string Triple::normalize(StringRef
|
|
Valid = OS != UnknownOS;
|
|
break;
|
|
case 3:
|
|
- Environment = parseEnvironment(Comp);
|
|
+ Environment = parseEnvironment(Comp, Components[0], Components[1]);
|
|
Valid = Environment != UnknownEnvironment;
|
|
if (!Valid) {
|
|
ObjectFormat = parseFormat(Comp);
|
|
--- llvm-3.5.0.src/tools/clang/lib/Driver/Tools.cpp.detectHardfloat~ 2014-09-05 22:22:15.101354343 +0200
|
|
+++ llvm-3.5.0.src/tools/clang/lib/Driver/Tools.cpp 2014-09-05 22:22:15.104687701 +0200
|
|
@@ -635,7 +635,7 @@ StringRef tools::arm::getARMFloatABI(con
|
|
FloatABI = "hard";
|
|
break;
|
|
case llvm::Triple::GNUEABI:
|
|
- FloatABI = "softfp";
|
|
+ FloatABI = (Triple.getVendorName().equals("hardfloat") || Triple.getArchName().find('h')!=StringRef::npos) ? "hard" : "softfp";
|
|
break;
|
|
case llvm::Triple::EABIHF:
|
|
FloatABI = "hard";
|
|
@@ -7197,13 +7197,13 @@ static StringRef getLinuxDynamicLinker(c
|
|
return "/lib/ld-linux-aarch64_be.so.1";
|
|
else if (ToolChain.getArch() == llvm::Triple::arm ||
|
|
ToolChain.getArch() == llvm::Triple::thumb) {
|
|
- if (ToolChain.getTriple().getEnvironment() == llvm::Triple::GNUEABIHF)
|
|
+ if (ToolChain.getTriple().getEnvironment() == llvm::Triple::GNUEABIHF || (ToolChain.getTriple().getEnvironment() == llvm::Triple::GNUEABI && (ToolChain.getTriple().getVendorName().equals("hardfloat") || ToolChain.getTriple().getArchName().find('h')!=StringRef::npos)))
|
|
return "/lib/ld-linux-armhf.so.3";
|
|
else
|
|
return "/lib/ld-linux.so.3";
|
|
} else if (ToolChain.getArch() == llvm::Triple::armeb ||
|
|
ToolChain.getArch() == llvm::Triple::thumbeb) {
|
|
- if (ToolChain.getTriple().getEnvironment() == llvm::Triple::GNUEABIHF)
|
|
+ if (ToolChain.getTriple().getEnvironment() == llvm::Triple::GNUEABIHF || (ToolChain.getTriple().getEnvironment() == llvm::Triple::GNUEABI && (ToolChain.getTriple().getVendorName().equals("hardfloat") || ToolChain.getTriple().getArchName().find('h')!=StringRef::npos)))
|
|
return "/lib/ld-linux-armhf.so.3"; /* TODO: check which dynamic linker name. */
|
|
else
|
|
return "/lib/ld-linux.so.3"; /* TODO: check which dynamic linker name. */
|