Sun Nov 3 12:40:40 2019 UTC ()
lld: Disable gnustack on NetBSD

Fix corrupted text in description of cherry-picked patch for gnustack.


(kamil)
diff -r1.11 -r1.12 pkgsrc/devel/lld/Makefile
diff -r1.7 -r1.8 pkgsrc/devel/lld/distinfo
diff -r1.5 -r1.6 pkgsrc/devel/lld/patches/patch-ELF_Config.h
diff -r1.5 -r1.6 pkgsrc/devel/lld/patches/patch-docs_ld.lld.1
diff -r1.6 -r1.7 pkgsrc/devel/lld/patches/patch-ELF_Driver.cpp
diff -r1.4 -r1.5 pkgsrc/devel/lld/patches/patch-ELF_Writer.cpp
diff -r1.4 -r1.5 pkgsrc/devel/lld/patches/patch-test_ELF_gnustack.s
diff -r1.1 -r1.2 pkgsrc/devel/lld/patches/patch-tools_nb.lld_nb.lld.cpp

cvs diff -r1.11 -r1.12 pkgsrc/devel/lld/Makefile (expand / switch to unified diff)

--- pkgsrc/devel/lld/Makefile 2019/11/03 12:10:29 1.11
+++ pkgsrc/devel/lld/Makefile 2019/11/03 12:40:40 1.12
@@ -1,18 +1,18 @@ @@ -1,18 +1,18 @@
1# $NetBSD: Makefile,v 1.11 2019/11/03 12:10:29 kamil Exp $ 1# $NetBSD: Makefile,v 1.12 2019/11/03 12:40:40 kamil Exp $
2 2
3DISTNAME= lld-9.0.0.src 3DISTNAME= lld-9.0.0.src
4PKGNAME= ${DISTNAME:S/.src//} 4PKGNAME= ${DISTNAME:S/.src//}
5PKGREVISION= 3 5PKGREVISION= 4
6CATEGORIES= devel 6CATEGORIES= devel
7MASTER_SITES= http://releases.llvm.org/${PKGVERSION_NOREV}/ 7MASTER_SITES= http://releases.llvm.org/${PKGVERSION_NOREV}/
8EXTRACT_SUFX= .tar.xz 8EXTRACT_SUFX= .tar.xz
9 9
10MAINTAINER= pkgsrc-users@NetBSD.org 10MAINTAINER= pkgsrc-users@NetBSD.org
11HOMEPAGE= http://lld.llvm.org/ 11HOMEPAGE= http://lld.llvm.org/
12COMMENT= The LLVM Linker 12COMMENT= The LLVM Linker
13LICENSE= apache-2.0 13LICENSE= apache-2.0
14 14
15USE_LANGUAGES= c c++11 15USE_LANGUAGES= c c++11
16USE_CMAKE= yes 16USE_CMAKE= yes
17GCC_REQD+= 4.8 17GCC_REQD+= 4.8
18 18

cvs diff -r1.7 -r1.8 pkgsrc/devel/lld/distinfo (expand / switch to unified diff)

--- pkgsrc/devel/lld/distinfo 2019/11/03 12:10:29 1.7
+++ pkgsrc/devel/lld/distinfo 2019/11/03 12:40:40 1.8
@@ -1,17 +1,17 @@ @@ -1,17 +1,17 @@
1$NetBSD: distinfo,v 1.7 2019/11/03 12:10:29 kamil Exp $ 1$NetBSD: distinfo,v 1.8 2019/11/03 12:40:40 kamil Exp $
2 2
3SHA1 (lld-9.0.0.src.tar.xz) = 021a8c38cf27d63db37d939c7cdec46ffd627be2 3SHA1 (lld-9.0.0.src.tar.xz) = 021a8c38cf27d63db37d939c7cdec46ffd627be2
4RMD160 (lld-9.0.0.src.tar.xz) = d46b068f4de55d174be71e061aa38f7d4d1499dc 4RMD160 (lld-9.0.0.src.tar.xz) = d46b068f4de55d174be71e061aa38f7d4d1499dc
5SHA512 (lld-9.0.0.src.tar.xz) = bc4812232840ef5edbd8edf1d1a329e85a4bfd3a7859fe322e11dd053435e722c6f1140a718fd2b3524ee9783a357178d2ba30d12519847bd3acc294698007f3 5SHA512 (lld-9.0.0.src.tar.xz) = bc4812232840ef5edbd8edf1d1a329e85a4bfd3a7859fe322e11dd053435e722c6f1140a718fd2b3524ee9783a357178d2ba30d12519847bd3acc294698007f3
6Size (lld-9.0.0.src.tar.xz) = 1100608 bytes 6Size (lld-9.0.0.src.tar.xz) = 1100608 bytes
7SHA1 (patch-CMakeLists.txt) = 87d32f66488541ba68e219f5fa83646b48bf9c71 7SHA1 (patch-CMakeLists.txt) = 87d32f66488541ba68e219f5fa83646b48bf9c71
8SHA1 (patch-ELF_Config.h) = 6ad0642b602f1bdfead45e3e3d71e9718fdd80b5 8SHA1 (patch-ELF_Config.h) = f5663189adf47a13d2fa0a152ea5df04a3ed247d
9SHA1 (patch-ELF_Driver.cpp) = 113705d763af35635ee69e127c9c757c9d0c2597 9SHA1 (patch-ELF_Driver.cpp) = 4b08b50e75eb90a8703a331efaf4a950098d5a4d
10SHA1 (patch-ELF_Options.td) = 22a1f293681b86a9aac87624efcfeeb20a4ba51c 10SHA1 (patch-ELF_Options.td) = 22a1f293681b86a9aac87624efcfeeb20a4ba51c
11SHA1 (patch-ELF_Writer.cpp) = 8c2d794885826a153b3ec6fa3149093036b98750 11SHA1 (patch-ELF_Writer.cpp) = b5b995b2566999579a35146a271d099908eb44c3
12SHA1 (patch-docs_ld.lld.1) = c2d156d3d7af6de195f9c2f3eceb978d65c8d883 12SHA1 (patch-docs_ld.lld.1) = 8492f459425a6774d4b3e21c6f0f5d40d7044a1b
13SHA1 (patch-test_ELF_gnustack.s) = 58eb43e952a85bb8f2cb7a665a625164ee564dd2 13SHA1 (patch-test_ELF_gnustack.s) = d2619221f09d6b40daa9c2206c993cd8342982a5
14SHA1 (patch-tools_lld_lld.cpp) = bc3662191bf6e50c808d188707c9abfdb4786dbf 14SHA1 (patch-tools_lld_lld.cpp) = bc3662191bf6e50c808d188707c9abfdb4786dbf
15SHA1 (patch-tools_nb.lld_CMakeLists.txt) = 231ed112512d23001a8e9d1d1821838a483c2e37 15SHA1 (patch-tools_nb.lld_CMakeLists.txt) = 231ed112512d23001a8e9d1d1821838a483c2e37
16SHA1 (patch-tools_nb.lld_Options.td) = d56ff977f24d97eda30f10aae5818c618b3c7915 16SHA1 (patch-tools_nb.lld_Options.td) = d56ff977f24d97eda30f10aae5818c618b3c7915
17SHA1 (patch-tools_nb.lld_nb.lld.cpp) = 11a69572b0ec28b9de576249bf3217acdcebee22 17SHA1 (patch-tools_nb.lld_nb.lld.cpp) = 2425426beb2f4d80f96781977e3a4019eed601fc

cvs diff -r1.5 -r1.6 pkgsrc/devel/lld/patches/patch-ELF_Config.h (expand / switch to unified diff)

--- pkgsrc/devel/lld/patches/patch-ELF_Config.h 2019/11/03 12:10:29 1.5
+++ pkgsrc/devel/lld/patches/patch-ELF_Config.h 2019/11/03 12:40:40 1.6
@@ -1,17 +1,17 @@ @@ -1,17 +1,17 @@
1$NetBSD: patch-ELF_Config.h,v 1.5 2019/11/03 12:10:29 kamil Exp $ 1$NetBSD: patch-ELF_Config.h,v 1.6 2019/11/03 12:40:40 kamil Exp $
2 2
3Cherry-pick upstream patch commit 2a0fcae3d4d1fd85d6ae8378d7c6f12430c0087d 3Cherry-pick upstream patch commit 2a0fcae3d4d1fd85d6ae8378d7c6f12430c0087d
4[lld] [ELF] Add '-z nognustack' opt to suppress emitting PT_GNU_STAC dummy option for an AArch64 erratum. 4[lld] [ELF] Add '-z nognustack' opt to suppress emitting PT_GNU_STACK
5 5
6Add dummy option for an AArch64 erratum. 6Add dummy option for an AArch64 erratum.
7 7
8--- ELF/Config.h.orig 2019-07-16 05:50:45.000000000 +0000 8--- ELF/Config.h.orig 2019-07-16 05:50:45.000000000 +0000
9+++ ELF/Config.h 9+++ ELF/Config.h
10@@ -61,6 +61,9 @@ enum class Target2Policy { Abs, Rel, Got 10@@ -61,6 +61,9 @@ enum class Target2Policy { Abs, Rel, Got
11 // For tracking ARM Float Argument PCS 11 // For tracking ARM Float Argument PCS
12 enum class ARMVFPArgKind { Default, Base, VFP, ToolChain }; 12 enum class ARMVFPArgKind { Default, Base, VFP, ToolChain };
13  13
14+// For -z *stack 14+// For -z *stack
15+enum class GnuStackKind { None, Exec, NoExec }; 15+enum class GnuStackKind { None, Exec, NoExec };
16+ 16+
17 struct SymbolVersion { 17 struct SymbolVersion {

cvs diff -r1.5 -r1.6 pkgsrc/devel/lld/patches/Attic/patch-docs_ld.lld.1 (expand / switch to unified diff)

--- pkgsrc/devel/lld/patches/Attic/patch-docs_ld.lld.1 2019/11/03 12:10:29 1.5
+++ pkgsrc/devel/lld/patches/Attic/patch-docs_ld.lld.1 2019/11/03 12:40:40 1.6
@@ -1,17 +1,17 @@ @@ -1,17 +1,17 @@
1$NetBSD: patch-docs_ld.lld.1,v 1.5 2019/11/03 12:10:29 kamil Exp $ 1$NetBSD: patch-docs_ld.lld.1,v 1.6 2019/11/03 12:40:40 kamil Exp $
2 2
3Cherry-pick upstream patch commit 2a0fcae3d4d1fd85d6ae8378d7c6f12430c0087d 3Cherry-pick upstream patch commit 2a0fcae3d4d1fd85d6ae8378d7c6f12430c0087d
4[lld] [ELF] Add '-z nognustack' opt to suppress emitting PT_GNU_STAC dummy option for an AArch64 erratum. 4[lld] [ELF] Add '-z nognustack' opt to suppress emitting PT_GNU_STACK
5 5
6--- docs/ld.lld.1.orig 2019-11-03 11:37:33.105878671 +0000 6--- docs/ld.lld.1.orig 2019-11-03 11:37:33.105878671 +0000
7+++ docs/ld.lld.1 7+++ docs/ld.lld.1
8@@ -612,6 +612,11 @@ Set the 8@@ -612,6 +612,11 @@ Set the
9 .Dv DF_1_NOOPEN 9 .Dv DF_1_NOOPEN
10 flag to indicate that the object may not be opened by 10 flag to indicate that the object may not be opened by
11 .Xr dlopen 3 . 11 .Xr dlopen 3 .
12+.It Cm nognustack 12+.It Cm nognustack
13+Do not emit the 13+Do not emit the
14+.Dv PT_GNU_STACK 14+.Dv PT_GNU_STACK
15+segment. 15+segment.
16+.Pp 16+.Pp
17 .It Cm norelro 17 .It Cm norelro

cvs diff -r1.6 -r1.7 pkgsrc/devel/lld/patches/Attic/patch-ELF_Driver.cpp (expand / switch to unified diff)

--- pkgsrc/devel/lld/patches/Attic/patch-ELF_Driver.cpp 2019/11/03 12:10:29 1.6
+++ pkgsrc/devel/lld/patches/Attic/patch-ELF_Driver.cpp 2019/11/03 12:40:40 1.7
@@ -1,17 +1,17 @@ @@ -1,17 +1,17 @@
1$NetBSD: patch-ELF_Driver.cpp,v 1.6 2019/11/03 12:10:29 kamil Exp $ 1$NetBSD: patch-ELF_Driver.cpp,v 1.7 2019/11/03 12:40:40 kamil Exp $
2 2
3Cherry-pick upstream patch commit 2a0fcae3d4d1fd85d6ae8378d7c6f12430c0087d 3Cherry-pick upstream patch commit 2a0fcae3d4d1fd85d6ae8378d7c6f12430c0087d
4[lld] [ELF] Add '-z nognustack' opt to suppress emitting PT_GNU_STAC dummy option for an AArch64 erratum.  4[lld] [ELF] Add '-z nognustack' opt to suppress emitting PT_GNU_STACK
5 5
6Add dummy option for an AArch64 erratum. 6Add dummy option for an AArch64 erratum.
7 7
8--- ELF/Driver.cpp.orig 2019-07-17 14:54:02.000000000 +0000 8--- ELF/Driver.cpp.orig 2019-07-17 14:54:02.000000000 +0000
9+++ ELF/Driver.cpp 9+++ ELF/Driver.cpp
10@@ -129,7 +129,7 @@ static std::tuple<ELFKind, uint16_t, uin 10@@ -129,7 +129,7 @@ static std::tuple<ELFKind, uint16_t, uin
11 std::pair<ELFKind, uint16_t> ret = 11 std::pair<ELFKind, uint16_t> ret =
12 StringSwitch<std::pair<ELFKind, uint16_t>>(s) 12 StringSwitch<std::pair<ELFKind, uint16_t>>(s)
13 .Cases("aarch64elf", "aarch64linux", "aarch64_elf64_le_vec", 13 .Cases("aarch64elf", "aarch64linux", "aarch64_elf64_le_vec",
14- {ELF64LEKind, EM_AARCH64}) 14- {ELF64LEKind, EM_AARCH64})
15+ "aarch64nbsd", {ELF64LEKind, EM_AARCH64}) 15+ "aarch64nbsd", {ELF64LEKind, EM_AARCH64})
16 .Cases("armelf", "armelf_linux_eabi", {ELF32LEKind, EM_ARM}) 16 .Cases("armelf", "armelf_linux_eabi", {ELF32LEKind, EM_ARM})
17 .Case("elf32_x86_64", {ELF32LEKind, EM_X86_64}) 17 .Case("elf32_x86_64", {ELF32LEKind, EM_X86_64})

cvs diff -r1.4 -r1.5 pkgsrc/devel/lld/patches/Attic/patch-ELF_Writer.cpp (expand / switch to unified diff)

--- pkgsrc/devel/lld/patches/Attic/patch-ELF_Writer.cpp 2019/11/03 12:10:29 1.4
+++ pkgsrc/devel/lld/patches/Attic/patch-ELF_Writer.cpp 2019/11/03 12:40:40 1.5
@@ -1,17 +1,17 @@ @@ -1,17 +1,17 @@
1$NetBSD: patch-ELF_Writer.cpp,v 1.4 2019/11/03 12:10:29 kamil Exp $ 1$NetBSD: patch-ELF_Writer.cpp,v 1.5 2019/11/03 12:40:40 kamil Exp $
2 2
3Cherry-pick upstream patch commit 2a0fcae3d4d1fd85d6ae8378d7c6f12430c0087d 3Cherry-pick upstream patch commit 2a0fcae3d4d1fd85d6ae8378d7c6f12430c0087d
4[lld] [ELF] Add '-z nognustack' opt to suppress emitting PT_GNU_STAC dummy option for an AArch64 erratum. 4[lld] [ELF] Add '-z nognustack' opt to suppress emitting PT_GNU_STACK
5 5
6--- ELF/Writer.cpp.orig 2019-09-06 11:20:15.000000000 +0000 6--- ELF/Writer.cpp.orig 2019-09-06 11:20:15.000000000 +0000
7+++ ELF/Writer.cpp 7+++ ELF/Writer.cpp
8@@ -2160,14 +2160,16 @@ std::vector<PhdrEntry *> Writer<ELFT>::c 8@@ -2160,14 +2160,16 @@ std::vector<PhdrEntry *> Writer<ELFT>::c
9 if (OutputSection *cmd = findSection(".openbsd.randomdata", partNo)) 9 if (OutputSection *cmd = findSection(".openbsd.randomdata", partNo))
10 addHdr(PT_OPENBSD_RANDOMIZE, cmd->getPhdrFlags())->add(cmd); 10 addHdr(PT_OPENBSD_RANDOMIZE, cmd->getPhdrFlags())->add(cmd);
11  11
12- // PT_GNU_STACK is a special section to tell the loader to make the 12- // PT_GNU_STACK is a special section to tell the loader to make the
13- // pages for the stack non-executable. If you really want an executable 13- // pages for the stack non-executable. If you really want an executable
14- // stack, you can pass -z execstack, but that's not recommended for 14- // stack, you can pass -z execstack, but that's not recommended for
15- // security reasons. 15- // security reasons.
16- unsigned perm = PF_R | PF_W; 16- unsigned perm = PF_R | PF_W;
17- if (config->zExecstack) 17- if (config->zExecstack)

cvs diff -r1.4 -r1.5 pkgsrc/devel/lld/patches/Attic/patch-test_ELF_gnustack.s (expand / switch to unified diff)

--- pkgsrc/devel/lld/patches/Attic/patch-test_ELF_gnustack.s 2019/11/03 12:10:29 1.4
+++ pkgsrc/devel/lld/patches/Attic/patch-test_ELF_gnustack.s 2019/11/03 12:40:40 1.5
@@ -1,17 +1,17 @@ @@ -1,17 +1,17 @@
1$NetBSD: patch-test_ELF_gnustack.s,v 1.4 2019/11/03 12:10:29 kamil Exp $ 1$NetBSD: patch-test_ELF_gnustack.s,v 1.5 2019/11/03 12:40:40 kamil Exp $
2 2
3Cherry-pick upstream patch commit 2a0fcae3d4d1fd85d6ae8378d7c6f12430c0087d 3Cherry-pick upstream patch commit 2a0fcae3d4d1fd85d6ae8378d7c6f12430c0087d
4[lld] [ELF] Add '-z nognustack' opt to suppress emitting PT_GNU_STAC dummy option for an AArch64 erratum. 4[lld] [ELF] Add '-z nognustack' opt to suppress emitting PT_GNU_STACK
5 5
6--- test/ELF/gnustack.s.orig 2019-05-01 05:49:01.000000000 +0000 6--- test/ELF/gnustack.s.orig 2019-05-01 05:49:01.000000000 +0000
7+++ test/ELF/gnustack.s 7+++ test/ELF/gnustack.s
8@@ -10,6 +10,9 @@ 8@@ -10,6 +10,9 @@
9 # RUN: ld.lld %t1 -o %t -z noexecstack 9 # RUN: ld.lld %t1 -o %t -z noexecstack
10 # RUN: llvm-readobj --program-headers -S %t | FileCheck --check-prefix=RW %s 10 # RUN: llvm-readobj --program-headers -S %t | FileCheck --check-prefix=RW %s
11  11
12+# RUN: ld.lld %t1 -o %t -z nognustack 12+# RUN: ld.lld %t1 -o %t -z nognustack
13+# RUN: llvm-readobj --program-headers -s %t | FileCheck --check-prefix=NOGNUSTACK %s 13+# RUN: llvm-readobj --program-headers -s %t | FileCheck --check-prefix=NOGNUSTACK %s
14+ 14+
15 # RW: Type: PT_GNU_STACK 15 # RW: Type: PT_GNU_STACK
16 # RW-NEXT: Offset: 0x0 16 # RW-NEXT: Offset: 0x0
17 # RW-NEXT: VirtualAddress: 0x0 17 # RW-NEXT: VirtualAddress: 0x0

cvs diff -r1.1 -r1.2 pkgsrc/devel/lld/patches/Attic/patch-tools_nb.lld_nb.lld.cpp (expand / switch to unified diff)

--- pkgsrc/devel/lld/patches/Attic/patch-tools_nb.lld_nb.lld.cpp 2019/11/03 12:11:27 1.1
+++ pkgsrc/devel/lld/patches/Attic/patch-tools_nb.lld_nb.lld.cpp 2019/11/03 12:40:40 1.2
@@ -1,21 +1,23 @@ @@ -1,21 +1,23 @@
1$NetBSD: patch-tools_nb.lld_nb.lld.cpp,v 1.1 2019/11/03 12:11:27 kamil Exp $ 1$NetBSD: patch-tools_nb.lld_nb.lld.cpp,v 1.2 2019/11/03 12:40:40 kamil Exp $
2 2
3[LLD] Add NetBSD support as a new flavor of LLD (nb.lld) 3[LLD] Add NetBSD support as a new flavor of LLD (nb.lld)
4https://reviews.llvm.org/D69755 4https://reviews.llvm.org/D69755
5 5
6--- tools/nb.lld/nb.lld.cpp.orig 2019-11-03 11:46:29.311435568 +0000 6Disable gnustack for NetBSD.
 7
 8--- tools/nb.lld/nb.lld.cpp.orig 2019-11-03 12:31:14.712069007 +0000
7+++ tools/nb.lld/nb.lld.cpp 9+++ tools/nb.lld/nb.lld.cpp
8@@ -0,0 +1,218 @@ 10@@ -0,0 +1,221 @@
9+//===- nb.lld.cpp - NetBSD LLD standalone linker --------------------------===// 11+//===- nb.lld.cpp - NetBSD LLD standalone linker --------------------------===//
10+// 12+//
11+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 13+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
12+// See https://llvm.org/LICENSE.txt for license information. 14+// See https://llvm.org/LICENSE.txt for license information.
13+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 15+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
14+// 16+//
15+//===----------------------------------------------------------------------===// 17+//===----------------------------------------------------------------------===//
16+// 18+//
17+// The NetBSD flavor of LLD. 19+// The NetBSD flavor of LLD.
18+// 20+//
19+// This code wraps the default ELF/UNIX lld variation with NetBSD specific 21+// This code wraps the default ELF/UNIX lld variation with NetBSD specific
20+// customization. 22+// customization.
21+// 23+//
@@ -92,26 +94,29 @@ https://reviews.llvm.org/D69755 @@ -92,26 +94,29 @@ https://reviews.llvm.org/D69755
92+ 94+
93+static void appendSearchPath(std::vector<StringRef> &args, const char *path) { 95+static void appendSearchPath(std::vector<StringRef> &args, const char *path) {
94+ args.push_back("--library-path"); 96+ args.push_back("--library-path");
95+ args.push_back(path); 97+ args.push_back(path);
96+} 98+}
97+ 99+
98+static void appendTargetCustomization(std::vector<StringRef> &args) { 100+static void appendTargetCustomization(std::vector<StringRef> &args) {
99+ // force-disable RO segment on NetBSD due to ld.elf_so limitations 101+ // force-disable RO segment on NetBSD due to ld.elf_so limitations
100+ args.push_back("--no-rosegment"); 102+ args.push_back("--no-rosegment");
101+ 103+
102+ // disable superfluous RUNPATH on NetBSD 104+ // disable superfluous RUNPATH on NetBSD
103+ args.push_back("--disable-new-dtags"); 105+ args.push_back("--disable-new-dtags");
104+ 106+
 107+ // disable gnustack
 108+ args.push_back("-znognustack");
 109+
105+ // set default image base address 110+ // set default image base address
106+ switch (targetTriple.getArch()) { 111+ switch (targetTriple.getArch()) {
107+ case llvm::Triple::aarch64: 112+ case llvm::Triple::aarch64:
108+ case llvm::Triple::aarch64_be: 113+ case llvm::Triple::aarch64_be:
109+ args.push_back("--image-base=0x200100000"); 114+ args.push_back("--image-base=0x200100000");
110+ break; 115+ break;
111+ default: 116+ default:
112+ break; 117+ break;
113+ } 118+ }
114+ 119+
115+ // NetBSD driver relies on the linker knowing the default search paths. 120+ // NetBSD driver relies on the linker knowing the default search paths.
116+ // Please keep this in sync with clang/lib/Driver/ToolChains/NetBSD.cpp 121+ // Please keep this in sync with clang/lib/Driver/ToolChains/NetBSD.cpp
117+ // (NetBSD::NetBSD constructor) 122+ // (NetBSD::NetBSD constructor)