summaryrefslogtreecommitdiffstats
path: root/recipes-devtools/clang/clang/0014-clang-Fix-ldso-for-musl-on-x86-and-x32-architectures.patch
blob: 3269c3bc53dcca1b594507bbf20ba016de7d9d3c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
From 08fe42cc0d64931655a72ee9e11d7ce1035c8065 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Wed, 16 Aug 2017 15:16:15 -0700
Subject: [PATCH] clang: Fix ldso for musl on x86 and x32 architectures

x32 linker is called ld-musl-x32.so.1 and x86 linker
is called ld-musl-i386.so.1, Currently, linker for
x86 is returned as ld-musl-i586.so.1, when default
arch is i586, which is not the right thing

Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
 clang/lib/Driver/ToolChains/Linux.cpp | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp
index d95da11e351..0a4644dab9f 100644
--- a/clang/lib/Driver/ToolChains/Linux.cpp
+++ b/clang/lib/Driver/ToolChains/Linux.cpp
@@ -519,6 +519,7 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
   if (Triple.isMusl()) {
     std::string ArchName;
     bool IsArm = false;
+    bool isX32 = false;
 
     switch (Arch) {
     case llvm::Triple::arm:
@@ -531,6 +532,13 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
       ArchName = "armeb";
       IsArm = true;
       break;
+    case llvm::Triple::x86:
+      ArchName = "i386";
+      break;
+    case llvm::Triple::x86_64:
+      isX32 = Triple.getEnvironment() == llvm::Triple::GNUX32;
+      ArchName = isX32 ? "x32" : Triple.getArchName().str();
+      break;
     default:
       ArchName = Triple.getArchName().str();
     }