From 422f10869cbb8d62cc5b4c71dc5a861ed43fd55e Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Thu, 9 Jul 2015 00:24:44 -0700 Subject: clang: Fix dynamic linker name for arm hard-float OE depends on commandline option to decide on hf ABI unlike other distros which use target triplet *-*-gnueabihf and clang driver only reacted to triplet and not cmdline options, this patch makes it do that as well Signed-off-by: Khem Raj --- ...t-dynamic-linker-when-hard-float-ABI-is-e.patch | 40 ++++++++++++++++++++++ recipes-devtools/clang/clang_git.bb | 1 + 2 files changed, 41 insertions(+) create mode 100644 recipes-devtools/clang/clang/0001-Choose-right-dynamic-linker-when-hard-float-ABI-is-e.patch diff --git a/recipes-devtools/clang/clang/0001-Choose-right-dynamic-linker-when-hard-float-ABI-is-e.patch b/recipes-devtools/clang/clang/0001-Choose-right-dynamic-linker-when-hard-float-ABI-is-e.patch new file mode 100644 index 0000000..17f5fde --- /dev/null +++ b/recipes-devtools/clang/clang/0001-Choose-right-dynamic-linker-when-hard-float-ABI-is-e.patch @@ -0,0 +1,40 @@ +From 19a19feb6bd13586463597a826bf6cda9af0e05b Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Wed, 8 Jul 2015 23:25:36 -0700 +Subject: [PATCH] Choose right dynamic linker when hard float ABI is expressed + on commandline + +Currently trigger to select hard-float linker is only based of -gnueahf +appearing in target triplet, but we should also select it when hardfloat +is requested via cmdline + +Signed-off-by: Khem Raj +--- + lib/Driver/Tools.cpp | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/tools/clang/lib/Driver/Tools.cpp b/tools/clang/lib/Driver/Tools.cpp +index 756600e..89a9a64 100644 +--- a/tools/clang/lib/Driver/Tools.cpp ++++ b/tools/clang/lib/Driver/Tools.cpp +@@ -7715,13 +7715,15 @@ static std::string getLinuxDynamicLinker(const ArgList &Args, + return "/lib/ld-linux-aarch64_be.so.1"; + else if (ToolChain.getArch() == llvm::Triple::arm || + ToolChain.getArch() == llvm::Triple::thumb) { +- if (ToolChain.getTriple().getEnvironment() == llvm::Triple::GNUEABIHF) ++ if (ToolChain.getTriple().getEnvironment() == llvm::Triple::GNUEABIHF || ++ tools::arm::getARMFloatABI(ToolChain.getDriver(), Args, ToolChain.getTriple()) == "hard") + return "/lib/ld-linux-armhf.so.3"; + else + return "/lib/ld-linux.so.3"; + } else if (ToolChain.getArch() == llvm::Triple::armeb || + ToolChain.getArch() == llvm::Triple::thumbeb) { +- if (ToolChain.getTriple().getEnvironment() == llvm::Triple::GNUEABIHF) ++ if (ToolChain.getTriple().getEnvironment() == llvm::Triple::GNUEABIHF || ++ tools::arm::getARMFloatABI(ToolChain.getDriver(), Args, ToolChain.getTriple()) == "hard") + return "/lib/ld-linux-armhf.so.3"; /* TODO: check which dynamic linker name. */ + else + return "/lib/ld-linux.so.3"; /* TODO: check which dynamic linker name. */ +-- +2.1.4 + diff --git a/recipes-devtools/clang/clang_git.bb b/recipes-devtools/clang/clang_git.bb index 638096b..55cd4bb 100644 --- a/recipes-devtools/clang/clang_git.bb +++ b/recipes-devtools/clang/clang_git.bb @@ -15,6 +15,7 @@ LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=4c0bc17c954e99fd547528d938832bfa; \ SRC_URI = "git://github.com/llvm-mirror/llvm.git;branch=${BRANCH};name=llvm \ git://github.com/llvm-mirror/clang.git;branch=${BRANCH};destsuffix=git/tools/clang;name=clang \ file://0001-Remove-CMAKE_CROSSCOMPILING-so-it-can-cross-compile.patch \ + file://0001-Choose-right-dynamic-linker-when-hard-float-ABI-is-e.patch \ " SRCREV_llvm = "08709687efd951d1d6c3ad5f8d518129c068c737" -- cgit v1.2.3-54-g00ecf