[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