r284256 - Link static PIE programs against rcrt0.o on OpenBSD
Brad Smith via cfe-commits
cfe-commits at lists.llvm.org
Tue Oct 25 16:34:53 PDT 2016
On 10/18/16 22:13, Brad Smith via cfe-commits wrote:
> On Fri, Oct 14, 2016 at 09:47:17PM -0400, Brad Smith via cfe-commits wrote:
>> On Fri, Oct 14, 2016 at 05:59:54PM -0000, Ed Maste via cfe-commits wrote:
>>> Author: emaste
>>> Date: Fri Oct 14 12:59:53 2016
>>> New Revision: 284256
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=284256&view=rev
>>> Log:
>>> Link static PIE programs against rcrt0.o on OpenBSD
>>>
>>> Patch by Stefan Kempf.
>>>
>>> Differential Revision: https://reviews.llvm.org/D22130
>>>
>>> Modified:
>>> cfe/trunk/lib/Driver/Tools.cpp
>>> cfe/trunk/test/Driver/openbsd.c
>>>
>>> Modified: cfe/trunk/lib/Driver/Tools.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=284256&r1=284255&r2=284256&view=diff
>>> ==============================================================================
>>> --- cfe/trunk/lib/Driver/Tools.cpp (original)
>>> +++ cfe/trunk/lib/Driver/Tools.cpp Fri Oct 14 12:59:53 2016
>>> @@ -8519,6 +8519,10 @@ void openbsd::Linker::ConstructJob(Compi
>>> 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")));
>>>
>>> Modified: cfe/trunk/test/Driver/openbsd.c
>>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/openbsd.c?rev=284256&r1=284255&r2=284256&view=diff
>>> ==============================================================================
>>> --- cfe/trunk/test/Driver/openbsd.c (original)
>>> +++ cfe/trunk/test/Driver/openbsd.c Fri Oct 14 12:59:53 2016
>>> @@ -67,3 +67,26 @@
>>> // CHECK-MIPS64-PIC: as{{.*}}" "-mabi" "64" "-EB" "-KPIC"
>>> // CHECK-MIPS64EL: as{{.*}}" "-mabi" "64" "-EL"
>>> // CHECK-MIPS64EL-PIC: as{{.*}}" "-mabi" "64" "-EL" "-KPIC"
>>> +
>>> +// Check linking against correct startup code when (not) using PIE
>>> +// RUN: %clang -no-canonical-prefixes -target i686-pc-openbsd %s -### 2>&1 \
>>> +// RUN: | FileCheck -check-prefix=CHECK-PIE %s
>>> +// RUN: %clang -no-canonical-prefixes -target i686-pc-openbsd %s -fno-pie %s -### 2>&1 \
>>> +// RUN: | FileCheck -check-prefix=CHECK-PIE %s
>>> +// RUN: %clang -no-canonical-prefixes -target i686-pc-openbsd -static %s -### 2>&1 \
>>> +// RUN: | FileCheck -check-prefix=CHECK-STATIC-PIE %s
>>> +// RUN: %clang -no-canonical-prefixes -target i686-pc-openbsd -static -fno-pie %s -### 2>&1 \
>>> +// RUN: | FileCheck -check-prefix=CHECK-STATIC-PIE %s
>>> +// RUN: %clang -no-canonical-prefix -target i868-pc-openbsd -nopie %s -### 2>&1 \
>>> +// RUN: | FileCheck -check-prefix=CHECK-NOPIE %s
>>> +// RUN: %clang -no-canonical-prefix -target i868-pc-openbsd -fno-pie -nopie %s -### 2>&1 \
>>> +// RUN: | FileCheck -check-prefix=CHECK-NOPIE %s
>>> +// RUN: %clang -no-canonical-prefix -target i868-pc-openbsd -static -nopie %s -### 2>&1 \
>>> +// RUN: | FileCheck -check-prefix=CHECK-NOPIE %s
>>> +// RUN: %clang -no-canonical-prefix -target i868-pc-openbsd -fno-pie -static -nopie %s -### 2>&1 \
>>> +// RUN: | FileCheck -check-prefix=CHECK-NOPIE %s
>>> +// CHECK-PIE: "/usr/lib/crt0.o"
>>> +// CHECK-PIE-NOT: "-nopie"
>>> +// CHECK-STATIC-PIE: "/usr/lib/rcrt0.o"
>>> +// CHECK-STATIC-PIE-NOT: "-nopie"
>>> +// CHECK-NOPIE: "-nopie" {{.*}}"/usr/lib/crt0.o"
>>
>> Ok, I see the obvious issue with -no-canonical-prefix vs -no-canonical-prefixes
>> and fix the typo with the target triples.
>
> After seeing what the test failure was I have adjusted the tests as appropriate.
ping.
> Index: lib/Driver/Tools.cpp
> ===================================================================
> --- lib/Driver/Tools.cpp (revision 283697)
> +++ lib/Driver/Tools.cpp (working copy)
> @@ -8469,6 +8469,10 @@
> 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")));
> Index: test/Driver/openbsd.c
> ===================================================================
> --- test/Driver/openbsd.c (revision 283697)
> +++ test/Driver/openbsd.c (working copy)
> @@ -67,3 +67,26 @@
> // CHECK-MIPS64-PIC: as{{.*}}" "-mabi" "64" "-EB" "-KPIC"
> // CHECK-MIPS64EL: as{{.*}}" "-mabi" "64" "-EL"
> // CHECK-MIPS64EL-PIC: as{{.*}}" "-mabi" "64" "-EL" "-KPIC"
> +
> +// Check linking against correct startup code when (not) using PIE
> +// RUN: %clang -no-canonical-prefixes -target i686-pc-openbsd %s -### 2>&1 \
> +// RUN: | FileCheck -check-prefix=CHECK-PIE %s
> +// RUN: %clang -no-canonical-prefixes -target i686-pc-openbsd %s -fno-pie %s -### 2>&1 \
> +// RUN: | FileCheck -check-prefix=CHECK-PIE %s
> +// RUN: %clang -no-canonical-prefixes -target i686-pc-openbsd -static %s -### 2>&1 \
> +// RUN: | FileCheck -check-prefix=CHECK-STATIC-PIE %s
> +// RUN: %clang -no-canonical-prefixes -target i686-pc-openbsd -static -fno-pie %s -### 2>&1 \
> +// RUN: | FileCheck -check-prefix=CHECK-STATIC-PIE %s
> +// RUN: %clang -no-canonical-prefixes -target i686-pc-openbsd -nopie %s -### 2>&1 \
> +// RUN: | FileCheck -check-prefix=CHECK-NOPIE %s
> +// RUN: %clang -no-canonical-prefixes -target i686-pc-openbsd -fno-pie -nopie %s -### 2>&1 \
> +// RUN: | FileCheck -check-prefix=CHECK-NOPIE %s
> +// RUN: %clang -no-canonical-prefixes -target i686-pc-openbsd -static -nopie %s -### 2>&1 \
> +// RUN: | FileCheck -check-prefix=CHECK-NOPIE %s
> +// RUN: %clang -no-canonical-prefixes -target i686-pc-openbsd -fno-pie -static -nopie %s -### 2>&1 \
> +// RUN: | FileCheck -check-prefix=CHECK-NOPIE %s
> +// CHECK-PIE: "{{.*}}crt0.o"
> +// CHECK-PIE-NOT: "-nopie"
> +// CHECK-STATIC-PIE: "{{.*}}rcrt0.o"
> +// CHECK-STATIC-PIE-NOT: "-nopie"
> +// CHECK-NOPIE: "-nopie" {{.*}}"${{.*}}crt0.o"
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
More information about the cfe-commits
mailing list