Author: Joseph Huber Date: 2023-03-14T13:11:33-05:00 New Revision: 55f38495e38e2a3aeb4f2dac852644eb4937bd74
URL: https://github.com/llvm/llvm-project/commit/55f38495e38e2a3aeb4f2dac852644eb4937bd74 DIFF: https://github.com/llvm/llvm-project/commit/55f38495e38e2a3aeb4f2dac852644eb4937bd74.diff LOG: [Clang] Always use --no-undefined when linking AMDGPU images AMDGPU uses ELF shared libraries to implement their executable device images. One downside to this method is that it disables regular warnings on undefined symbols. This is because shared libraries expect these to be resolves by later loads. However, the GPU images do not support dynamic linking so any undefined symbol is going to cause a runtime error. This patch adds `--no-undefined` to the `ld.lld` invocation to guarantee that undefined symbols are always caught as linking errors rather than runtime errors. Reviewed By: arsenm, MaskRay, #amdgpu Differential Revision: https://reviews.llvm.org/D145941 Added: Modified: clang/docs/ReleaseNotes.rst clang/lib/Driver/ToolChains/AMDGPU.cpp clang/test/Driver/amdgpu-toolchain-opencl.cl clang/test/Driver/amdgpu-toolchain.c Removed: ################################################################################ diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 5fae7ce3077a7..4a5d3f8199682 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -231,6 +231,14 @@ Miscellaneous Clang Crashes Fixed Target Specific Changes ----------------------- +AMDGPU Support +^^^^^^^^^^^^^^ + +- Linking for AMDGPU now uses ``--no-undefined`` by default. This causes + undefined symbols in the created module to be a linker error. To prevent this, + pass ``-Wl,--undefined`` if compiling directly, or ``-Xoffload-linker + --undefined`` if using an offloading language. + X86 Support ^^^^^^^^^^^ diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index 08496c1abbc41..99e2fb839221b 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp @@ -543,6 +543,7 @@ void amdgpu::Linker::ConstructJob(Compilation &C, const JobAction &JA, if (C.getDriver().isUsingLTO()) addLTOOptions(getToolChain(), Args, CmdArgs, Output, Inputs[0], C.getDriver().getLTOMode() == LTOK_Thin); + CmdArgs.push_back("--no-undefined"); CmdArgs.push_back("-shared"); CmdArgs.push_back("-o"); CmdArgs.push_back(Output.getFilename()); diff --git a/clang/test/Driver/amdgpu-toolchain-opencl.cl b/clang/test/Driver/amdgpu-toolchain-opencl.cl index 78c477b5bce9d..c4038e00a0e5d 100644 --- a/clang/test/Driver/amdgpu-toolchain-opencl.cl +++ b/clang/test/Driver/amdgpu-toolchain-opencl.cl @@ -25,3 +25,6 @@ // CHK-INC: "-cc1" {{.*}}"-finclude-default-header" "-fdeclare-opencl-builtins" {{.*}}"-x" "cl" // CHK-INC-NOT: "-cc1" {{.*}}"-finclude-default-header" "-fdeclare-opencl-builtins" {{.*}}"-x" "cpp-output" + +// RUN: %clang -### --target=amdgcn-amd-amdhsa-opencl -x cl -emit-llvm -mcpu=fiji %s 2>&1 | FileCheck -check-prefix=CHK-LINK %s +// CHK-LINK: ld.lld{{.*}} "--no-undefined" "-shared" diff --git a/clang/test/Driver/amdgpu-toolchain.c b/clang/test/Driver/amdgpu-toolchain.c index a00c75b83f3e0..3477d50527c66 100644 --- a/clang/test/Driver/amdgpu-toolchain.c +++ b/clang/test/Driver/amdgpu-toolchain.c @@ -6,7 +6,7 @@ // RUN: %clang -### -g --target=amdgcn-mesa-mesa3d -mcpu=kaveri %s 2>&1 | FileCheck -check-prefix=DWARF_VER %s // AS_LINK: "-cc1as" -// AS_LINK: ld.lld{{.*}} "-shared" +// AS_LINK: ld.lld{{.*}} "--no-undefined" "-shared" // DWARF_VER: "-dwarf-version=5" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits