[lld] [LLD][COFF] Emit warnings for missing load config on EC targets (PR #121339)
Jacek Caban via llvm-commits
llvm-commits at lists.llvm.org
Mon Dec 30 06:12:16 PST 2024
https://github.com/cjacek created https://github.com/llvm/llvm-project/pull/121339
ARM64EC and ARM64X images require a load configuration to be valid.
>From 3cd5e5de96fcff1a5452d0cacbae65f6f61364ee Mon Sep 17 00:00:00 2001
From: Jacek Caban <jacek at codeweavers.com>
Date: Mon, 9 Dec 2024 16:53:58 +0100
Subject: [PATCH] [LLD][COFF] Emit warnings for missing load config on EC
targets
ARM64EC and ARM64X images require a load configuration to be valid.
---
lld/COFF/SymbolTable.cpp | 8 ++++++++
lld/test/COFF/arm64x-loadconfig.s | 14 +++++++++++++-
2 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/lld/COFF/SymbolTable.cpp b/lld/COFF/SymbolTable.cpp
index fc78afb4c9e400..2f21f3cea7e2a3 100644
--- a/lld/COFF/SymbolTable.cpp
+++ b/lld/COFF/SymbolTable.cpp
@@ -601,6 +601,14 @@ void SymbolTable::initializeLoadConfig() {
auto sym =
dyn_cast_or_null<DefinedRegular>(findUnderscore("_load_config_used"));
if (!sym) {
+ if (isEC()) {
+ Warn(ctx) << "EC version of '_load_config_used' is missing";
+ return;
+ }
+ if (ctx.hybridSymtab) {
+ Warn(ctx) << "native version of '_load_config_used' is missing for ARM64X target";
+ return;
+ }
if (ctx.config.guardCF != GuardCFLevel::Off)
Warn(ctx)
<< "Control Flow Guard is enabled but '_load_config_used' is missing";
diff --git a/lld/test/COFF/arm64x-loadconfig.s b/lld/test/COFF/arm64x-loadconfig.s
index 8d2ab555546341..d21f4bfe95b843 100644
--- a/lld/test/COFF/arm64x-loadconfig.s
+++ b/lld/test/COFF/arm64x-loadconfig.s
@@ -8,7 +8,19 @@
// RUN: llvm-mc -filetype=obj -triple=aarch64-windows loadconfig-short.s -o loadconfig-short.obj
// RUN: llvm-mc -filetype=obj -triple=arm64ec-windows loadconfig-short.s -o loadconfig-short-arm64ec.obj
-// RUN: lld-link -machine:arm64x -out:out.dll -dll -noentry loadconfig.obj test.obj
+// RUN: lld-link -machine:arm64x -out:out-warn.dll -dll -noentry test.obj \
+// RUN: 2>&1 | FileCheck --check-prefixes=WARN-LOADCFG,WARN-EC-LOADCFG %s
+// WARN-LOADCFG: lld-link: warning: native version of '_load_config_used' is missing for ARM64X target
+// WARN-EC-LOADCFG: lld-link: warning: EC version of '_load_config_used' is missing
+
+// RUN: lld-link -machine:arm64x -out:out-nonative.dll -dll -noentry loadconfig-ec.obj chpe.obj \
+// RUN: 2>&1 | FileCheck --check-prefixes=WARN-LOADCFG --implicit-check-not EC %s
+
+// RUN: lld-link -machine:arm64ec -out:out-ec.dll -dll -noentry chpe.obj \
+// RUN: 2>&1 | FileCheck --check-prefixes=WARN-EC-LOADCFG --implicit-check-not native %s
+
+// RUN: lld-link -machine:arm64x -out:out.dll -dll -noentry loadconfig.obj test.obj \
+// RUN: 2>&1 | FileCheck --check-prefixes=WARN-EC-LOADCFG --implicit-check-not native %s
// RUN: llvm-readobj --coff-load-config out.dll | FileCheck --check-prefix=DYNRELOCS %s
// DYNRELOCS: DynamicValueRelocTableOffset: 0xC
More information about the llvm-commits
mailing list