From 5a75227a6dd1b5d7db535dbac48f3b0eda51e189 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Miku=C5=82a?= Date: Sat, 23 Nov 2024 00:08:53 +0100 Subject: [PATCH 1/2] [LLD] [COFF] Print a warning when using /dependentloadflag without load config --- lld/COFF/Writer.cpp | 3 +++ lld/test/COFF/dependentflags.test | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/lld/COFF/Writer.cpp b/lld/COFF/Writer.cpp index d3e326378ed2d..e4ac50351a0d5 100644 --- a/lld/COFF/Writer.cpp +++ b/lld/COFF/Writer.cpp @@ -2607,6 +2607,9 @@ void Writer::prepareLoadConfig() { if (!b) { if (ctx.config.guardCF != GuardCFLevel::Off) warn("Control Flow Guard is enabled but '_load_config_used' is missing"); + if (ctx.config.dependentLoadFlags) + warn("_load_config_used not found, /dependentloadflag will have no " + "effect"); return; } diff --git a/lld/test/COFF/dependentflags.test b/lld/test/COFF/dependentflags.test index 3e90511591c75..2ea974c268d5c 100644 --- a/lld/test/COFF/dependentflags.test +++ b/lld/test/COFF/dependentflags.test @@ -20,6 +20,10 @@ RUN: not lld-link %S/Inputs/precomp-a.obj %t.ldcfg.obj /out:%t.exe /nodefaultlib RUN: not lld-link %S/Inputs/precomp-a.obj %t.ldcfg.obj /out:%t.exe /nodefaultlib /force /dependentloadflag:zz 2>&1 | FileCheck %s --check-prefix FAIL RUN: not lld-link %S/Inputs/precomp-a.obj %t.ldcfg.obj /out:%t.exe /nodefaultlib /force /dependentloadflag:0xf0000 2>&1 | FileCheck %s --check-prefix FAIL-RANGE +// ---- Warn if _load_config_used is missing +RUN: llvm-lib %t.ldcfg.obj /out:%t.lib +RUN: lld-link %S/Inputs/precomp-a.obj /out:%t.exe /nodefaultlib /force /dependentloadflag:0x800 2>&1 | FileCheck %s --check-prefix WARN-NOBASE +RUN: lld-link %S/Inputs/precomp-a.obj %t.lib /out:%t.exe /nodefaultlib /force /dependentloadflag:0x800 2>&1 | FileCheck %s --allow-empty --check-prefix NO-WARN BASE: DependentLoadFlags: 0x0 FLAGS-800: DependentLoadFlags: 0x800 @@ -29,3 +33,5 @@ FAIL: lld-link: error: /dependentloadflag: invalid argument: zz FAIL-RANGE: lld-link: error: /dependentloadflag: invalid argument: 0xf0000 FAIL-NOARG: lld-link: error: /dependentloadflag: no argument specified +WARN-NOBASE: lld-link: warning: _load_config_used not found, /dependentloadflag will have no effect +NO-WARN-NOT: lld-link: warning: _load_config_used not found, /dependentloadflag will have no effect From 18b89eec9d7ffea42ab6904939ce1a1ac142ce56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Storsj=C3=B6?= Date: Thu, 5 Dec 2024 13:32:22 +0200 Subject: [PATCH 2/2] Fixup conflict resolution --- lld/COFF/Writer.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lld/COFF/Writer.cpp b/lld/COFF/Writer.cpp index 0d390facc5a3b..2afbac02e81d7 100644 --- a/lld/COFF/Writer.cpp +++ b/lld/COFF/Writer.cpp @@ -2608,10 +2608,11 @@ void Writer::prepareLoadConfig() { auto *b = cast_if_present(sym); if (!b) { if (ctx.config.guardCF != GuardCFLevel::Off) - Warn("Control Flow Guard is enabled but '_load_config_used' is missing"); + Warn(ctx) + << "Control Flow Guard is enabled but '_load_config_used' is missing"; if (ctx.config.dependentLoadFlags) - Warn("_load_config_used not found, /dependentloadflag will have no " - "effect"); + Warn(ctx) << "_load_config_used not found, /dependentloadflag will have " + "no effect"; return; }