lld: Disable gnustack on NetBSD Fix corrupted text in description of cherry-picked patch for gnustack.diff -r1.11 -r1.12 pkgsrc/devel/lld/Makefile
(kamil)
@@ -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 | |||
3 | DISTNAME= lld-9.0.0.src | 3 | DISTNAME= lld-9.0.0.src | |
4 | PKGNAME= ${DISTNAME:S/.src//} | 4 | PKGNAME= ${DISTNAME:S/.src//} | |
5 | PKGREVISION= 3 | 5 | PKGREVISION= 4 | |
6 | CATEGORIES= devel | 6 | CATEGORIES= devel | |
7 | MASTER_SITES= http://releases.llvm.org/${PKGVERSION_NOREV}/ | 7 | MASTER_SITES= http://releases.llvm.org/${PKGVERSION_NOREV}/ | |
8 | EXTRACT_SUFX= .tar.xz | 8 | EXTRACT_SUFX= .tar.xz | |
9 | 9 | |||
10 | MAINTAINER= pkgsrc-users@NetBSD.org | 10 | MAINTAINER= pkgsrc-users@NetBSD.org | |
11 | HOMEPAGE= http://lld.llvm.org/ | 11 | HOMEPAGE= http://lld.llvm.org/ | |
12 | COMMENT= The LLVM Linker | 12 | COMMENT= The LLVM Linker | |
13 | LICENSE= apache-2.0 | 13 | LICENSE= apache-2.0 | |
14 | 14 | |||
15 | USE_LANGUAGES= c c++11 | 15 | USE_LANGUAGES= c c++11 | |
16 | USE_CMAKE= yes | 16 | USE_CMAKE= yes | |
17 | GCC_REQD+= 4.8 | 17 | GCC_REQD+= 4.8 | |
18 | 18 |
@@ -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 | |||
3 | SHA1 (lld-9.0.0.src.tar.xz) = 021a8c38cf27d63db37d939c7cdec46ffd627be2 | 3 | SHA1 (lld-9.0.0.src.tar.xz) = 021a8c38cf27d63db37d939c7cdec46ffd627be2 | |
4 | RMD160 (lld-9.0.0.src.tar.xz) = d46b068f4de55d174be71e061aa38f7d4d1499dc | 4 | RMD160 (lld-9.0.0.src.tar.xz) = d46b068f4de55d174be71e061aa38f7d4d1499dc | |
5 | SHA512 (lld-9.0.0.src.tar.xz) = bc4812232840ef5edbd8edf1d1a329e85a4bfd3a7859fe322e11dd053435e722c6f1140a718fd2b3524ee9783a357178d2ba30d12519847bd3acc294698007f3 | 5 | SHA512 (lld-9.0.0.src.tar.xz) = bc4812232840ef5edbd8edf1d1a329e85a4bfd3a7859fe322e11dd053435e722c6f1140a718fd2b3524ee9783a357178d2ba30d12519847bd3acc294698007f3 | |
6 | Size (lld-9.0.0.src.tar.xz) = 1100608 bytes | 6 | Size (lld-9.0.0.src.tar.xz) = 1100608 bytes | |
7 | SHA1 (patch-CMakeLists.txt) = 87d32f66488541ba68e219f5fa83646b48bf9c71 | 7 | SHA1 (patch-CMakeLists.txt) = 87d32f66488541ba68e219f5fa83646b48bf9c71 | |
8 | SHA1 (patch-ELF_Config.h) = 6ad0642b602f1bdfead45e3e3d71e9718fdd80b5 | 8 | SHA1 (patch-ELF_Config.h) = f5663189adf47a13d2fa0a152ea5df04a3ed247d | |
9 | SHA1 (patch-ELF_Driver.cpp) = 113705d763af35635ee69e127c9c757c9d0c2597 | 9 | SHA1 (patch-ELF_Driver.cpp) = 4b08b50e75eb90a8703a331efaf4a950098d5a4d | |
10 | SHA1 (patch-ELF_Options.td) = 22a1f293681b86a9aac87624efcfeeb20a4ba51c | 10 | SHA1 (patch-ELF_Options.td) = 22a1f293681b86a9aac87624efcfeeb20a4ba51c | |
11 | SHA1 (patch-ELF_Writer.cpp) = 8c2d794885826a153b3ec6fa3149093036b98750 | 11 | SHA1 (patch-ELF_Writer.cpp) = b5b995b2566999579a35146a271d099908eb44c3 | |
12 | SHA1 (patch-docs_ld.lld.1) = c2d156d3d7af6de195f9c2f3eceb978d65c8d883 | 12 | SHA1 (patch-docs_ld.lld.1) = 8492f459425a6774d4b3e21c6f0f5d40d7044a1b | |
13 | SHA1 (patch-test_ELF_gnustack.s) = 58eb43e952a85bb8f2cb7a665a625164ee564dd2 | 13 | SHA1 (patch-test_ELF_gnustack.s) = d2619221f09d6b40daa9c2206c993cd8342982a5 | |
14 | SHA1 (patch-tools_lld_lld.cpp) = bc3662191bf6e50c808d188707c9abfdb4786dbf | 14 | SHA1 (patch-tools_lld_lld.cpp) = bc3662191bf6e50c808d188707c9abfdb4786dbf | |
15 | SHA1 (patch-tools_nb.lld_CMakeLists.txt) = 231ed112512d23001a8e9d1d1821838a483c2e37 | 15 | SHA1 (patch-tools_nb.lld_CMakeLists.txt) = 231ed112512d23001a8e9d1d1821838a483c2e37 | |
16 | SHA1 (patch-tools_nb.lld_Options.td) = d56ff977f24d97eda30f10aae5818c618b3c7915 | 16 | SHA1 (patch-tools_nb.lld_Options.td) = d56ff977f24d97eda30f10aae5818c618b3c7915 | |
17 | SHA1 (patch-tools_nb.lld_nb.lld.cpp) = 11a69572b0ec28b9de576249bf3217acdcebee22 | 17 | SHA1 (patch-tools_nb.lld_nb.lld.cpp) = 2425426beb2f4d80f96781977e3a4019eed601fc |
@@ -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 | |||
3 | Cherry-pick upstream patch commit 2a0fcae3d4d1fd85d6ae8378d7c6f12430c0087d | 3 | Cherry-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 | Add dummy option for an AArch64 erratum. | 6 | Add 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 { |
@@ -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 | |||
3 | Cherry-pick upstream patch commit 2a0fcae3d4d1fd85d6ae8378d7c6f12430c0087d | 3 | Cherry-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 |
@@ -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 | |||
3 | Cherry-pick upstream patch commit 2a0fcae3d4d1fd85d6ae8378d7c6f12430c0087d | 3 | Cherry-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 | Add dummy option for an AArch64 erratum. | 6 | Add 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}) |
@@ -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 | |||
3 | Cherry-pick upstream patch commit 2a0fcae3d4d1fd85d6ae8378d7c6f12430c0087d | 3 | Cherry-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) |
@@ -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 | |||
3 | Cherry-pick upstream patch commit 2a0fcae3d4d1fd85d6ae8378d7c6f12430c0087d | 3 | Cherry-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 |
@@ -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) | |
4 | https://reviews.llvm.org/D69755 | 4 | https://reviews.llvm.org/D69755 | |
5 | 5 | |||
6 | --- tools/nb.lld/nb.lld.cpp.orig 2019-11-03 11:46:29.311435568 +0000 | 6 | Disable 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) |