Link to crtend.S when PIE in the FreeBSD driver. Patch by Brooks Davis!

llvm-svn: 163388
This commit is contained in:
Roman Divacky 2012-09-07 13:36:21 +00:00
parent cc0637c2b6
commit a3c5024277
2 changed files with 17 additions and 3 deletions

View File

@ -5353,10 +5353,10 @@ void freebsd::Link::ConstructJob(Compilation &C, const JobAction &JA,
if (!Args.hasArg(options::OPT_nostdlib) &&
!Args.hasArg(options::OPT_nostartfiles)) {
if (!Args.hasArg(options::OPT_shared))
CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crtend.o")));
else
if (Args.hasArg(options::OPT_shared) || Args.hasArg(options::OPT_pie))
CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crtendS.o")));
else
CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crtend.o")));
CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crtn.o")));
}

View File

@ -23,6 +23,11 @@
// CHECK-PIE2-NOT: "-mrelocation-model"
// CHECK-PIE2: "-pie-level" "2"
//
// CHECK-PIE3: "{{.*}}ld"
// CHECK-PIE3: "-pie"
// CHECK-PIE3: "Scrt1.o" "crti.o" "crtbeginS.o"
// CHECK-PIE3: "crtendS.o" "crtn.o"
//
// RUN: %clang -c %s -target i386-unknown-unknown -### 2>&1 \
// RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC
// RUN: %clang -c %s -target i386-unknown-unknown -fpic -### 2>&1 \
@ -70,6 +75,15 @@
// RUN: %clang -c %s -target i386-apple-darwin -fno-PIC -### 2>&1 \
// RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC
//
// Make sure -pie is passed to along to ld and that the right *crt* files
// are linked in.
// RUN: %clang %s -target i386-unknown-freebsd -fPIE -pie -### \
// RUN: --sysroot=%S/Inputs/basic_freebsd_tree 2>&1 \
// RUN: | FileCheck %s --check-prefix=CHECK-PIE3
// RUN: %clang %s -target i386-linux-gnu -fPIE -pie -### \
// RUN: --sysroot=%S/Inputs/basic_linux_tree 2>&1 \
// RUN: | FileCheck %s --check-prefix=CHECK-PIE3
//
// Disregard any of the PIC-specific flags if we have a trump-card flag.
// RUN: %clang -c %s -target i386-unknown-unknown -mkernel -fPIC -### 2>&1 \
// RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC