mirror of
https://github.com/openbsd/ports.git
synced 2026-06-18 07:24:23 +02:00
Back port support for explicitly selecting a variant of the
SPARC architecture and for setting the default to vis/-Av9a. Needed for building base and xenocara on sparc64. https://github.com/llvm/llvm-project/pull/125151 https://github.com/llvm/llvm-project/pull/130108
This commit is contained in:
@@ -2,7 +2,7 @@ LLVM_MAJOR = 19
|
||||
LLVM_VERSION = ${LLVM_MAJOR}.1.7
|
||||
LLVM_PKGSPEC = >=19,<20
|
||||
|
||||
REVISION-main = 2
|
||||
REVISION-main = 3
|
||||
|
||||
SHARED_LIBS += LLVM 0.0 \
|
||||
LTO 0.0 \
|
||||
|
||||
@@ -37,7 +37,15 @@ Index: clang/lib/Driver/ToolChains/Clang.cpp
|
||||
BranchProtectionPAuthLR = false;
|
||||
GuardedControlStack = false;
|
||||
} else {
|
||||
@@ -2664,6 +2673,11 @@ static void CollectArgsForIntegratedAssembler(Compilat
|
||||
@@ -2574,6 +2583,7 @@ static void CollectArgsForIntegratedAssembler(Compilat
|
||||
bool UseRelaxRelocations = C.getDefaultToolChain().useRelaxRelocations();
|
||||
bool UseNoExecStack = false;
|
||||
const char *MipsTargetFeature = nullptr;
|
||||
+ llvm::SmallVector<const char *> SparcTargetFeatures;
|
||||
StringRef ImplicitIt;
|
||||
for (const Arg *A :
|
||||
Args.filtered(options::OPT_Wa_COMMA, options::OPT_Xassembler,
|
||||
@@ -2664,6 +2674,11 @@ static void CollectArgsForIntegratedAssembler(Compilat
|
||||
CmdArgs.push_back("-soft-float");
|
||||
continue;
|
||||
}
|
||||
@@ -49,7 +57,62 @@ Index: clang/lib/Driver/ToolChains/Clang.cpp
|
||||
|
||||
MipsTargetFeature = llvm::StringSwitch<const char *>(Value)
|
||||
.Case("-mips1", "+mips1")
|
||||
@@ -5799,8 +5813,12 @@ void Clang::ConstructJob(Compilation &C, const JobActi
|
||||
@@ -2684,6 +2699,32 @@ static void CollectArgsForIntegratedAssembler(Compilat
|
||||
.Default(nullptr);
|
||||
if (MipsTargetFeature)
|
||||
continue;
|
||||
+ break;
|
||||
+
|
||||
+ case llvm::Triple::sparc:
|
||||
+ case llvm::Triple::sparcel:
|
||||
+ case llvm::Triple::sparcv9:
|
||||
+ if (Value == "--undeclared-regs") {
|
||||
+ // LLVM already allows undeclared use of G registers, so this option
|
||||
+ // becomes a no-op. This solely exists for GNU compatibility.
|
||||
+ // TODO implement --no-undeclared-regs
|
||||
+ continue;
|
||||
+ }
|
||||
+ SparcTargetFeatures =
|
||||
+ llvm::StringSwitch<llvm::SmallVector<const char *>>(Value)
|
||||
+ .Case("-Av8", {"-v8plus"})
|
||||
+ .Case("-Av8plus", {"+v8plus", "+v9"})
|
||||
+ .Case("-Av8plusa", {"+v8plus", "+v9", "+vis"})
|
||||
+ .Case("-Av8plusb", {"+v8plus", "+v9", "+vis", "+vis2"})
|
||||
+ .Case("-Av8plusd", {"+v8plus", "+v9", "+vis", "+vis2", "+vis3"})
|
||||
+ .Case("-Av9", {"+v9"})
|
||||
+ .Case("-Av9a", {"+v9", "+vis"})
|
||||
+ .Case("-Av9b", {"+v9", "+vis", "+vis2"})
|
||||
+ .Case("-Av9d", {"+v9", "+vis", "+vis2", "+vis3"})
|
||||
+ .Default({});
|
||||
+ if (!SparcTargetFeatures.empty())
|
||||
+ continue;
|
||||
+ break;
|
||||
}
|
||||
|
||||
if (Value == "-force_cpusubtype_ALL") {
|
||||
@@ -2791,6 +2832,21 @@ static void CollectArgsForIntegratedAssembler(Compilat
|
||||
CmdArgs.push_back(MipsTargetFeature);
|
||||
}
|
||||
|
||||
+ // Those OSes default to enabling VIS on 64-bit SPARC.
|
||||
+ // See also the corresponding code for external assemblers in
|
||||
+ // sparc::getSparcAsmModeForCPU().
|
||||
+ bool IsSparcV9ATarget =
|
||||
+ (C.getDefaultToolChain().getArch() == llvm::Triple::sparcv9) &&
|
||||
+ (Triple.isOSLinux() || Triple.isOSFreeBSD() || Triple.isOSOpenBSD());
|
||||
+ if (IsSparcV9ATarget && SparcTargetFeatures.empty()) {
|
||||
+ CmdArgs.push_back("-target-feature");
|
||||
+ CmdArgs.push_back("+vis");
|
||||
+ }
|
||||
+ for (const char *Feature : SparcTargetFeatures) {
|
||||
+ CmdArgs.push_back("-target-feature");
|
||||
+ CmdArgs.push_back(Feature);
|
||||
+ }
|
||||
+
|
||||
// forward -fembed-bitcode to assmebler
|
||||
if (C.getDriver().embedBitcodeEnabled() ||
|
||||
C.getDriver().embedBitcodeMarkerOnly())
|
||||
@@ -5799,8 +5855,12 @@ void Clang::ConstructJob(Compilation &C, const JobActi
|
||||
OFastEnabled ? options::OPT_Ofast : options::OPT_fstrict_aliasing;
|
||||
// We turn strict aliasing off by default if we're Windows MSVC since MSVC
|
||||
// doesn't do any TBAA.
|
||||
@@ -63,7 +126,7 @@ Index: clang/lib/Driver/ToolChains/Clang.cpp
|
||||
CmdArgs.push_back("-relaxed-aliasing");
|
||||
if (Args.hasFlag(options::OPT_fpointer_tbaa, options::OPT_fno_pointer_tbaa,
|
||||
false))
|
||||
@@ -6844,7 +6862,8 @@ void Clang::ConstructJob(Compilation &C, const JobActi
|
||||
@@ -6844,7 +6904,8 @@ void Clang::ConstructJob(Compilation &C, const JobActi
|
||||
options::OPT_fno_strict_overflow)) {
|
||||
if (A->getOption().matches(options::OPT_fno_strict_overflow))
|
||||
CmdArgs.push_back("-fwrapv");
|
||||
@@ -73,7 +136,7 @@ Index: clang/lib/Driver/ToolChains/Clang.cpp
|
||||
|
||||
Args.AddLastArg(CmdArgs, options::OPT_ffinite_loops,
|
||||
options::OPT_fno_finite_loops);
|
||||
@@ -6860,7 +6879,58 @@ void Clang::ConstructJob(Compilation &C, const JobActi
|
||||
@@ -6860,7 +6921,58 @@ void Clang::ConstructJob(Compilation &C, const JobActi
|
||||
Args.addOptInFlag(CmdArgs, options::OPT_mspeculative_load_hardening,
|
||||
options::OPT_mno_speculative_load_hardening);
|
||||
|
||||
@@ -133,7 +196,7 @@ Index: clang/lib/Driver/ToolChains/Clang.cpp
|
||||
RenderSCPOptions(TC, Args, CmdArgs);
|
||||
RenderTrivialAutoVarInitOptions(D, TC, Args, CmdArgs);
|
||||
|
||||
@@ -6938,6 +7008,11 @@ void Clang::ConstructJob(Compilation &C, const JobActi
|
||||
@@ -6938,6 +7050,11 @@ void Clang::ConstructJob(Compilation &C, const JobActi
|
||||
if (Arg *A = Args.getLastArg(options::OPT_fcf_protection_EQ)) {
|
||||
CmdArgs.push_back(
|
||||
Args.MakeArgString(Twine("-fcf-protection=") + A->getValue()));
|
||||
@@ -145,7 +208,7 @@ Index: clang/lib/Driver/ToolChains/Clang.cpp
|
||||
}
|
||||
|
||||
if (Arg *A = Args.getLastArg(options::OPT_mfunction_return_EQ))
|
||||
@@ -7466,6 +7541,18 @@ void Clang::ConstructJob(Compilation &C, const JobActi
|
||||
@@ -7466,6 +7583,18 @@ void Clang::ConstructJob(Compilation &C, const JobActi
|
||||
options::OPT_fno_rewrite_imports, false);
|
||||
if (RewriteImports)
|
||||
CmdArgs.push_back("-frewrite-imports");
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
Index: clang/test/Driver/sparc-ias-Wa.s
|
||||
--- clang/test/Driver/sparc-ias-Wa.s.orig
|
||||
+++ clang/test/Driver/sparc-ias-Wa.s
|
||||
@@ -0,0 +1,69 @@
|
||||
+// RUN: %clang --target=sparc-linux-gnu -### -fintegrated-as -c %s -Wa,-Av8 2>&1 | \
|
||||
+// RUN: FileCheck -check-prefix=V8 %s
|
||||
+// V8: -cc1as
|
||||
+// V8: "-target-feature" "-v8plus"
|
||||
+
|
||||
+// RUN: %clang --target=sparc-linux-gnu -### -fintegrated-as -c %s -Wa,-Av8plus 2>&1 | \
|
||||
+// RUN: FileCheck -check-prefix=V8PLUS %s
|
||||
+// V8PLUS: -cc1as
|
||||
+// V8PLUS: "-target-feature" "+v8plus"
|
||||
+// V8PLUS: "-target-feature" "+v9"
|
||||
+
|
||||
+// RUN: %clang --target=sparc-linux-gnu -### -fintegrated-as -c %s -Wa,-Av8plusa 2>&1 | \
|
||||
+// RUN: FileCheck -check-prefix=V8PLUSA %s
|
||||
+// V8PLUSA: -cc1as
|
||||
+// V8PLUSA: "-target-feature" "+v8plus"
|
||||
+// V8PLUSA: "-target-feature" "+v9"
|
||||
+// V8PLUSA: "-target-feature" "+vis"
|
||||
+
|
||||
+// RUN: %clang --target=sparc-linux-gnu -### -fintegrated-as -c %s -Wa,-Av8plusb 2>&1 | \
|
||||
+// RUN: FileCheck -check-prefix=V8PLUSB %s
|
||||
+// V8PLUSB: -cc1as
|
||||
+// V8PLUSB: "-target-feature" "+v8plus"
|
||||
+// V8PLUSB: "-target-feature" "+v9"
|
||||
+// V8PLUSB: "-target-feature" "+vis"
|
||||
+// V8PLUSB: "-target-feature" "+vis2"
|
||||
+
|
||||
+// RUN: %clang --target=sparc-linux-gnu -### -fintegrated-as -c %s -Wa,-Av8plusd 2>&1 | \
|
||||
+// RUN: FileCheck -check-prefix=V8PLUSD %s
|
||||
+// V8PLUSD: -cc1as
|
||||
+// V8PLUSD: "-target-feature" "+v8plus"
|
||||
+// V8PLUSD: "-target-feature" "+v9"
|
||||
+// V8PLUSD: "-target-feature" "+vis"
|
||||
+// V8PLUSD: "-target-feature" "+vis2"
|
||||
+// V8PLUSD: "-target-feature" "+vis3"
|
||||
+
|
||||
+// RUN: %clang --target=sparc-linux-gnu -### -fintegrated-as -c %s -Wa,-Av9 2>&1 | \
|
||||
+// RUN: FileCheck -check-prefix=V9 %s
|
||||
+// V9: -cc1as
|
||||
+// V9: "-target-feature" "+v9"
|
||||
+
|
||||
+// RUN: %clang --target=sparc-linux-gnu -### -fintegrated-as -c %s -Wa,-Av9a 2>&1 | \
|
||||
+// RUN: FileCheck -check-prefix=V9A %s
|
||||
+// V9A: -cc1as
|
||||
+// V9A: "-target-feature" "+v9"
|
||||
+// V9A: "-target-feature" "+vis"
|
||||
+
|
||||
+// RUN: %clang --target=sparc-linux-gnu -### -fintegrated-as -c %s -Wa,-Av9b 2>&1 | \
|
||||
+// RUN: FileCheck -check-prefix=V9B %s
|
||||
+// V9B: -cc1as
|
||||
+// V9B: "-target-feature" "+v9"
|
||||
+// V9B: "-target-feature" "+vis"
|
||||
+// V9B: "-target-feature" "+vis2"
|
||||
+
|
||||
+// RUN: %clang --target=sparc-linux-gnu -### -fintegrated-as -c %s -Wa,-Av9d 2>&1 | \
|
||||
+// RUN: FileCheck -check-prefix=V9D %s
|
||||
+// V9D: -cc1as
|
||||
+// V9D: "-target-feature" "+v9"
|
||||
+// V9D: "-target-feature" "+vis"
|
||||
+// V9D: "-target-feature" "+vis2"
|
||||
+// V9D: "-target-feature" "+vis3"
|
||||
+
|
||||
+// RUN: %clang --target=sparc64-linux-gnu -### -fintegrated-as -c %s 2>&1 | \
|
||||
+// RUN: FileCheck -check-prefix=VIS-DEFAULT %s
|
||||
+// RUN: %clang --target=sparc64-freebsd -### -fintegrated-as -c %s 2>&1 | \
|
||||
+// RUN: FileCheck -check-prefix=VIS-DEFAULT %s
|
||||
+// RUN: %clang --target=sparc64-openbsd -### -fintegrated-as -c %s 2>&1 | \
|
||||
+// RUN: FileCheck -check-prefix=VIS-DEFAULT %s
|
||||
+// VIS-DEFAULT: -cc1as
|
||||
+// VIS-DEFAULT: "-target-feature" "+vis"
|
||||
Reference in New Issue
Block a user