From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id A50C91382C5 for ; Thu, 13 May 2021 15:30:47 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id D6F9CE084A; Thu, 13 May 2021 15:30:46 +0000 (UTC) Received: from smtp.gentoo.org (dev.gentoo.org [IPv6:2001:470:ea4a:1:5054:ff:fec7:86e4]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id B1C7BE084A for ; Thu, 13 May 2021 15:30:46 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 23EC7340DE3 for ; Thu, 13 May 2021 15:30:42 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 801F35D2 for ; Thu, 13 May 2021 15:30:39 +0000 (UTC) From: "Georgy Yakovlev" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Georgy Yakovlev" Message-ID: <1620919822.569c31bc14956e0163a84bb6d9f2d6a26c1541b2.gyakovlev@gentoo> Subject: [gentoo-commits] repo/gentoo:master commit in: net-libs/nodejs/, net-libs/nodejs/files/ X-VCS-Repository: repo/gentoo X-VCS-Files: net-libs/nodejs/files/nodejs-16.1.0-ppc64-segfault.patch net-libs/nodejs/nodejs-16.1.0.ebuild X-VCS-Directories: net-libs/nodejs/files/ net-libs/nodejs/ X-VCS-Committer: gyakovlev X-VCS-Committer-Name: Georgy Yakovlev X-VCS-Revision: 569c31bc14956e0163a84bb6d9f2d6a26c1541b2 X-VCS-Branch: master Date: Thu, 13 May 2021 15:30:39 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Archives-Salt: db09d7f9-bc17-4fe3-ba85-ce2edd2070e4 X-Archives-Hash: 6a9ef3cbac24f827f3a8f35ea9ea91db commit: 569c31bc14956e0163a84bb6d9f2d6a26c1541b2 Author: Georgy Yakovlev gentoo org> AuthorDate: Thu May 13 15:19:55 2021 +0000 Commit: Georgy Yakovlev gentoo org> CommitDate: Thu May 13 15:30:22 2021 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=569c31bc net-libs/nodejs: add ppc64 segfault patch to 16.1.0 Bug: https://bugs.gentoo.org/785751 Package-Manager: Portage-3.0.18, Repoman-3.0.3 Signed-off-by: Georgy Yakovlev gentoo.org> .../files/nodejs-16.1.0-ppc64-segfault.patch | 119 +++++++++++++++++++++ net-libs/nodejs/nodejs-16.1.0.ebuild | 1 + 2 files changed, 120 insertions(+) diff --git a/net-libs/nodejs/files/nodejs-16.1.0-ppc64-segfault.patch b/net-libs/nodejs/files/nodejs-16.1.0-ppc64-segfault.patch new file mode 100644 index 00000000000..5ddd1fe7d08 --- /dev/null +++ b/net-libs/nodejs/files/nodejs-16.1.0-ppc64-segfault.patch @@ -0,0 +1,119 @@ +From ca4bf75504d07db5e1e66ec5c867cd76c90268af Mon Sep 17 00:00:00 2001 +From: Junliang Yan +Date: Tue, 11 May 2021 08:57:03 -0400 +Subject: [PATCH] ppc: Prevent trampoline emission on deoptimization table generation + +The deoptimization table needs to be continuously, so we need to block +trampoline pool emission during the whole process. + +bug: v8:11759 +Change-Id: Ie5e0ffe27dc8e6cdb18985dc2cf26bdadeff318f +Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2881918 +Commit-Queue: Junliang Yan +Reviewed-by: Jakob Gruber +Cr-Commit-Position: refs/heads/master@{#74506} +X-Gentoo-bug: https://bugs.gentoo.org/785751 +Backported by gyakovlev@gentoo.org +--- + +diff --git a/src/codegen/ppc/assembler-ppc.h b/src/codegen/ppc/assembler-ppc.h +index 794b917..ae04118 100644 +--- a/deps/v8/src/codegen/ppc/assembler-ppc.h ++++ b/deps/v8/src/codegen/ppc/assembler-ppc.h +@@ -195,6 +195,12 @@ + + void MaybeEmitOutOfLineConstantPool() { EmitConstantPool(); } + ++ inline void CheckTrampolinePoolQuick(int extra_space = 0) { ++ if (pc_offset() >= next_trampoline_check_ - extra_space) { ++ CheckTrampolinePool(); ++ } ++ } ++ + // Label operations & relative jumps (PPUM Appendix D) + // + // Takes a branch opcode (cc) and a label (L) and generates +@@ -1334,12 +1340,6 @@ + } + + inline void UntrackBranch(); +- void CheckTrampolinePoolQuick() { +- if (pc_offset() >= next_trampoline_check_) { +- CheckTrampolinePool(); +- } +- } +- + // Instruction generation + void a_form(Instr instr, DoubleRegister frt, DoubleRegister fra, + DoubleRegister frb, RCBit r); +diff --git a/src/compiler/backend/code-generator.cc b/src/compiler/backend/code-generator.cc +index 023e697..62e57fe 100644 +--- a/deps/v8/src/compiler/backend/code-generator.cc ++++ b/deps/v8/src/compiler/backend/code-generator.cc +@@ -416,23 +416,29 @@ + std::sort(deoptimization_exits_.begin(), deoptimization_exits_.end(), cmp); + } + +- for (DeoptimizationExit* exit : deoptimization_exits_) { +- if (exit->emitted()) continue; +- if (Deoptimizer::kSupportsFixedDeoptExitSizes) { +- exit->set_deoptimization_id(next_deoptimization_id_++); +- } +- result_ = AssembleDeoptimizerCall(exit); +- if (result_ != kSuccess) return; ++ { ++#ifdef V8_TARGET_ARCH_PPC64 ++ v8::internal::Assembler::BlockTrampolinePoolScope block_trampoline_pool( ++ tasm()); ++#endif ++ for (DeoptimizationExit* exit : deoptimization_exits_) { ++ if (exit->emitted()) continue; ++ if (Deoptimizer::kSupportsFixedDeoptExitSizes) { ++ exit->set_deoptimization_id(next_deoptimization_id_++); ++ } ++ result_ = AssembleDeoptimizerCall(exit); ++ if (result_ != kSuccess) return; + +- // UpdateDeoptimizationInfo expects lazy deopts to be visited in pc_offset +- // order, which is always the case since they are added to +- // deoptimization_exits_ in that order, and the optional sort operation +- // above preserves that order. +- if (exit->kind() == DeoptimizeKind::kLazy) { +- int trampoline_pc = exit->label()->pos(); +- last_updated = safepoints()->UpdateDeoptimizationInfo( +- exit->pc_offset(), trampoline_pc, last_updated, +- exit->deoptimization_id()); ++ // UpdateDeoptimizationInfo expects lazy deopts to be visited in pc_offset ++ // order, which is always the case since they are added to ++ // deoptimization_exits_ in that order, and the optional sort operation ++ // above preserves that order. ++ if (exit->kind() == DeoptimizeKind::kLazy) { ++ int trampoline_pc = exit->label()->pos(); ++ last_updated = safepoints()->UpdateDeoptimizationInfo( ++ exit->pc_offset(), trampoline_pc, last_updated, ++ exit->deoptimization_id()); ++ } + } + } + +diff --git a/src/compiler/backend/ppc/code-generator-ppc.cc b/src/compiler/backend/ppc/code-generator-ppc.cc +index 3e4e94a..0281376 100644 +--- a/deps/v8/src/compiler/backend/ppc/code-generator-ppc.cc ++++ b/deps/v8/src/compiler/backend/ppc/code-generator-ppc.cc +@@ -4296,7 +4296,15 @@ + + void CodeGenerator::PrepareForDeoptimizationExits( + ZoneDeque* exits) { +- // __ EmitConstantPool(); ++ int total_size = 0; ++ for (DeoptimizationExit* exit : deoptimization_exits_) { ++ total_size += (exit->kind() == DeoptimizeKind::kLazy) ++ ? Deoptimizer::kLazyDeoptExitSize ++ : Deoptimizer::kNonLazyDeoptExitSize; ++ } ++ ++ __ CheckTrampolinePoolQuick(total_size); ++ DCHECK(Deoptimizer::kSupportsFixedDeoptExitSizes); + } + + void CodeGenerator::AssembleMove(InstructionOperand* source, diff --git a/net-libs/nodejs/nodejs-16.1.0.ebuild b/net-libs/nodejs/nodejs-16.1.0.ebuild index f8ca995c2e1..2d9a2dbb00c 100644 --- a/net-libs/nodejs/nodejs-16.1.0.ebuild +++ b/net-libs/nodejs/nodejs-16.1.0.ebuild @@ -50,6 +50,7 @@ PATCHES=( "${FILESDIR}"/${PN}-12.22.1-uvwasi_shared_libuv.patch "${FILESDIR}"/${PN}-15.2.0-global-npm-config.patch "${FILESDIR}"/${PN}-16.1.0-test-repl-history-navigation.patch + "${FILESDIR}"/${PN}-16.1.0-ppc64-segfault.patch #785751, drop after it stops applying ) pkg_pretend() {