mirror of
https://github.com/nodejs/node.git
synced 2026-10-28 10:15:07 +08:00
deps: V8: cherry-pick 6b1b9bca2a8
Origin commit message:
[loong64][codegen] Avoid memory access under stack pointer
According to LoongArch ABI doc chapter 8.2:
"Procedures must not assume the persistence on-stack data of which
the addresses lie below the stack pointer."
Change-Id: I92735e052227495ac9884c4290b57eaffbf905e1
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/6786372
Auto-Submit: Zhao Jiazhong <zhaojiazhong-hf@loongson.cn>
Reviewed-by: Matthias Liedtke <mliedtke@chromium.org>
Commit-Queue: Matthias Liedtke <mliedtke@chromium.org>
Cr-Commit-Position: refs/heads/main@{#101634}
Refs: https://github.com/v8/v8/commit/6b1b9bca2a8fe9824bcc815a9ce642da904b91c3
PR-URL: https://github.com/nodejs/node/pull/59283
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
This commit is contained in:
1 parent
34f9b7eab9
commit
b1898c5419
2 files changed
+12
-10
No files matched your search
+1
-1
@@ -38,7 +38,7 @@
|
||||
|
||||
# Reset this number to 0 on major V8 upgrades.
|
||||
# Increment by one for each non-official patch applied to deps/v8.
|
||||
'v8_embedder_string': '-node.20',
|
||||
'v8_embedder_string': '-node.21',
|
||||
|
||||
##### V8 defaults for Node.js #####
|
||||
|
||||
|
||||
+11
-9
@@ -1626,21 +1626,24 @@ void MacroAssembler::LoadIsolateField(Register dst, IsolateFieldId id) {
|
||||
}
|
||||
|
||||
void MacroAssembler::MultiPush(RegList regs) {
|
||||
int16_t stack_offset = 0;
|
||||
int16_t num_to_push = regs.Count();
|
||||
int16_t stack_offset = num_to_push * kSystemPointerSize;
|
||||
|
||||
Sub_d(sp, sp, Operand(stack_offset));
|
||||
for (int16_t i = kNumRegisters - 1; i >= 0; i--) {
|
||||
if ((regs.bits() & (1 << i)) != 0) {
|
||||
stack_offset -= kSystemPointerSize;
|
||||
St_d(ToRegister(i), MemOperand(sp, stack_offset));
|
||||
}
|
||||
}
|
||||
addi_d(sp, sp, stack_offset);
|
||||
}
|
||||
|
||||
void MacroAssembler::MultiPush(RegList regs1, RegList regs2) {
|
||||
DCHECK((regs1 & regs2).is_empty());
|
||||
int16_t stack_offset = 0;
|
||||
int16_t num_to_push = regs1.Count() + regs2.Count();
|
||||
int16_t stack_offset = num_to_push * kSystemPointerSize;
|
||||
|
||||
Sub_d(sp, sp, Operand(stack_offset));
|
||||
for (int16_t i = kNumRegisters - 1; i >= 0; i--) {
|
||||
if ((regs1.bits() & (1 << i)) != 0) {
|
||||
stack_offset -= kSystemPointerSize;
|
||||
@@ -1653,15 +1656,16 @@ void MacroAssembler::MultiPush(RegList regs1, RegList regs2) {
|
||||
St_d(ToRegister(i), MemOperand(sp, stack_offset));
|
||||
}
|
||||
}
|
||||
addi_d(sp, sp, stack_offset);
|
||||
}
|
||||
|
||||
void MacroAssembler::MultiPush(RegList regs1, RegList regs2, RegList regs3) {
|
||||
DCHECK((regs1 & regs2).is_empty());
|
||||
DCHECK((regs1 & regs3).is_empty());
|
||||
DCHECK((regs2 & regs3).is_empty());
|
||||
int16_t stack_offset = 0;
|
||||
int16_t num_to_push = regs1.Count() + regs2.Count() + regs3.Count();
|
||||
int16_t stack_offset = num_to_push * kSystemPointerSize;
|
||||
|
||||
Sub_d(sp, sp, Operand(stack_offset));
|
||||
for (int16_t i = kNumRegisters - 1; i >= 0; i--) {
|
||||
if ((regs1.bits() & (1 << i)) != 0) {
|
||||
stack_offset -= kSystemPointerSize;
|
||||
@@ -1680,7 +1684,6 @@ void MacroAssembler::MultiPush(RegList regs1, RegList regs2, RegList regs3) {
|
||||
St_d(ToRegister(i), MemOperand(sp, stack_offset));
|
||||
}
|
||||
}
|
||||
addi_d(sp, sp, stack_offset);
|
||||
}
|
||||
|
||||
void MacroAssembler::MultiPop(RegList regs) {
|
||||
@@ -4125,9 +4128,8 @@ void MacroAssembler::EnterFrame(StackFrame::Type type) {
|
||||
|
||||
void MacroAssembler::LeaveFrame(StackFrame::Type type) {
|
||||
ASM_CODE_COMMENT(this);
|
||||
addi_d(sp, fp, 2 * kSystemPointerSize);
|
||||
Ld_d(ra, MemOperand(fp, 1 * kSystemPointerSize));
|
||||
Ld_d(fp, MemOperand(fp, 0 * kSystemPointerSize));
|
||||
Move(sp, fp);
|
||||
Pop(ra, fp);
|
||||
}
|
||||
|
||||
void MacroAssembler::EnterExitFrame(Register scratch, int stack_space,
|
||||
|
||||
Reference in new issue
Block a user