summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorgy Yakovlev <gyakovlev@gentoo.org>2021-05-13 08:19:55 -0700
committerGeorgy Yakovlev <gyakovlev@gentoo.org>2021-05-13 08:30:22 -0700
commit569c31bc14956e0163a84bb6d9f2d6a26c1541b2 (patch)
tree6850349b15863a7e1e46bf8abd897d9a348f52de /net-libs/nodejs
parentapp-metrics/blackbox_exporter: 0.19.0 bump (diff)
downloadgentoo-569c31bc14956e0163a84bb6d9f2d6a26c1541b2.tar.gz
gentoo-569c31bc14956e0163a84bb6d9f2d6a26c1541b2.tar.bz2
gentoo-569c31bc14956e0163a84bb6d9f2d6a26c1541b2.zip
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 <gyakovlev@gentoo.org>
Diffstat (limited to 'net-libs/nodejs')
-rw-r--r--net-libs/nodejs/files/nodejs-16.1.0-ppc64-segfault.patch119
-rw-r--r--net-libs/nodejs/nodejs-16.1.0.ebuild1
2 files changed, 120 insertions, 0 deletions
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 000000000000..5ddd1fe7d08d
--- /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 <jyan@ca.ibm.ca>
+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 <junyan@redhat.com>
+Reviewed-by: Jakob Gruber <jgruber@chromium.org>
+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<DeoptimizationExit*>* 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 f8ca995c2e13..2d9a2dbb00c8 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() {