Revert "cppgc: Try to fix test IteratePointersFindsCalleeSavedRegisters, vol.2"
This reverts commit c4cb14c754
.
Reason for revert:
https://ci.chromium.org/p/v8/builders/ci/V8%20Mac64%20-%20debug/33969
Original change's description:
> cppgc: Try to fix test IteratePointersFindsCalleeSavedRegisters, vol.2
>
> The previous attempt has broken the tsan bot. The only reliable way to
> make sure that registers are not clobbered is by doing direct call from
> inline assembly, which is what this CL does.
>
> Change-Id: I6adbd5e735949a7cc4cc7fc686ee8c428863ffb9
> Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2859947
> Commit-Queue: Anton Bikineev <bikineev@chromium.org>
> Reviewed-by: Michael Lippautz <mlippautz@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#74313}
Change-Id: I00260aeacdac8704475b37fd99d4ef552c523249
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2865746
Auto-Submit: Michael Achenbach <machenbach@chromium.org>
Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Cr-Commit-Position: refs/heads/master@{#74314}
This commit is contained in:
parent
c4cb14c754
commit
a20d18f138
@ -308,16 +308,6 @@ TEST_F(GCStackTest, IteratePointersFindsParameterNesting8) {
|
||||
|
||||
#ifdef FOR_ALL_CALLEE_SAVED_REGS
|
||||
|
||||
namespace {
|
||||
#if !defined(V8_OS_WIN)
|
||||
__attribute__((visibility("hidden")))
|
||||
#endif
|
||||
extern "C" void
|
||||
IteratePointersNoMangling(Stack* stack, StackVisitor* visitor) {
|
||||
stack->IteratePointers(visitor);
|
||||
}
|
||||
} // namespace
|
||||
|
||||
TEST_F(GCStackTest, IteratePointersFindsCalleeSavedRegisters) {
|
||||
auto scanner = std::make_unique<StackScanner>();
|
||||
|
||||
@ -334,35 +324,22 @@ TEST_F(GCStackTest, IteratePointersFindsCalleeSavedRegisters) {
|
||||
auto* local_stack = GetStack();
|
||||
auto* local_scanner = scanner.get();
|
||||
|
||||
#define MOVE_TO_REG_AND_CALL_IMPL(needle_reg, arg1, arg2) \
|
||||
asm volatile("mov %0, %%" needle_reg "\n mov %1, %%" arg1 \
|
||||
"\n mov %2, %%" arg2 \
|
||||
"\n call %P3" \
|
||||
"\n mov $0, %%" needle_reg \
|
||||
: \
|
||||
: "r"(local_scanner->needle()), "r"(local_stack), \
|
||||
"r"(local_scanner), "i"(IteratePointersNoMangling) \
|
||||
: "memory", needle_reg, arg1, arg2, "cc");
|
||||
|
||||
#ifdef V8_OS_WIN
|
||||
#define MOVE_TO_REG_AND_CALL(reg) MOVE_TO_REG_AND_CALL_IMPL(reg, "rcx", "rdx")
|
||||
#else // !V8_OS_WIN
|
||||
#define MOVE_TO_REG_AND_CALL(reg) MOVE_TO_REG_AND_CALL_IMPL(reg, "rdi", "rsi")
|
||||
#endif // V8_OS_WIN
|
||||
|
||||
// Moves |local_scanner->needle()| into a callee-saved register, leaving the
|
||||
// callee-saved register as the only register referencing the needle.
|
||||
// (Ignoring implementation-dependent dirty registers/stack.)
|
||||
#define KEEP_ALIVE_FROM_CALLEE_SAVED(reg) \
|
||||
local_scanner->Reset(); \
|
||||
[local_stack, local_scanner]() V8_NOINLINE { MOVE_TO_REG_AND_CALL(reg) }(); \
|
||||
EXPECT_TRUE(local_scanner->found()) \
|
||||
<< "pointer in callee-saved register not found. register: " << reg \
|
||||
<< std::endl;
|
||||
#define KEEP_ALIVE_FROM_CALLEE_SAVED(reg) \
|
||||
local_scanner->Reset(); \
|
||||
/* This moves the temporary into the calee-saved register. */ \
|
||||
asm("mov %0, %%" reg : : "r"(local_scanner->needle()) : reg); \
|
||||
/* Register is unprotected from here till the actual invocation. */ \
|
||||
local_stack->IteratePointers(local_scanner); \
|
||||
EXPECT_TRUE(local_scanner->found()) \
|
||||
<< "pointer in callee-saved register not found. register: " << reg \
|
||||
<< std::endl; \
|
||||
/* Clear out the register again */ \
|
||||
asm("mov $0, %%" reg : : : reg);
|
||||
|
||||
FOR_ALL_CALLEE_SAVED_REGS(KEEP_ALIVE_FROM_CALLEE_SAVED)
|
||||
#undef MOVE_TO_REG_AND_CALL
|
||||
#undef MOVE_TO_REG_AND_CALL_IMPL
|
||||
#undef KEEP_ALIVE_FROM_CALLEE_SAVED
|
||||
#undef FOR_ALL_CALLEE_SAVED_REGS
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user