Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 371961 | Differences between
and this patch

Collapse All | Expand All

(-)a/include/clang/Basic/DiagnosticDriverKinds.td (+2 lines)
Lines 22-27 def err_drv_unknown_stdin_type_clang_cl : Error< Link Here
22
def err_drv_unknown_language : Error<"language not recognized: '%0'">;
22
def err_drv_unknown_language : Error<"language not recognized: '%0'">;
23
def err_drv_invalid_arch_name : Error<
23
def err_drv_invalid_arch_name : Error<
24
  "invalid arch name '%0'">;
24
  "invalid arch name '%0'">;
25
def err_drv_invalid_linker_name : Error<
26
  "invalid linker name in argument '%0'">;
25
def err_drv_invalid_rtlib_name : Error<
27
def err_drv_invalid_rtlib_name : Error<
26
  "invalid runtime library name in argument '%0'">;
28
  "invalid runtime library name in argument '%0'">;
27
def err_drv_unsupported_rtlib_for_platform : Error<
29
def err_drv_unsupported_rtlib_for_platform : Error<
(-)a/include/clang/Driver/Options.td (-1 / +1 lines)
Lines 1542-1548 def fprofile_dir : Joined<["-"], "fprofile-dir=">, Group<clang_ignored_f_Group>; Link Here
1542
1542
1543
defm profile_use : BooleanFFlag<"profile-use">, Group<clang_ignored_f_Group>;
1543
defm profile_use : BooleanFFlag<"profile-use">, Group<clang_ignored_f_Group>;
1544
def fprofile_use_EQ : Joined<["-"], "fprofile-use=">, Group<clang_ignored_f_Group>;
1544
def fprofile_use_EQ : Joined<["-"], "fprofile-use=">, Group<clang_ignored_f_Group>;
1545
def fuse_ld_EQ : Joined<["-"], "fuse-ld=">, Group<clang_ignored_f_Group>;
1545
def fuse_ld_EQ : Joined<["-"], "fuse-ld=">, Group<f_Group>;
1546
1546
1547
defm align_functions : BooleanFFlag<"align-functions">, Group<clang_ignored_f_Group>;
1547
defm align_functions : BooleanFFlag<"align-functions">, Group<clang_ignored_f_Group>;
1548
def falign_functions_EQ : Joined<["-"], "falign-functions=">, Group<clang_ignored_f_Group>;
1548
def falign_functions_EQ : Joined<["-"], "falign-functions=">, Group<clang_ignored_f_Group>;
(-)a/include/clang/Driver/ToolChain.h (+4 lines)
Lines 158-163 public: Link Here
158
  std::string GetFilePath(const char *Name) const;
158
  std::string GetFilePath(const char *Name) const;
159
  std::string GetProgramPath(const char *Name) const;
159
  std::string GetProgramPath(const char *Name) const;
160
160
161
  /// Returns the linker path, respecting the -fuse-ld= argument to determine
162
  /// the linker suffix or name.
163
  std::string GetLinkerPath() const;
164
161
  /// \brief Dispatch to the specific toolchain for verbose printing.
165
  /// \brief Dispatch to the specific toolchain for verbose printing.
162
  ///
166
  ///
163
  /// This is used when handling the verbose option to print detailed,
167
  /// This is used when handling the verbose option to print detailed,
(-)a/lib/Driver/ToolChain.cpp (+25 lines)
Lines 15-20 Link Here
15
#include "clang/Driver/Options.h"
15
#include "clang/Driver/Options.h"
16
#include "clang/Driver/SanitizerArgs.h"
16
#include "clang/Driver/SanitizerArgs.h"
17
#include "clang/Driver/ToolChain.h"
17
#include "clang/Driver/ToolChain.h"
18
#include "llvm/ADT/SmallString.h"
18
#include "llvm/ADT/StringSwitch.h"
19
#include "llvm/ADT/StringSwitch.h"
19
#include "llvm/Option/Arg.h"
20
#include "llvm/Option/Arg.h"
20
#include "llvm/Option/ArgList.h"
21
#include "llvm/Option/ArgList.h"
Lines 147-152 std::string ToolChain::GetProgramPath(const char *Name) const { Link Here
147
  return D.GetProgramPath(Name, *this);
148
  return D.GetProgramPath(Name, *this);
148
}
149
}
149
150
151
std::string ToolChain::GetLinkerPath() const {
152
  if (Arg *A = Args.getLastArg(options::OPT_fuse_ld_EQ)) {
153
    StringRef Suffix = A->getValue();
154
155
    // If we're passed -fuse-ld= with no argument, or with the argument ld,
156
    // then use whatever the default system linker is.
157
    if (Suffix.empty() || Suffix == "ld")
158
      return GetProgramPath("ld");
159
160
    llvm::SmallString<8> LinkerName("ld.");
161
    LinkerName.append(Suffix);
162
163
    std::string LinkerPath(GetProgramPath(LinkerName.c_str()));
164
    if (llvm::sys::fs::exists(LinkerPath))
165
      return LinkerPath;
166
167
    getDriver().Diag(diag::err_drv_invalid_linker_name) << A->getAsString(Args);
168
    return "";
169
  }
170
171
  return GetProgramPath("ld");
172
}
173
174
150
types::ID ToolChain::LookupTypeForExtension(const char *Ext) const {
175
types::ID ToolChain::LookupTypeForExtension(const char *Ext) const {
151
  return types::lookupTypeForExtension(Ext);
176
  return types::lookupTypeForExtension(Ext);
152
}
177
}
(-)a/lib/Driver/ToolChains.cpp (-1 / +1 lines)
Lines 3001-3007 Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) Link Here
3001
  PPaths.push_back(Twine(GCCInstallation.getParentLibPath() + "/../" +
3001
  PPaths.push_back(Twine(GCCInstallation.getParentLibPath() + "/../" +
3002
                         GCCInstallation.getTriple().str() + "/bin").str());
3002
                         GCCInstallation.getTriple().str() + "/bin").str());
3003
3003
3004
  Linker = GetProgramPath("ld");
3004
  Linker = GetLinkerPath();
3005
3005
3006
  Distro Distro = DetectDistro(Arch);
3006
  Distro Distro = DetectDistro(Arch);
3007
3007
(-)a/lib/Driver/Tools.cpp (-10 / +9 lines)
Lines 5614-5620 void darwin::Link::ConstructJob(Compilation &C, const JobAction &JA, Link Here
5614
  Args.AddAllArgs(CmdArgs, options::OPT_F);
5614
  Args.AddAllArgs(CmdArgs, options::OPT_F);
5615
5615
5616
  const char *Exec =
5616
  const char *Exec =
5617
    Args.MakeArgString(getToolChain().GetProgramPath("ld"));
5617
    Args.MakeArgString(getToolChain().GetLinkerPath());
5618
  C.addCommand(new Command(JA, *this, Exec, CmdArgs));
5618
  C.addCommand(new Command(JA, *this, Exec, CmdArgs));
5619
}
5619
}
5620
5620
Lines 5804-5810 void solaris::Link::ConstructJob(Compilation &C, const JobAction &JA, Link Here
5804
  addProfileRT(getToolChain(), Args, CmdArgs);
5804
  addProfileRT(getToolChain(), Args, CmdArgs);
5805
5805
5806
  const char *Exec =
5806
  const char *Exec =
5807
    Args.MakeArgString(getToolChain().GetProgramPath("ld"));
5807
    Args.MakeArgString(getToolChain().GetLinkerPath());
5808
  C.addCommand(new Command(JA, *this, Exec, CmdArgs));
5808
  C.addCommand(new Command(JA, *this, Exec, CmdArgs));
5809
}
5809
}
5810
5810
Lines 5912-5918 void auroraux::Link::ConstructJob(Compilation &C, const JobAction &JA, Link Here
5912
  addProfileRT(getToolChain(), Args, CmdArgs);
5912
  addProfileRT(getToolChain(), Args, CmdArgs);
5913
5913
5914
  const char *Exec =
5914
  const char *Exec =
5915
    Args.MakeArgString(getToolChain().GetProgramPath("ld"));
5915
    Args.MakeArgString(getToolChain().GetLinkerPath());
5916
  C.addCommand(new Command(JA, *this, Exec, CmdArgs));
5916
  C.addCommand(new Command(JA, *this, Exec, CmdArgs));
5917
}
5917
}
5918
5918
Lines 6114-6120 void openbsd::Link::ConstructJob(Compilation &C, const JobAction &JA, Link Here
6114
  }
6114
  }
6115
6115
6116
  const char *Exec =
6116
  const char *Exec =
6117
    Args.MakeArgString(getToolChain().GetProgramPath("ld"));
6117
    Args.MakeArgString(getToolChain().GetLinkerPath());
6118
  C.addCommand(new Command(JA, *this, Exec, CmdArgs));
6118
  C.addCommand(new Command(JA, *this, Exec, CmdArgs));
6119
}
6119
}
6120
6120
Lines 6250-6256 void bitrig::Link::ConstructJob(Compilation &C, const JobAction &JA, Link Here
6250
  }
6250
  }
6251
6251
6252
  const char *Exec =
6252
  const char *Exec =
6253
    Args.MakeArgString(getToolChain().GetProgramPath("ld"));
6253
    Args.MakeArgString(getToolChain().GetLinkerPath());
6254
  C.addCommand(new Command(JA, *this, Exec, CmdArgs));
6254
  C.addCommand(new Command(JA, *this, Exec, CmdArgs));
6255
}
6255
}
6256
6256
Lines 6514-6520 void freebsd::Link::ConstructJob(Compilation &C, const JobAction &JA, Link Here
6514
  addProfileRT(ToolChain, Args, CmdArgs);
6514
  addProfileRT(ToolChain, Args, CmdArgs);
6515
6515
6516
  const char *Exec =
6516
  const char *Exec =
6517
    Args.MakeArgString(ToolChain.GetProgramPath("ld"));
6517
    Args.MakeArgString(getToolChain().GetLinkerPath());
6518
  C.addCommand(new Command(JA, *this, Exec, CmdArgs));
6518
  C.addCommand(new Command(JA, *this, Exec, CmdArgs));
6519
}
6519
}
6520
6520
Lines 6767-6773 void netbsd::Link::ConstructJob(Compilation &C, const JobAction &JA, Link Here
6767
6767
6768
  addProfileRT(getToolChain(), Args, CmdArgs);
6768
  addProfileRT(getToolChain(), Args, CmdArgs);
6769
6769
6770
  const char *Exec = Args.MakeArgString(getToolChain().GetProgramPath("ld"));
6770
  const char *Exec = Args.MakeArgString(getToolChain().GetLinkerPath());
6771
  C.addCommand(new Command(JA, *this, Exec, CmdArgs));
6771
  C.addCommand(new Command(JA, *this, Exec, CmdArgs));
6772
}
6772
}
6773
6773
Lines 7325-7331 void minix::Link::ConstructJob(Compilation &C, const JobAction &JA, Link Here
7325
         Args.MakeArgString(getToolChain().GetFilePath("crtend.o")));
7325
         Args.MakeArgString(getToolChain().GetFilePath("crtend.o")));
7326
  }
7326
  }
7327
7327
7328
  const char *Exec = Args.MakeArgString(getToolChain().GetProgramPath("ld"));
7328
  const char *Exec = Args.MakeArgString(getToolChain().GetLinkerPath());
7329
  C.addCommand(new Command(JA, *this, Exec, CmdArgs));
7329
  C.addCommand(new Command(JA, *this, Exec, CmdArgs));
7330
}
7330
}
7331
7331
Lines 7503-7509 void dragonfly::Link::ConstructJob(Compilation &C, const JobAction &JA, Link Here
7503
7503
7504
  addProfileRT(getToolChain(), Args, CmdArgs);
7504
  addProfileRT(getToolChain(), Args, CmdArgs);
7505
7505
7506
  const char *Exec =
7506
  const char *Exec = Args.MakeArgString(getToolChain().GetLinkerPath());
7507
    Args.MakeArgString(getToolChain().GetProgramPath("ld"));
7508
  C.addCommand(new Command(JA, *this, Exec, CmdArgs));
7507
  C.addCommand(new Command(JA, *this, Exec, CmdArgs));
7509
}
7508
}
7510
7509
(-)a/test/Driver/fuse-ld.c (+63 lines)
Line 0 Link Here
1
// RUN: %clang %s -### \
2
// RUN:     -target x86_64-unknown-freebsd 2>&1 \
3
// RUN:   | FileCheck %s --check-prefix=CHECK-FREEBSD-LD
4
// CHECK-FREEBSD-LD: ld
5
6
// RUN: %clang %s -### -fuse-ld=bfd \
7
// RUN:     --sysroot=%S/Inputs/basic_freebsd_tree \
8
// RUN:     -target x86_64-unknown-freebsd \
9
// RUN:     -B%S/Inputs/basic_freebsd_tree/usr/bin 2>&1 \
10
// RUN:   | FileCheck %s -check-prefix=CHECK-FREEBSD-BFD
11
// CHECK-FREEBSD-BFD: Inputs/basic_freebsd_tree/usr/bin/ld.bfd
12
13
// RUN: %clang %s -### -fuse-ld=gold \
14
// RUN:     --sysroot=%S/Inputs/basic_freebsd_tree \
15
// RUN:     -target x86_64-unknown-freebsd \
16
// RUN:     -B%S/Inputs/basic_freebsd_tree/usr/bin 2>&1 \
17
// RUN:   | FileCheck %s -check-prefix=CHECK-FREEBSD-GOLD
18
// CHECK-FREEBSD-GOLD: Inputs/basic_freebsd_tree/usr/bin/ld.gold
19
20
// RUN: %clang %s -### -fuse-ld=plib \
21
// RUN:     --sysroot=%S/Inputs/basic_freebsd_tree \
22
// RUN:     -target x86_64-unknown-freebsd \
23
// RUN:     -B%S/Inputs/basic_freebsd_tree/usr/bin 2>&1 \
24
// RUN:   | FileCheck %s -check-prefix=CHECK-FREEBSD-PLIB
25
// CHECK-FREEBSD-PLIB: error: invalid linker name
26
27
28
29
// RUN: %clang %s -### \
30
// RUN:     -target arm-linux-androideabi \
31
// RUN:     -B%S/Inputs/basic_android_tree/bin 2>&1 \
32
// RUN:   | FileCheck %s --check-prefix=CHECK-ANDROID-ARM-LD
33
// CHECK-ANDROID-ARM-LD: Inputs/basic_android_tree/bin/arm-linux-androideabi-ld
34
35
// RUN: %clang %s -### -fuse-ld=bfd \
36
// RUN:     -target arm-linux-androideabi \
37
// RUN:     -B%S/Inputs/basic_android_tree/bin 2>&1 \
38
// RUN:   | FileCheck %s -check-prefix=CHECK-ANDROID-ARM-BFD
39
// CHECK-ANDROID-ARM-BFD: Inputs/basic_android_tree/bin/arm-linux-androideabi-ld.bfd
40
41
// RUN: %clang %s -### -fuse-ld=gold \
42
// RUN:     -target arm-linux-androideabi \
43
// RUN:     -B%S/Inputs/basic_android_tree/bin 2>&1 \
44
// RUN:   | FileCheck %s -check-prefix=CHECK-ANDROID-ARM-GOLD
45
// CHECK-ANDROID-ARM-GOLD: Inputs/basic_android_tree/bin/arm-linux-androideabi-ld.gold
46
47
// RUN: %clang %s -### \
48
// RUN:     -target arm-linux-androideabi \
49
// RUN:     -gcc-toolchain %S/Inputs/basic_android_tree 2>&1 \
50
// RUN:   | FileCheck %s --check-prefix=CHECK-ANDROID-ARM-LD-TC
51
// CHECK-ANDROID-ARM-LD-TC: Inputs/basic_android_tree/lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld
52
53
// RUN: %clang %s -### -fuse-ld=bfd \
54
// RUN:     -target arm-linux-androideabi \
55
// RUN:     -gcc-toolchain %S/Inputs/basic_android_tree 2>&1 \
56
// RUN:   | FileCheck %s -check-prefix=CHECK-ANDROID-ARM-BFD-TC
57
// CHECK-ANDROID-ARM-BFD-TC: Inputs/basic_android_tree/lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld.bfd
58
59
// RUN: %clang %s -### -fuse-ld=gold \
60
// RUN:     -target arm-linux-androideabi \
61
// RUN:     -gcc-toolchain %S/Inputs/basic_android_tree 2>&1 \
62
// RUN:   | FileCheck %s -check-prefix=CHECK-ANDROID-ARM-GOLD-TC
63
// CHECK-ANDROID-ARM-GOLD-TC: Inputs/basic_android_tree/lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld.gold

Return to bug 371961