Skip to content

Commit 24119b8

Browse files
committed
deps: V8: cherry-pick 7107287
Original commit message: aix: add required changes to build with clang Change-Id: Icc78c58831306aa2f227843b0b4ec2321585fa64 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/7107287 Reviewed-by: Toon Verwaest <verwaest@chromium.org> Commit-Queue: Clemens Backes <clemensb@chromium.org> Reviewed-by: Leszek Swirski <leszeks@chromium.org> Cr-Commit-Position: refs/heads/main@{#104364}
1 parent 9e9308a commit 24119b8

File tree

6 files changed

+33
-12
lines changed

6 files changed

+33
-12
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.17',
41+
'v8_embedder_string': '-node.18',
4242

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

deps/v8/BUILD.gn

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1583,7 +1583,7 @@ config("toolchain") {
15831583
if (v8_current_cpu == "ppc64") {
15841584
defines += [ "V8_TARGET_ARCH_PPC64" ]
15851585
cflags += [ "-ffp-contract=off" ]
1586-
if (current_os == "aix") {
1586+
if (current_os == "aix" and !is_clang) {
15871587
cflags += [
15881588
# Work around AIX ceil, trunc and round oddities.
15891589
"-mcpu=power5+",

deps/v8/src/builtins/ppc/builtins-ppc.cc

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4219,6 +4219,19 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size,
42194219

42204220
// If return value is on the stack, pop it to registers.
42214221
if (needs_return_buffer) {
4222+
Label done;
4223+
if (switch_to_central_stack) {
4224+
Label no_stack_change;
4225+
__ CmpU64(kOldSPRegister, Operand(0), r0);
4226+
__ beq(&no_stack_change);
4227+
__ addi(r3, kOldSPRegister,
4228+
Operand((kStackFrameExtraParamSlot + 1) * kSystemPointerSize));
4229+
__ b(&done);
4230+
__ bind(&no_stack_change);
4231+
}
4232+
__ addi(r3, sp,
4233+
Operand((kStackFrameExtraParamSlot + 1) * kSystemPointerSize));
4234+
__ bind(&done);
42224235
__ LoadU64(r4, MemOperand(r3, kSystemPointerSize));
42234236
__ LoadU64(r3, MemOperand(r3));
42244237
}

deps/v8/src/compiler/turboshaft/operations.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -526,7 +526,7 @@ class InputsRepFactory {
526526
};
527527
};
528528

529-
struct EffectDimensions {
529+
struct __attribute__((packed)) EffectDimensions {
530530
// Produced by loads, consumed by operations that should not move before loads
531531
// because they change memory.
532532
bool load_heap_memory : 1;
@@ -621,7 +621,7 @@ static_assert(sizeof(EffectDimensions) == sizeof(EffectDimensions::Bits));
621621
// they become more restricted in their movement. Note that calls are not the
622622
// most side-effectful operations, as they do not leave the heap in an
623623
// inconsistent state, so they do not need to be marked as raw heap access.
624-
struct OpEffects {
624+
struct __attribute__((packed)) OpEffects {
625625
EffectDimensions produces;
626626
EffectDimensions consumes;
627627

@@ -2878,7 +2878,7 @@ struct ConstantOp : FixedArityOperationT<0, ConstantOp> {
28782878
// When result_rep is RegisterRepresentation::Compressed(), then the load does
28792879
// not decompress the value.
28802880
struct LoadOp : OperationT<LoadOp> {
2881-
struct Kind {
2881+
struct __attribute__((packed)) Kind {
28822882
// The `base` input is a tagged pointer to a HeapObject.
28832883
bool tagged_base : 1;
28842884
// The effective address might be unaligned. This is only set to true if

deps/v8/src/execution/simulator.h

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -199,13 +199,17 @@ class GeneratedCode {
199199
return fn(args...);
200200
#else
201201
// AIX ABI requires function descriptors (FD). Artificially create a pseudo
202-
// FD to ensure correct dispatch to generated code. The 'volatile'
203-
// declaration is required to avoid the compiler from not observing the
204-
// alias of the pseudo FD to the function pointer, and hence, optimizing the
205-
// pseudo FD declaration/initialization away.
206-
volatile Address function_desc[] = {reinterpret_cast<Address>(fn_ptr_), 0,
207-
0};
208-
Signature* fn = reinterpret_cast<Signature*>(function_desc);
202+
// FD to ensure correct dispatch to generated code.
203+
void* function_desc[3];
204+
Signature* fn;
205+
asm("std %1, 0(%2)\n\t"
206+
"li 0, 0\n\t"
207+
"std 0, 8(%2)\n\t"
208+
"std 0, 16(%2)\n\t"
209+
"mr %0, %2\n\t"
210+
: "=r"(fn)
211+
: "r"(fn_ptr_), "r"(function_desc)
212+
: "memory", "0");
209213
return fn(args...);
210214
#endif // V8_OS_ZOS
211215
#else

deps/v8/src/trap-handler/handler-shared.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,11 @@ namespace v8 {
2424
namespace internal {
2525
namespace trap_handler {
2626

27+
#if defined(V8_OS_AIX)
28+
__thread bool TrapHandlerGuard::is_active_ = 0;
29+
#else
2730
thread_local bool TrapHandlerGuard::is_active_ = 0;
31+
#endif
2832

2933
size_t gNumCodeObjects = 0;
3034
CodeProtectionInfoListEntry* gCodeObjects = nullptr;

0 commit comments

Comments
 (0)