[unwinder] Remove final FP bounds check which is invalid on Windows

Bug: v8:9092
Change-Id: I1839651c0a47dbbefa93c7441597c98653132ff8
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1554692
Auto-Submit: Peter Marshall <petermarshall@chromium.org>
Reviewed-by: Michael Starzinger <mstarzinger@chromium.org>
Commit-Queue: Peter Marshall <petermarshall@chromium.org>
Cr-Commit-Position: refs/heads/master@{#60748}
This commit is contained in:
Peter Marshall 2019-04-05 16:00:53 +02:00 committed by Commit Bot
parent 69e90801c2
commit c2498fe8fe
2 changed files with 10 additions and 5 deletions

View File

@ -80,8 +80,11 @@ bool Unwinder::TryUnwindV8Frames(const UnwindState& unwind_state,
if (!AddressIsInStack(final_sp, stack_base, stack_top)) return false;
register_state->sp = final_sp;
// We don't check that the final FP value is within the stack bounds because
// this is just the rbp value that JSEntryStub pushed. On platforms like
// Win64 this is not used as a dedicated FP register, and could contain
// anything.
void* final_fp = GetCallerFPFromFP(current_fp);
if (!AddressIsInStack(final_fp, stack_base, stack_top)) return false;
register_state->fp = final_fp;
register_state->pc = next_pc;

View File

@ -423,11 +423,13 @@ TEST(Unwind_StackBounds_WithUnwinding) {
stack_base);
CHECK(!unwound);
// Change the return address so that it is not in range.
// Change the return address so that it is not in range. We will not range
// check the stack[9] FP value because we have finished unwinding and the
// contents of rbp does not necessarily have to be the FP in this case.
stack[10] = 202;
unwound = v8::Unwinder::TryUnwindV8Frames(unwind_state, &register_state,
stack_base);
CHECK(!unwound);
CHECK(unwound);
}
TEST(PCIsInV8_BadState_Fail) {
@ -482,8 +484,8 @@ TEST(PCIsInV8_InCodeOrEmbeddedRange) {
embedded_range_length);
}
// PCIsInV8 doesn't check if the PC is in JSEntrydirectly. It's assumed that the
// CodeRange or EmbeddedCodeRange contain JSEntry.
// PCIsInV8 doesn't check if the PC is in JSEntry directly. It's assumed that
// the CodeRange or EmbeddedCodeRange contain JSEntry.
TEST(PCIsInV8_InJSEntryRange) {
LocalContext env;
v8::Isolate* isolate = env->GetIsolate();