Skip to content

Commit e4f1bb8

Browse files
authored
[Downstream change][clang][driver] Fix -fveclib=ArmPL issue: with -nostdlib do not link against libm (#245)
It's a cherry-pick from the arm-software branch. Downstream issue: #242 Although combining -fveclib=ArmPL with -nostdlib is a rare situation, it should still be supported correctly and should effect in avoidance of linking against libm.
1 parent c826780 commit e4f1bb8

File tree

3 files changed

+17
-3
lines changed

3 files changed

+17
-3
lines changed

clang/lib/Driver/ToolChains/CommonArgs.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -511,17 +511,19 @@ void tools::AddLinkerInputs(const ToolChain &TC, const InputInfoList &Inputs,
511511
//
512512
// 1. On Linux, link only when actually needed.
513513
//
514-
// 2. Prefer libm functions over libamath.
514+
// 2. Prefer libm functions over libamath (when no -nostdlib in use).
515515
//
516516
// 3. Link against libm to resolve libamath dependencies.
517517
//
518518
if (Triple.isOSLinux()) {
519519
CmdArgs.push_back(Args.MakeArgString("--push-state"));
520520
CmdArgs.push_back(Args.MakeArgString("--as-needed"));
521521
}
522-
CmdArgs.push_back(Args.MakeArgString("-lm"));
522+
if (!Args.hasArg(options::OPT_nostdlib))
523+
CmdArgs.push_back(Args.MakeArgString("-lm"));
523524
CmdArgs.push_back(Args.MakeArgString("-lamath"));
524-
CmdArgs.push_back(Args.MakeArgString("-lm"));
525+
if (!Args.hasArg(options::OPT_nostdlib))
526+
CmdArgs.push_back(Args.MakeArgString("-lm"));
525527
if (Triple.isOSLinux())
526528
CmdArgs.push_back(Args.MakeArgString("--pop-state"));
527529
addArchSpecificRPath(TC, Args, CmdArgs);

clang/test/Driver/fveclib.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,11 +116,17 @@
116116
/// Verify that vectorized routines library is being linked in.
117117
// RUN: %clang -### --target=aarch64-pc-windows-msvc -fveclib=ArmPL %s 2>&1 | FileCheck --check-prefix=CHECK-LINKING-ARMPL-MSVC %s
118118
// RUN: %clang -### --target=aarch64-linux-gnu -fveclib=ArmPL %s 2>&1 | FileCheck --check-prefix=CHECK-LINKING-ARMPL-LINUX %s
119+
// RUN: %clang -### --target=aarch64-linux-gnu -fveclib=ArmPL %s -nostdlib 2>&1 | FileCheck --check-prefix=CHECK-LINKING-ARMPL-NOSTDLIB-LINUX %s
119120
// RUN: %clang -### --target=aarch64-linux-gnu -fveclib=ArmPL %s -lamath 2>&1 | FileCheck --check-prefix=CHECK-LINKING-AMATH-BEFORE-ARMPL-LINUX %s
120121
// RUN: %clang -### --target=arm64-apple-darwin -fveclib=ArmPL %s 2>&1 | FileCheck --check-prefix=CHECK-LINKING-ARMPL-DARWIN %s
122+
// RUN: %clang -### --target=arm64-apple-darwin -fveclib=ArmPL -nostdlib %s 2>&1 | FileCheck --check-prefix=CHECK-LINKING-ARMPL-NOSTDLIB-DARWIN %s
121123
// RUN: %clang -### --target=arm64-apple-darwin -fveclib=ArmPL %s -lamath 2>&1 | FileCheck --check-prefix=CHECK-LINKING-AMATH-BEFORE-ARMPL-DARWIN %s
122124
// CHECK-LINKING-ARMPL-LINUX: "--push-state" "--as-needed" "-lm" "-lamath" "-lm" "--pop-state"
125+
// CHECK-LINKING-ARMPL-NOSTDLIB-LINUX: "--push-state" "--as-needed" "-lamath" "--pop-state"
126+
// CHECK-LINKING-ARMPL-NOSTDLIB-LINUX-NOT: "-lm"
123127
// CHECK-LINKING-ARMPL-DARWIN: "-lm" "-lamath" "-lm"
128+
// CHECK-LINKING-ARMPL-NOSTDLIB-DARWIN: "-lamath"
129+
// CHECK-LINKING-ARMPL-NOSTDLIB-DARWIN-NOT: "-lm"
124130
// CHECK-LINKING-ARMPL-MSVC: "--dependent-lib=amath"
125131
// CHECK-LINKING-AMATH-BEFORE-ARMPL-LINUX: "-lamath" {{.*}}"--push-state" "--as-needed" "-lm" "-lamath" "-lm" "--pop-state"
126132
// CHECK-LINKING-AMATH-BEFORE-ARMPL-DARWIN: "-lamath" {{.*}}"-lm" "-lamath" "-lm"

flang/test/Driver/fveclib.f90

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,17 @@
3333

3434
! RUN: %flang -### --target=aarch64-pc-windows-msvc -fveclib=ArmPL %s 2>&1 | FileCheck --check-prefix=CHECK-LINKING-ARMPL-MSVC %s
3535
! RUN: %flang -### --target=aarch64-linux-gnu -fveclib=ArmPL %s 2>&1 | FileCheck --check-prefix=CHECK-LINKING-ARMPL-LINUX %s
36+
! RUN: %flang -### --target=aarch64-linux-gnu -fveclib=ArmPL -nostdlib %s 2>&1 | FileCheck --check-prefix=CHECK-LINKING-ARMPL-NOSTDLIB-LINUX %s
3637
! RUN: %flang -### --target=aarch64-linux-gnu -fveclib=ArmPL %s -lamath 2>&1 | FileCheck --check-prefix=CHECK-LINKING-AMATH-BEFORE-ARMPL-LINUX %s
3738
! RUN: %flang -### --target=arm64-apple-darwin -fveclib=ArmPL %s 2>&1 | FileCheck --check-prefix=CHECK-LINKING-ARMPL-DARWIN %s
39+
! RUN: %flang -### --target=arm64-apple-darwin -fveclib=ArmPL -nostdlib %s 2>&1 | FileCheck --check-prefix=CHECK-LINKING-ARMPL-NOSTDLIB-DARWIN %s
3840
! RUN: %flang -### --target=arm64-apple-darwin -fveclib=ArmPL %s -lamath 2>&1 | FileCheck --check-prefix=CHECK-LINKING-AMATH-BEFORE-ARMPL-DARWIN %s
3941
! CHECK-LINKING-ARMPL-LINUX: "--push-state" "--as-needed" "-lm" "-lamath" "-lm" "--pop-state"
42+
! CHECK-LINKING-ARMPL-NOSTDLIB-LINUX: "--push-state" "--as-needed" "-lamath" "--pop-state"
43+
! CHECK-LINKING-ARMPL-NOSTDLIB-LINUX-NOT: "-lm"
4044
! CHECK-LINKING-ARMPL-DARWIN: "-lm" "-lamath" "-lm"
45+
! CHECK-LINKING-ARMPL-NOSTDLIB-DARWIN: "-lamath"
46+
! CHECK-LINKING-ARMPL-NOSTDLIB-DARWIN-NOT: "-lm"
4147
! CHECK-LINKING-ARMPL-MSVC: "--dependent-lib=amath"
4248
! CHECK-LINKING-AMATH-BEFORE-ARMPL-LINUX: "-lamath" {{.*}}"--push-state" "--as-needed" "-lm" "-lamath" "-lm" "--pop-state"
4349
! CHECK-LINKING-AMATH-BEFORE-ARMPL-DARWIN: "-lamath" {{.*}}"-lm" "-lamath" "-lm"

0 commit comments

Comments
 (0)