On Mon, Jul 04, 2016 at 06:00:38PM +0200, Stefan Kempf wrote:
> ping?
looking at gcc -dumpspecs, this makes sense. ok
i'm working on the same thing for gcc 4.9 now (sparc64 for a start)
>
> Stefan Kempf wrote:
> > clang currently links against /usr/lib/crt0.o when building
> > a binary with the -static -pie options. That makes such
> > programs segfault on startup (gcc 4.9 seems to have the same
> > problem).
> >
> > When building a static PIE program, we need to link against
> > /usr/lib/rcrt0.o, as shown below. Bitrig has this part also
> > in their local llvm tree. I'll try to get it into upstream for
> > clang 3.9 as well.
> >
> > --- tools/clang/lib/Driver/Tools.cpp.orig Fri Feb 12 23:51:41 2016
> > +++ tools/clang/lib/Driver/Tools.cpp Sun Jun 26 20:24:44 2016
> > @@ -7600,6 +7600,10 @@ void openbsd::Linker::ConstructJob(Compilation &C,
> > con
> > if (Args.hasArg(options::OPT_pg))
> > CmdArgs.push_back(
> > Args.MakeArgString(getToolChain().GetFilePath("gcrt0.o")));
> > + else if (Args.hasArg(options::OPT_static) &&
> > + !Args.hasArg(options::OPT_nopie))
> > + CmdArgs.push_back(
> > + Args.MakeArgString(getToolChain().GetFilePath("rcrt0.o")));
> > else
> > CmdArgs.push_back(
> > Args.MakeArgString(getToolChain().GetFilePath("crt0.o")));
> >
> > Full diff against the ports tree below.
> >
> > ok?
> >
> > Index: Makefile
> > ===================================================================
> > RCS file: /cvs/ports/devel/llvm/Makefile,v
> > retrieving revision 1.114
> > diff -u -p -r1.114 Makefile
> > --- Makefile 24 May 2016 07:53:23 -0000 1.114
> > +++ Makefile 27 Jun 2016 17:24:32 -0000
> > @@ -11,7 +11,7 @@ COMMENT = modular, fast C/C++/ObjC compi
> > LLVM_V = 3.8.0
> > DISTNAME = llvm-${LLVM_V}.src
> > PKGNAME = llvm-${LLVM_V}
> > -REVISION = 1
> > +REVISION = 2
> > CATEGORIES = devel
> > DISTFILES = llvm-${LLVM_V}.src${EXTRACT_SUFX} \
> > cfe-${LLVM_V}.src${EXTRACT_SUFX}
> > Index: patches/patch-tools_clang_lib_Driver_Tools_cpp
> > ===================================================================
> > RCS file:
> > /cvs/ports/devel/llvm/patches/patch-tools_clang_lib_Driver_Tools_cpp,v
> > retrieving revision 1.30
> > diff -u -p -r1.30 patch-tools_clang_lib_Driver_Tools_cpp
> > --- patches/patch-tools_clang_lib_Driver_Tools_cpp 24 May 2016 07:53:23
> > -0000 1.30
> > +++ patches/patch-tools_clang_lib_Driver_Tools_cpp 27 Jun 2016 17:24:32
> > -0000
> > @@ -1,6 +1,5 @@
> > -$OpenBSD: patch-tools_clang_lib_Driver_Tools_cpp,v 1.30 2016/05/24
> > 07:53:23 ajacoutot Exp $
> > ---- tools/clang/lib/Driver/Tools.cpp.orig Fri Feb 12 17:51:41 2016
> > -+++ tools/clang/lib/Driver/Tools.cpp Tue May 17 14:45:22 2016
> > +--- tools/clang/lib/Driver/Tools.cpp.orig Fri Feb 12 23:51:41 2016
> > ++++ tools/clang/lib/Driver/Tools.cpp Sun Jun 26 20:24:44 2016
> > @@ -78,7 +78,7 @@ static const char *getSparcAsmModeForCPU(StringRef Nam
> > .Case("niagara2", "-Av9b")
> > .Case("niagara3", "-Av9d")
> > @@ -10,7 +9,18 @@ $OpenBSD: patch-tools_clang_lib_Driver_T
> > } else {
> > return llvm::StringSwitch<const char *>(Name)
> > .Case("v8", "-Av8")
> > -@@ -7611,15 +7611,17 @@ void openbsd::Linker::ConstructJob(Compilation &C,
> > con
> > +@@ -7600,6 +7600,10 @@ void openbsd::Linker::ConstructJob(Compilation &C,
> > con
> > + if (Args.hasArg(options::OPT_pg))
> > + CmdArgs.push_back(
> > + Args.MakeArgString(getToolChain().GetFilePath("gcrt0.o")));
> > ++ else if (Args.hasArg(options::OPT_static) &&
> > ++ !Args.hasArg(options::OPT_nopie))
> > ++ CmdArgs.push_back(
> > ++ Args.MakeArgString(getToolChain().GetFilePath("rcrt0.o")));
> > + else
> > + CmdArgs.push_back(
> > + Args.MakeArgString(getToolChain().GetFilePath("crt0.o")));
> > +@@ -7611,15 +7615,17 @@ void openbsd::Linker::ConstructJob(Compilation &C,
> > con
> > }
> > }
> >
>