2
0
Fork 0

Clang: patch to fix linking of shared libraries

This commit is contained in:
Ehmry - 2020-05-28 15:14:02 +05:30
parent 2d0ba4b8a0
commit 5a649fc6d4
1 changed files with 23 additions and 16 deletions

View File

@ -1,5 +1,5 @@
diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td
index d02d9744d78..b57a7cb0507 100644
index d02d9744d..b57a7cb05 100644
--- a/include/clang/Driver/Options.td
+++ b/include/clang/Driver/Options.td
@@ -2452,6 +2452,7 @@ def nolibc : Flag<["-"], "nolibc">;
@ -11,7 +11,7 @@ index d02d9744d78..b57a7cb0507 100644
def noseglinkedit : Flag<["-"], "noseglinkedit">;
def nostartfiles : Flag<["-"], "nostartfiles">;
diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp
index 3c139d72479..89d6df3f5b4 100644
index 3c139d724..89d6df3f5 100644
--- a/lib/Basic/Targets.cpp
+++ b/lib/Basic/Targets.cpp
@@ -147,6 +147,8 @@ TargetInfo *AllocateTarget(const llvm::Triple &Triple,
@ -42,7 +42,7 @@ index 3c139d72479..89d6df3f5b4 100644
return new KFreeBSDTargetInfo<X86_64TargetInfo>(Triple, Opts);
case llvm::Triple::Solaris:
diff --git a/lib/Basic/Targets/OSTargets.h b/lib/Basic/Targets/OSTargets.h
index 09867d82c38..f67151a13e8 100644
index 09867d82c..f67151a13 100644
--- a/lib/Basic/Targets/OSTargets.h
+++ b/lib/Basic/Targets/OSTargets.h
@@ -760,6 +760,26 @@ public:
@ -73,7 +73,7 @@ index 09867d82c38..f67151a13e8 100644
template <typename Target>
class LLVM_LIBRARY_VISIBILITY WebAssemblyOSTargetInfo
diff --git a/lib/Driver/CMakeLists.txt b/lib/Driver/CMakeLists.txt
index 4793a1f90b2..4691b898eb2 100644
index 4793a1f90..4691b898e 100644
--- a/lib/Driver/CMakeLists.txt
+++ b/lib/Driver/CMakeLists.txt
@@ -44,6 +44,7 @@ add_clang_library(clangDriver
@ -85,7 +85,7 @@ index 4793a1f90b2..4691b898eb2 100644
ToolChains/Haiku.cpp
ToolChains/HIP.cpp
diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp
index a784e218f13..881b78abc4d 100644
index a784e218f..881b78abc 100644
--- a/lib/Driver/Driver.cpp
+++ b/lib/Driver/Driver.cpp
@@ -22,6 +22,7 @@
@ -107,7 +107,7 @@ index a784e218f13..881b78abc4d 100644
TC = llvm::make_unique<toolchains::AMDGPUToolChain>(*this, Target, Args);
break;
diff --git a/lib/Driver/SanitizerArgs.cpp b/lib/Driver/SanitizerArgs.cpp
index 1a46073aaa3..72b6f7389a3 100644
index 1a46073aa..72b6f7389 100644
--- a/lib/Driver/SanitizerArgs.cpp
+++ b/lib/Driver/SanitizerArgs.cpp
@@ -693,7 +693,7 @@ SanitizerArgs::SanitizerArgs(const ToolChain &TC,
@ -121,10 +121,10 @@ index 1a46073aaa3..72b6f7389a3 100644
StringRef S = A->getValue();
diff --git a/lib/Driver/ToolChains/Genode.cpp b/lib/Driver/ToolChains/Genode.cpp
new file mode 100644
index 00000000000..91cb8362a14
index 000000000..cf87b10ba
--- /dev/null
+++ b/lib/Driver/ToolChains/Genode.cpp
@@ -0,0 +1,138 @@
@@ -0,0 +1,145 @@
+//===--- Genode.cpp - Genode ToolChain Implementations ----------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
@ -201,9 +201,14 @@ index 00000000000..91cb8362a14
+ if (Args.hasArg(options::OPT_static)) {
+ CmdArgs.push_back("-Bstatic");
+ } else {
+ CmdArgs.push_back(Args.MakeArgString("-T" + D.SysRoot + "/ld/genode_dyn.ld"));
+ CmdArgs.push_back(Args.MakeArgString("--dynamic-list=" + D.SysRoot + "/ld/genode_dyn.dl"));
+ CmdArgs.push_back("--dynamic-linker=ld.lib.so");
+ if (Args.hasArg(options::OPT_shared)) {
+ CmdArgs.push_back(Args.MakeArgString("-shared"));
+ CmdArgs.push_back(Args.MakeArgString("-T" + D.SysRoot + "/ld/genode_rel.ld"));
+ } else {
+ CmdArgs.push_back(Args.MakeArgString("-T" + D.SysRoot + "/ld/genode_dyn.ld"));
+ CmdArgs.push_back(Args.MakeArgString("--dynamic-list=" + D.SysRoot + "/ld/genode_dyn.dl"));
+ CmdArgs.push_back("--dynamic-linker=ld.lib.so");
+ }
+ if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) {
+ CmdArgs.push_back("-l:ld.lib.so");
+ }
@ -220,7 +225,9 @@ index 00000000000..91cb8362a14
+
+ if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs, options::OPT_noposix)) {
+ CmdArgs.push_back("-lc");
+ CmdArgs.push_back("-lposix");
+ if (!Args.hasArg(options::OPT_shared)) {
+ CmdArgs.push_back("-lposix");
+ }
+ }
+
+ const char *Exec = Args.MakeArgString(ToolChain.GetLinkerPath());
@ -265,7 +272,7 @@ index 00000000000..91cb8362a14
+}
diff --git a/lib/Driver/ToolChains/Genode.h b/lib/Driver/ToolChains/Genode.h
new file mode 100644
index 00000000000..144f4f99abe
index 000000000..144f4f99a
--- /dev/null
+++ b/lib/Driver/ToolChains/Genode.h
@@ -0,0 +1,69 @@
@ -339,7 +346,7 @@ index 00000000000..144f4f99abe
+
+#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_GENODE_H
diff --git a/lib/Frontend/InitHeaderSearch.cpp b/lib/Frontend/InitHeaderSearch.cpp
index 67842b5dca2..26a2c65fec2 100644
index 67842b5dc..26a2c65fe 100644
--- a/lib/Frontend/InitHeaderSearch.cpp
+++ b/lib/Frontend/InitHeaderSearch.cpp
@@ -221,6 +221,7 @@ void InitHeaderSearch::AddDefaultCIncludePaths(const llvm::Triple &triple,
@ -360,7 +367,7 @@ index 67842b5dca2..26a2c65fec2 100644
// <isysroot> gets prepended later in AddPath().
diff --git a/test/Driver/genode.c b/test/Driver/genode.c
new file mode 100644
index 00000000000..e69de29bb2d
index 000000000..e69de29bb
diff --git a/test/Driver/genode.cpp b/test/Driver/genode.cpp
new file mode 100644
index 00000000000..e69de29bb2d
index 000000000..e69de29bb