llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-backend-powerpc Author: None (honeygoyal) <details> <summary>Changes</summary> ## Description [Atomic] the access size (8 bytes) exceeds the max lock-free size (4 bytes) for 32-bit. - Suppress -Watomic-alignment warnings by not treating them as errors - Added -latomic when sanitizer flag is enabled and processor is 32-bit - Adding the -latomic flag is essential for ensuring that atomic operations required by sanitizers are properly linked on 32-bit AIX systems. - This change addresses linker warnings, enhances build stability, and ensures the reliable functioning of sanitizers, thereby improving the overall quality and robustness of the build process. Driver Test Case (AIX.cpp) - Test Case 1: Sanitizer enabled on 32-bit AIX – -latomic should be added with diagnostic. Test Case 2: Sanitizer disabled on 32-bit AIX – -latomic should not be added. --- Full diff: https://github.com/llvm/llvm-project/pull/125388.diff 3 Files Affected: - (modified) clang/lib/Driver/ToolChains/AIX.cpp (+5-1) - (modified) clang/test/Driver/aix-ld.c (+18) - (modified) compiler-rt/lib/sanitizer_common/CMakeLists.txt (+3) ``````````diff diff --git a/clang/lib/Driver/ToolChains/AIX.cpp b/clang/lib/Driver/ToolChains/AIX.cpp index 09a8dc2f4fa5dd8..493983468b0bcf9 100644 --- a/clang/lib/Driver/ToolChains/AIX.cpp +++ b/clang/lib/Driver/ToolChains/AIX.cpp @@ -232,7 +232,7 @@ void aix::Linker::ConstructJob(Compilation &C, const JobAction &JA, // Specify linker input file(s). AddLinkerInputs(ToolChain, Inputs, Args, CmdArgs, JA); - + const SanitizerArgs &Sanitize = ToolChain.getSanitizerArgs(Args); if (D.isUsingLTO()) { assert(!Inputs.empty() && "Must have at least one input."); // Find the first filename InputInfo object. @@ -338,6 +338,10 @@ void aix::Linker::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back("-lpthread"); } const char *Exec = Args.MakeArgString(ToolChain.GetLinkerPath()); + + if (Sanitize.hasAnySanitizer() && IsArch32Bit) { + CmdArgs.push_back("-latomic"); + } C.addCommand(std::make_unique<Command>(JA, *this, ResponseFileSupport::None(), Exec, CmdArgs, Inputs, Output)); } diff --git a/clang/test/Driver/aix-ld.c b/clang/test/Driver/aix-ld.c index 7e0f2bf91e06ee5..de65597bcf5d914 100644 --- a/clang/test/Driver/aix-ld.c +++ b/clang/test/Driver/aix-ld.c @@ -1120,3 +1120,21 @@ // RUN: -c \ // RUN: | FileCheck --check-prefixes=CHECK-K-UNUSED %s // CHECK-K-UNUSED: clang: warning: -K: 'linker' input unused [-Wunused-command-line-argument] + +// Check No Sanitizer on 32-bit AIX +// RUN: %if target={{.*aix.*}} %{ \ +// RUN: %clang -target powerpc-ibm-aix -m32 %s -### 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-LD32-NO-SANITIZER %s \ +// RUN: %} +// %if target={{.*aix.*}} %{ +// CHECK-LD32-NO-SANITIZER-NOT: "-latomic" +// %} + +// Check enable AddressSanitizer on 32-bit AIX +// RUN: %if target={{.*aix.*}} %{ \ +// RUN: %clang -target powerpc-ibm-aix -m32 -fsanitize=address %s -### 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-LD32-ASAN %s \ +// RUN: %} +// %if target={{.*aix.*}} %{ +// CHECK-LD32-ASAN: "-latomic" +// %} diff --git a/compiler-rt/lib/sanitizer_common/CMakeLists.txt b/compiler-rt/lib/sanitizer_common/CMakeLists.txt index 09391e4f5f3704b..79eeb31c035a282 100644 --- a/compiler-rt/lib/sanitizer_common/CMakeLists.txt +++ b/compiler-rt/lib/sanitizer_common/CMakeLists.txt @@ -239,6 +239,9 @@ append_list_if(SANITIZER_LIMIT_FRAME_SIZE -Wframe-larger-than=570 append_list_if(COMPILER_RT_HAS_WGLOBAL_CONSTRUCTORS_FLAG -Wglobal-constructors SANITIZER_CFLAGS) +# Suppress -Watomic-alignment warnings by not treating them as errors +list(APPEND SANITIZER_CFLAGS "-Wno-error=atomic-alignment") + if(APPLE) set(OS_OPTION OS ${SANITIZER_COMMON_SUPPORTED_OS}) endif() `````````` </details> https://github.com/llvm/llvm-project/pull/125388 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits