From 750dd9f59578dfd73bc43b3690fbe4844a6eae9c Mon Sep 17 00:00:00 2001 From: Joerg Sonnenberger Date: Thu, 12 Jul 2018 21:21:29 +0000 Subject: [PATCH] Support linking static PIE binaries on NetBSD llvm-svn: 336947 --- clang/lib/Driver/ToolChains/NetBSD.cpp | 4 ++++ clang/test/Driver/netbsd.c | 13 +++++++++++++ 2 files changed, 17 insertions(+) diff --git a/clang/lib/Driver/ToolChains/NetBSD.cpp b/clang/lib/Driver/ToolChains/NetBSD.cpp index cbf5908d103c..02caafda1657 100644 --- a/clang/lib/Driver/ToolChains/NetBSD.cpp +++ b/clang/lib/Driver/ToolChains/NetBSD.cpp @@ -122,6 +122,10 @@ void netbsd::Linker::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back("--eh-frame-hdr"); if (Args.hasArg(options::OPT_static)) { CmdArgs.push_back("-Bstatic"); + if (Args.hasArg(options::OPT_pie)) { + Args.AddAllArgs(CmdArgs, options::OPT_pie); + CmdArgs.push_back("--no-dynamic-linker"); + } } else { if (Args.hasArg(options::OPT_rdynamic)) CmdArgs.push_back("-export-dynamic"); diff --git a/clang/test/Driver/netbsd.c b/clang/test/Driver/netbsd.c index 06b5eadfca85..34ad6e41579f 100644 --- a/clang/test/Driver/netbsd.c +++ b/clang/test/Driver/netbsd.c @@ -5,6 +5,9 @@ // RUN: -pie --sysroot=%S/Inputs/basic_netbsd_tree %s -### 2>&1 \ // RUN: | FileCheck -check-prefix=PIE %s // RUN: %clang -no-canonical-prefixes -target x86_64--netbsd \ +// RUN: -static -pie --sysroot=%S/Inputs/basic_netbsd_tree %s -### 2>&1 \ +// RUN: | FileCheck -check-prefix=STATIC-PIE %s +// RUN: %clang -no-canonical-prefixes -target x86_64--netbsd \ // RUN: -shared --sysroot=%S/Inputs/basic_netbsd_tree %s -### 2>&1 \ // RUN: | FileCheck -check-prefix=SHARED %s @@ -139,6 +142,16 @@ // STATIC: "{{.*}}/usr/lib{{/|\\\\}}crti.o" "{{.*}}/usr/lib{{/|\\\\}}crtbegin.o" // STATIC: "{{.*}}/usr/lib{{/|\\\\}}crtend.o" "{{.*}}/usr/lib{{/|\\\\}}crtn.o" +// STATIC-PIE: ld{{.*}}" "--eh-frame-hdr" +// STATIC-PIE-NOT: "-dynamic-linker" "/libexec/ld.elf_so" +// STATIC-PIE-NOT: "-Bshareable" +// STATIC-PIE: "-pie" +// STATIC-PIE-NOT: "-dynamic-linker" "/libexec/ld.elf_so" +// STATIC-PIE-NOT: "-Bshareable" +// STATIC-PIE: "{{.*}}/usr/lib{{/|\\\\}}crt0.o" +// STATIC-PIE: "{{.*}}/usr/lib{{/|\\\\}}crti.o" "{{.*}}/usr/lib{{/|\\\\}}crtbeginS.o" +// STATIC-PIE: "{{.*}}/usr/lib{{/|\\\\}}crtendS.o" "{{.*}}/usr/lib{{/|\\\\}}crtn.o" + // SHARED: ld{{.*}}" "--eh-frame-hdr" // SHARED-NOT: "-pie" // SHARED-NOT: "-dynamic-linker"