From 5a649fc6d489231422ac4cf156c6d041b374d845 Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Thu, 28 May 2020 15:14:02 +0530 Subject: [PATCH] Clang: patch to fix linking of shared libraries --- overlay/llvm-8/clang/genode.patch | 39 ++++++++++++++++++------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/overlay/llvm-8/clang/genode.patch b/overlay/llvm-8/clang/genode.patch index 140ec68..a382eb8 100644 --- a/overlay/llvm-8/clang/genode.patch +++ b/overlay/llvm-8/clang/genode.patch @@ -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(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 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(*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 // 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