[llvm-branch-commits] [lld] release/22.x: [LLD] [ELF] Make -z gcs=always implicitly warn on missing GCS, like force-bti (#186203) (PR #186778)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Mon Mar 16 04:32:23 PDT 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-lld
Author: None (llvmbot)
<details>
<summary>Changes</summary>
Backport 887d2d4bf7380113b27f199f323eeee883f17191
Requested by: @<!-- -->mstorsjo
---
Full diff: https://github.com/llvm/llvm-project/pull/186778.diff
2 Files Affected:
- (modified) lld/ELF/Driver.cpp (+7)
- (modified) lld/test/ELF/aarch64-feature-gcs.s (+11-2)
``````````diff
diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp
index 9944cf2e73700..ee5a101713108 100644
--- a/lld/ELF/Driver.cpp
+++ b/lld/ELF/Driver.cpp
@@ -3020,6 +3020,13 @@ static void readSecurityNotes(Ctx &ctx) {
"GNU_PROPERTY_X86_FEATURE_1_IBT property";
features |= GNU_PROPERTY_X86_FEATURE_1_IBT;
}
+ if (ctx.arg.zGcs == GcsPolicy::Always &&
+ !(features & GNU_PROPERTY_AARCH64_FEATURE_1_GCS)) {
+ if (ctx.arg.zGcsReport == ReportPolicy::None)
+ Warn(ctx) << f
+ << ": -z gcs: file does not have "
+ "GNU_PROPERTY_AARCH64_FEATURE_1_GCS property";
+ }
if (ctx.arg.zPacPlt && !(hasValidPauthAbiCoreInfo ||
(features & GNU_PROPERTY_AARCH64_FEATURE_1_PAC))) {
Warn(ctx) << f
diff --git a/lld/test/ELF/aarch64-feature-gcs.s b/lld/test/ELF/aarch64-feature-gcs.s
index 795e4c943c31a..c19034c82c47c 100644
--- a/lld/test/ELF/aarch64-feature-gcs.s
+++ b/lld/test/ELF/aarch64-feature-gcs.s
@@ -12,13 +12,22 @@
# RUN: ld.lld f1-s.o f2-s.o f3-s.o -o out --fatal-warnings
# RUN: llvm-readelf -n out | FileCheck --check-prefix GCS %s
-# RUN: ld.lld f1-s.o f2.o f3-s.o -o out.force -z gcs=always --fatal-warnings
+# RUN: ld.lld f1-s.o f2.o f3-s.o -o out.force -z gcs=always 2>&1 | FileCheck --check-prefix=REPORT-GCS-WARN-F2 %s
# RUN: llvm-readelf -n out.force | FileCheck --check-prefix GCS %s
-# RUN: ld.lld f2-s.o f3.o --shared -o out.force.so -z gcs=never -z gcs=always --fatal-warnings
+# RUN: ld.lld f2-s.o f3.o --shared -o out.force.so -z gcs=never -z gcs=always 2>&1 | FileCheck --check-prefix=REPORT-GCS-WARN-F3 %s
# RUN: llvm-readelf -n out.force.so | FileCheck --check-prefix GCS %s
+# RUN: ld.lld --shared f3.o -o out.force-bti -z gcs=always -z force-bti 2>&1 | FileCheck --check-prefix=REPORT-BTI-GCS-WARN-F3 %s
# GCS: Properties: aarch64 feature: GCS
+# REPORT-GCS-WARN-F2: warning: f2.o: -z gcs: file does not have GNU_PROPERTY_AARCH64_FEATURE_1_GCS property
+# REPORT-GCS-WARN-F2-NOT: {{.}}
+# REPORT-GCS-WARN-F3: warning: f3.o: -z gcs: file does not have GNU_PROPERTY_AARCH64_FEATURE_1_GCS property
+# REPORT-GCS-WARN-F3-NOT: {{.}}
+# REPORT-BTI-GCS-WARN-F3: warning: f3.o: -z force-bti: file does not have GNU_PROPERTY_AARCH64_FEATURE_1_BTI property
+# REPORT-BTI-GCS-WARN-F3: warning: f3.o: -z gcs: file does not have GNU_PROPERTY_AARCH64_FEATURE_1_GCS property
+# REPORT-BTI-GCS-WARN-F3-NOT: {{.}}
+
## GCS should not be enabled if it's not enabled in at least one input.
# RUN: ld.lld f1-s.o f2.o f3-s.o -o out.no --fatal-warnings
``````````
</details>
https://github.com/llvm/llvm-project/pull/186778
More information about the llvm-branch-commits
mailing list