From b0f593ab438100e57457ea6615b6d9fa0f56f1d7 Mon Sep 17 00:00:00 2001 From: mingmingl Date: Tue, 14 Oct 2025 22:00:54 -0700 Subject: [PATCH 1/2] [lld][ELF]Emit warning when both scripts are specified --- lld/ELF/Driver.cpp | 9 +++++++++ lld/test/ELF/linkerscript/default-script.s | 12 ++++++++++++ 2 files changed, 21 insertions(+) diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp index 62f7fffce7dbe..c8cce0810ef9a 100644 --- a/lld/ELF/Driver.cpp +++ b/lld/ELF/Driver.cpp @@ -2091,6 +2091,7 @@ void LinkerDriver::createFiles(opt::InputArgList &args) { nextGroupId = 0; isInGroup = false; bool hasInput = false, hasScript = false; + StringRef scriptFilePath, defaultScriptFilePath; for (auto *arg : args) { switch (arg->getOption().getID()) { case OPT_library: @@ -2106,7 +2107,11 @@ void LinkerDriver::createFiles(opt::InputArgList &args) { break; } case OPT_script: + scriptFilePath = arg->getValue(); + [[fallthrough]]; case OPT_default_script: + if (arg->getOption().matches(OPT_default_script)) + defaultScriptFilePath = arg->getValue(); if (std::optional path = searchScript(ctx, arg->getValue())) { if (std::optional mb = readFile(ctx, *path)) { @@ -2201,6 +2206,10 @@ void LinkerDriver::createFiles(opt::InputArgList &args) { if (defaultScript && !hasScript) readLinkerScript(ctx, *defaultScript); + if (defaultScript && hasScript) + Warn(ctx) << "--script at path " << scriptFilePath + << " will override --default-script at path " + << defaultScriptFilePath; if (files.empty() && !hasInput && errCount(ctx) == 0) ErrAlways(ctx) << "no input files"; } diff --git a/lld/test/ELF/linkerscript/default-script.s b/lld/test/ELF/linkerscript/default-script.s index bb716a5fe0cdd..a06f96b7165d4 100644 --- a/lld/test/ELF/linkerscript/default-script.s +++ b/lld/test/ELF/linkerscript/default-script.s @@ -32,6 +32,17 @@ # CHECK1-NEXT: 3: 000000000000002a 0 NOTYPE GLOBAL DEFAULT ABS def # CHECK1-EMPTY: +## When both --script and --default-script are specified, --script overrides +## --default-script. +# RUN: ld.lld --default-script def.t --script b.t a.o -o out2 2>warn.txt +# RUN: llvm-readelf -Ss out2 | FileCheck %s --check-prefix=OVERRIDE +# OVERRIDE: .foo0 +# OVERRIDE-NEXT: foo1 +# OVERRIDE-NEXT: foo2 +# RUN: cat warn.txt | FileCheck %s --check-prefix=WARNING +# WARNING: --script at path b.t will override --default-script at path def.t + + # RUN: not ld.lld --default-script not-exist.t b.t -T a.t a.o 2>&1 | FileCheck %s --check-prefix=ERR # ERR: error: cannot find linker script not-exist.t @@ -61,3 +72,4 @@ SECTIONS { .foo1 : {} .foo0 : {} } + From a96588d6ae75e660c770e54a8ac155cdd22a66e7 Mon Sep 17 00:00:00 2001 From: mingmingl Date: Tue, 14 Oct 2025 22:05:05 -0700 Subject: [PATCH 2/2] trim blank lines --- lld/test/ELF/linkerscript/default-script.s | 2 -- 1 file changed, 2 deletions(-) diff --git a/lld/test/ELF/linkerscript/default-script.s b/lld/test/ELF/linkerscript/default-script.s index a06f96b7165d4..d1aae029de404 100644 --- a/lld/test/ELF/linkerscript/default-script.s +++ b/lld/test/ELF/linkerscript/default-script.s @@ -42,7 +42,6 @@ # RUN: cat warn.txt | FileCheck %s --check-prefix=WARNING # WARNING: --script at path b.t will override --default-script at path def.t - # RUN: not ld.lld --default-script not-exist.t b.t -T a.t a.o 2>&1 | FileCheck %s --check-prefix=ERR # ERR: error: cannot find linker script not-exist.t @@ -72,4 +71,3 @@ SECTIONS { .foo1 : {} .foo0 : {} } -