https://github.com/androm3da updated https://github.com/llvm/llvm-project/pull/99552
>From 4729e43f3904774dbe5a06ed18a12cbddae8db03 Mon Sep 17 00:00:00 2001 From: Brian Cain <bc...@quicinc.com> Date: Wed, 17 Jul 2024 08:08:30 -0500 Subject: [PATCH] [clang] [hexagon] handle --unwindlib arg Signed-off-by: Brian Cain <bc...@quicinc.com> --- .../clang/Basic/DiagnosticDriverKinds.td | 2 ++ clang/lib/Driver/ToolChains/Hexagon.cpp | 18 ++++++++-- clang/test/Driver/hexagon-toolchain-linux.c | 33 +++++++++++++++++++ 3 files changed, 51 insertions(+), 2 deletions(-) diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td index 359c0de7f811c..2a1f58ade74a2 100644 --- a/clang/include/clang/Basic/DiagnosticDriverKinds.td +++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td @@ -156,6 +156,8 @@ def err_drv_unsupported_rtlib_for_platform : Error< "unsupported runtime library '%0' for platform '%1'">; def err_drv_invalid_unwindlib_name : Error< "invalid unwind library name in argument '%0'">; +def err_drv_unsupported_unwind_for_platform : Error< + "unwind library '%0' is not supported by this platform">; def err_drv_incompatible_unwindlib : Error< "--rtlib=libgcc requires --unwindlib=libgcc">; def err_drv_incompatible_options : Error< diff --git a/clang/lib/Driver/ToolChains/Hexagon.cpp b/clang/lib/Driver/ToolChains/Hexagon.cpp index 12b3b99df7ca1..691d114b7050e 100644 --- a/clang/lib/Driver/ToolChains/Hexagon.cpp +++ b/clang/lib/Driver/ToolChains/Hexagon.cpp @@ -366,11 +366,14 @@ constructHexagonLinkArgs(Compilation &C, const JobAction &JA, options::OPT_t, options::OPT_u_Group}); AddLinkerInputs(HTC, Inputs, Args, CmdArgs, JA); + ToolChain::UnwindLibType UNW = HTC.GetUnwindLibType(Args); + if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) { if (NeedsSanitizerDeps) { linkSanitizerRuntimeDeps(HTC, Args, CmdArgs); - CmdArgs.push_back("-lunwind"); + if (UNW != ToolChain::UNW_None) + CmdArgs.push_back("-lunwind"); } if (NeedsXRayDeps) linkXRayRuntimeDeps(HTC, Args, CmdArgs); @@ -618,13 +621,24 @@ HexagonToolChain::~HexagonToolChain() {} void HexagonToolChain::AddCXXStdlibLibArgs(const ArgList &Args, ArgStringList &CmdArgs) const { CXXStdlibType Type = GetCXXStdlibType(Args); + ToolChain::UnwindLibType UNW = GetUnwindLibType(Args); + if (UNW != ToolChain::UNW_None && UNW != ToolChain::UNW_CompilerRT) { + const Arg *A = Args.getLastArg(options::OPT_unwindlib_EQ); + if (A) { + getDriver().Diag(diag::err_drv_unsupported_unwind_for_platform) + << A->getValue(); + return; + } + } + switch (Type) { case ToolChain::CST_Libcxx: CmdArgs.push_back("-lc++"); if (Args.hasArg(options::OPT_fexperimental_library)) CmdArgs.push_back("-lc++experimental"); CmdArgs.push_back("-lc++abi"); - CmdArgs.push_back("-lunwind"); + if (UNW != ToolChain::UNW_None) + CmdArgs.push_back("-lunwind"); break; case ToolChain::CST_Libstdcxx: diff --git a/clang/test/Driver/hexagon-toolchain-linux.c b/clang/test/Driver/hexagon-toolchain-linux.c index fe32638417ea4..edbd333628747 100644 --- a/clang/test/Driver/hexagon-toolchain-linux.c +++ b/clang/test/Driver/hexagon-toolchain-linux.c @@ -119,3 +119,36 @@ // CHECK010: crt1.o // CHECK010: "-L/tmp" // CHECK010-NOT: "-lstandalone" + +// ----------------------------------------------------------------------------- +// unwindlib +// ----------------------------------------------------------------------------- +// RUN: %clangxx --unwindlib=none \ +// RUN: --target=hexagon-unknown-linux-musl %s -### 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK011 %s +// CHECK011: InstalledDir: [[INSTALLED_DIR:.+]] +// CHECK011: crt1.o +// CHECK011-NOT: "-lunwind" +// CHECK011-NOT: "-lgcc_eh" +// CHECK012-NOT: "-lgcc_s" + + +// RUN: %clangxx --rtlib=compiler-rt --unwindlib=libunwind \ +// RUN: --target=hexagon-unknown-linux-musl %s -### 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK012 %s +// RUN: %clangxx \ +// RUN: --target=hexagon-unknown-linux-musl %s -### 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK012 %s +// CHECK012: InstalledDir: [[INSTALLED_DIR:.+]] +// CHECK012: crt1.o +// CHECK012: "-lunwind" +// CHECK012-NOT: "-lgcc_eh" +// CHECK012-NOT: "-lgcc_s" + +// RUN: not %clangxx --rtlib=compiler-rt --unwindlib=libgcc \ +// RUN: --target=hexagon-unknown-linux-musl %s -### 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK013 %s +// CHECK013: error: unwind library 'libgcc' is not supported by this platform +// CHECK013-NOT: "-lgcc_eh" +// CHECK013-NOT: "-lgcc_s" +// CHECK013-NOT: "-lunwind" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits