llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang @llvm/pr-subscribers-lld Author: Jacek Caban (cjacek) <details> <summary>Changes</summary> --- Full diff: https://github.com/llvm/llvm-project/pull/116512.diff 5 Files Affected: - (modified) clang/lib/Driver/ToolChains/MinGW.cpp (+3) - (modified) clang/test/Driver/mingw.cpp (+4) - (modified) lld/MinGW/Driver.cpp (+8) - (modified) lld/MinGW/Options.td (+3) - (modified) lld/test/MinGW/driver.test (+7) ``````````diff diff --git a/clang/lib/Driver/ToolChains/MinGW.cpp b/clang/lib/Driver/ToolChains/MinGW.cpp index e51daca5025a80..963de81027ca9f 100644 --- a/clang/lib/Driver/ToolChains/MinGW.cpp +++ b/clang/lib/Driver/ToolChains/MinGW.cpp @@ -188,6 +188,9 @@ void tools::MinGW::Linker::ConstructJob(Compilation &C, const JobAction &JA, << A->getSpelling() << GuardArgs; } + if (Args.hasArg(options::OPT_fms_hotpatch)) + CmdArgs.push_back("--functionpadmin"); + CmdArgs.push_back("-o"); const char *OutputFile = Output.getFilename(); // GCC implicitly adds an .exe extension if it is given an output file name diff --git a/clang/test/Driver/mingw.cpp b/clang/test/Driver/mingw.cpp index 4a9ba4d259b46f..9790c86a364f85 100644 --- a/clang/test/Driver/mingw.cpp +++ b/clang/test/Driver/mingw.cpp @@ -84,3 +84,7 @@ // RUN: %clang --target=arm64ec-windows-gnu -### -o /dev/null %s 2>&1 \ // RUN: | FileCheck %s --check-prefix CHECK_MINGW_EC_LINK // CHECK_MINGW_EC_LINK: "-m" "arm64ecpe" + +// RUN: %clang --target=i686-windows-gnu -fms-hotpatch -### -- %s 2>&1 \ +// RUN: | FileCheck %s --check-prefix=FUNCTIONPADMIN +// FUNCTIONPADMIN: "--functionpadmin" diff --git a/lld/MinGW/Driver.cpp b/lld/MinGW/Driver.cpp index 553698d4f537fc..706687202b19fb 100644 --- a/lld/MinGW/Driver.cpp +++ b/lld/MinGW/Driver.cpp @@ -329,6 +329,14 @@ bool link(ArrayRef<const char *> 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 ff7e21fa808f39..abe5e5c82ca3ff 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<"<arg>">; def : F<"build-id">, Alias<build_id>, HelpText<"Alias for --build-id=">; +def functionpadmin: J<"functionpadmin=">, HelpText<"Prepares an image for hotpatching">, + MetaVarName<"<arg>">; +def : F<"functionpadmin">, Alias<functionpadmin>, HelpText<"Alias for --functionpadmin=">; // Alias def alias_Bdynamic_call_shared: Flag<["-"], "call_shared">, Alias<Bdynamic>; diff --git a/lld/test/MinGW/driver.test b/lld/test/MinGW/driver.test index 2831d155fef128..ed6bc880f8f2d9 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 `````````` </details> https://github.com/llvm/llvm-project/pull/116512 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits