Skip to content

Commit 5761724

Browse files
Xiao-Taotargos
authored andcommitted
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 <[email protected]> Reviewed-by: Matthias Liedtke <[email protected]> Commit-Queue: Matthias Liedtke <[email protected]> Cr-Commit-Position: refs/heads/main@{#101634} Refs: v8/v8@6b1b9bc PR-URL: #59283 Reviewed-By: Marco Ippolito <[email protected]>
1 parent bf26b47 commit 5761724

File tree

2 files changed

+12
-10
lines changed

2 files changed

+12
-10
lines changed

common.gypi

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838

3939
# Reset this number to 0 on major V8 upgrades.
4040
# Increment by one for each non-official patch applied to deps/v8.
41-
'v8_embedder_string': '-node.26',
41+
'v8_embedder_string': '-node.27',
4242

4343
##### V8 defaults for Node.js #####
4444

deps/v8/src/codegen/loong64/macro-assembler-loong64.cc

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1626,21 +1626,24 @@ void MacroAssembler::LoadIsolateField(Register dst, IsolateFieldId id) {
16261626
}
16271627

16281628
void MacroAssembler::MultiPush(RegList regs) {
1629-
int16_t stack_offset = 0;
1629+
int16_t num_to_push = regs.Count();
1630+
int16_t stack_offset = num_to_push * kSystemPointerSize;
16301631

1632+
Sub_d(sp, sp, Operand(stack_offset));
16311633
for (int16_t i = kNumRegisters - 1; i >= 0; i--) {
16321634
if ((regs.bits() & (1 << i)) != 0) {
16331635
stack_offset -= kSystemPointerSize;
16341636
St_d(ToRegister(i), MemOperand(sp, stack_offset));
16351637
}
16361638
}
1637-
addi_d(sp, sp, stack_offset);
16381639
}
16391640

16401641
void MacroAssembler::MultiPush(RegList regs1, RegList regs2) {
16411642
DCHECK((regs1 & regs2).is_empty());
1642-
int16_t stack_offset = 0;
1643+
int16_t num_to_push = regs1.Count() + regs2.Count();
1644+
int16_t stack_offset = num_to_push * kSystemPointerSize;
16431645

1646+
Sub_d(sp, sp, Operand(stack_offset));
16441647
for (int16_t i = kNumRegisters - 1; i >= 0; i--) {
16451648
if ((regs1.bits() & (1 << i)) != 0) {
16461649
stack_offset -= kSystemPointerSize;
@@ -1653,15 +1656,16 @@ void MacroAssembler::MultiPush(RegList regs1, RegList regs2) {
16531656
St_d(ToRegister(i), MemOperand(sp, stack_offset));
16541657
}
16551658
}
1656-
addi_d(sp, sp, stack_offset);
16571659
}
16581660

16591661
void MacroAssembler::MultiPush(RegList regs1, RegList regs2, RegList regs3) {
16601662
DCHECK((regs1 & regs2).is_empty());
16611663
DCHECK((regs1 & regs3).is_empty());
16621664
DCHECK((regs2 & regs3).is_empty());
1663-
int16_t stack_offset = 0;
1665+
int16_t num_to_push = regs1.Count() + regs2.Count() + regs3.Count();
1666+
int16_t stack_offset = num_to_push * kSystemPointerSize;
16641667

1668+
Sub_d(sp, sp, Operand(stack_offset));
16651669
for (int16_t i = kNumRegisters - 1; i >= 0; i--) {
16661670
if ((regs1.bits() & (1 << i)) != 0) {
16671671
stack_offset -= kSystemPointerSize;
@@ -1680,7 +1684,6 @@ void MacroAssembler::MultiPush(RegList regs1, RegList regs2, RegList regs3) {
16801684
St_d(ToRegister(i), MemOperand(sp, stack_offset));
16811685
}
16821686
}
1683-
addi_d(sp, sp, stack_offset);
16841687
}
16851688

16861689
void MacroAssembler::MultiPop(RegList regs) {
@@ -4125,9 +4128,8 @@ void MacroAssembler::EnterFrame(StackFrame::Type type) {
41254128

41264129
void MacroAssembler::LeaveFrame(StackFrame::Type type) {
41274130
ASM_CODE_COMMENT(this);
4128-
addi_d(sp, fp, 2 * kSystemPointerSize);
4129-
Ld_d(ra, MemOperand(fp, 1 * kSystemPointerSize));
4130-
Ld_d(fp, MemOperand(fp, 0 * kSystemPointerSize));
4131+
Move(sp, fp);
4132+
Pop(ra, fp);
41314133
}
41324134

41334135
void MacroAssembler::EnterExitFrame(Register scratch, int stack_space,

0 commit comments

Comments
 (0)