From c13f631c8074c85242fd1f639fd09aae78fede6a Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Sat, 16 Nov 2024 14:16:58 +0100 Subject: [PATCH] [LLD][MinGW] Add support for --functionpadmin option This introduces the MinGW counterpart of lld-link's -functionpadmin. --- lld/MinGW/Driver.cpp | 8 ++++++++ lld/MinGW/Options.td | 3 +++ lld/test/MinGW/driver.test | 7 +++++++ 3 files changed, 18 insertions(+) diff --git a/lld/MinGW/Driver.cpp b/lld/MinGW/Driver.cpp index 553698d4f537f..706687202b19f 100644 --- a/lld/MinGW/Driver.cpp +++ b/lld/MinGW/Driver.cpp @@ -329,6 +329,14 @@ bool link(ArrayRef argsArr, llvm::raw_ostream &stdoutOS, add("-build-id"); } + if (auto *a = args.getLastArg(OPT_functionpadmin)) { + StringRef v = a->getValue(); + if (v.empty()) + add("-functionpadmin"); + else + add("-functionpadmin:" + v); + } + if (args.hasFlag(OPT_fatal_warnings, OPT_no_fatal_warnings, false)) add("-WX"); else diff --git a/lld/MinGW/Options.td b/lld/MinGW/Options.td index ff7e21fa808f3..abe5e5c82ca3f 100644 --- a/lld/MinGW/Options.td +++ b/lld/MinGW/Options.td @@ -215,6 +215,9 @@ defm error_limit: def build_id: J<"build-id=">, HelpText<"Generate build ID note (pass none to disable)">, MetaVarName<"">; def : F<"build-id">, Alias, HelpText<"Alias for --build-id=">; +def functionpadmin: J<"functionpadmin=">, HelpText<"Prepares an image for hotpatching">, + MetaVarName<"">; +def : F<"functionpadmin">, Alias, HelpText<"Alias for --functionpadmin=">; // Alias def alias_Bdynamic_call_shared: Flag<["-"], "call_shared">, Alias; diff --git a/lld/test/MinGW/driver.test b/lld/test/MinGW/driver.test index 2831d155fef12..ed6bc880f8f2d 100644 --- a/lld/test/MinGW/driver.test +++ b/lld/test/MinGW/driver.test @@ -445,6 +445,13 @@ RUN: ld.lld -### foo.o -m i386pep --build-id=fast 2>&1 | FileCheck -check-prefix BUILD_ID_WARN: unsupported build id hashing: fast, using default hashing. BUILD_ID_WARN: -build-id{{ }} +RUN: ld.lld -### foo.o -m i386pep --functionpadmin= 2>&1 | FileCheck -check-prefix=FUNCTIONPADMIN %s +RUN: ld.lld -### foo.o -m i386pep --functionpadmin 2>&1 | FileCheck -check-prefix=FUNCTIONPADMIN %s +FUNCTIONPADMIN: -functionpadmin{{ }} + +RUN: ld.lld -### foo.o -m i386pep --functionpadmin=2 2>&1 | FileCheck -check-prefix=FUNCTIONPADMIN2 %s +FUNCTIONPADMIN2: -functionpadmin:2{{ }} + RUN: ld.lld -### foo.o -m i386pep --build-id=none 2>&1 | FileCheck -check-prefix=NO_BUILD_ID %s RUN: ld.lld -### foo.o -m i386pep -s 2>&1 | FileCheck -check-prefix=NO_BUILD_ID %s RUN: ld.lld -### foo.o -m i386pep -S 2>&1 | FileCheck -check-prefix=NO_BUILD_ID %s