Skip to content

Commit a3c5024

Browse files
committed
Link to crtend.S when PIE in the FreeBSD driver. Patch by Brooks Davis!
llvm-svn: 163388
1 parent cc0637c commit a3c5024

File tree

2 files changed

+17
-3
lines changed

2 files changed

+17
-3
lines changed

clang/lib/Driver/Tools.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5353,10 +5353,10 @@ void freebsd::Link::ConstructJob(Compilation &C, const JobAction &JA,
53535353

53545354
if (!Args.hasArg(options::OPT_nostdlib) &&
53555355
!Args.hasArg(options::OPT_nostartfiles)) {
5356-
if (!Args.hasArg(options::OPT_shared))
5357-
CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crtend.o")));
5358-
else
5356+
if (Args.hasArg(options::OPT_shared) || Args.hasArg(options::OPT_pie))
53595357
CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crtendS.o")));
5358+
else
5359+
CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crtend.o")));
53605360
CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crtn.o")));
53615361
}
53625362

clang/test/Driver/pic.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@
2323
// CHECK-PIE2-NOT: "-mrelocation-model"
2424
// CHECK-PIE2: "-pie-level" "2"
2525
//
26+
// CHECK-PIE3: "{{.*}}ld"
27+
// CHECK-PIE3: "-pie"
28+
// CHECK-PIE3: "Scrt1.o" "crti.o" "crtbeginS.o"
29+
// CHECK-PIE3: "crtendS.o" "crtn.o"
30+
//
2631
// RUN: %clang -c %s -target i386-unknown-unknown -### 2>&1 \
2732
// RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC
2833
// RUN: %clang -c %s -target i386-unknown-unknown -fpic -### 2>&1 \
@@ -70,6 +75,15 @@
7075
// RUN: %clang -c %s -target i386-apple-darwin -fno-PIC -### 2>&1 \
7176
// RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC
7277
//
78+
// Make sure -pie is passed to along to ld and that the right *crt* files
79+
// are linked in.
80+
// RUN: %clang %s -target i386-unknown-freebsd -fPIE -pie -### \
81+
// RUN: --sysroot=%S/Inputs/basic_freebsd_tree 2>&1 \
82+
// RUN: | FileCheck %s --check-prefix=CHECK-PIE3
83+
// RUN: %clang %s -target i386-linux-gnu -fPIE -pie -### \
84+
// RUN: --sysroot=%S/Inputs/basic_linux_tree 2>&1 \
85+
// RUN: | FileCheck %s --check-prefix=CHECK-PIE3
86+
//
7387
// Disregard any of the PIC-specific flags if we have a trump-card flag.
7488
// RUN: %clang -c %s -target i386-unknown-unknown -mkernel -fPIC -### 2>&1 \
7589
// RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC

0 commit comments

Comments
 (0)