From: yangguo@chromium.org Date: Mon, 29 Aug 2011 13:04:33 +0000 (+0000) Subject: Fix for a possible bug in RegExp stack guard. X-Git-Tag: upstream/4.7.83~18624 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=596daba583deb71cf2ca63e8f1cc1e692c7fa7f2;p=platform%2Fupstream%2Fv8.git Fix for a possible bug in RegExp stack guard. Review URL: http://codereview.chromium.org/7744051 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@9058 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/src/arm/regexp-macro-assembler-arm.cc b/src/arm/regexp-macro-assembler-arm.cc index 81645c7..cd76edb 100644 --- a/src/arm/regexp-macro-assembler-arm.cc +++ b/src/arm/regexp-macro-assembler-arm.cc @@ -1049,7 +1049,7 @@ int RegExpMacroAssemblerARM::CheckStackGuardState(Address* return_address, MaybeObject* result = Execution::HandleStackGuardInterrupt(); if (*code_handle != re_code) { // Return address no longer valid - int delta = *code_handle - re_code; + int delta = code_handle->address() - re_code->address(); // Overwrite the return address on the stack. *return_address += delta; } diff --git a/src/ia32/regexp-macro-assembler-ia32.cc b/src/ia32/regexp-macro-assembler-ia32.cc index 7d7de0e..d175d9e 100644 --- a/src/ia32/regexp-macro-assembler-ia32.cc +++ b/src/ia32/regexp-macro-assembler-ia32.cc @@ -1080,7 +1080,7 @@ int RegExpMacroAssemblerIA32::CheckStackGuardState(Address* return_address, MaybeObject* result = Execution::HandleStackGuardInterrupt(); if (*code_handle != re_code) { // Return address no longer valid - int delta = *code_handle - re_code; + int delta = code_handle->address() - re_code->address(); // Overwrite the return address on the stack. *return_address += delta; } diff --git a/src/x64/regexp-macro-assembler-x64.cc b/src/x64/regexp-macro-assembler-x64.cc index 7f80447..a782bd7 100644 --- a/src/x64/regexp-macro-assembler-x64.cc +++ b/src/x64/regexp-macro-assembler-x64.cc @@ -1185,7 +1185,7 @@ int RegExpMacroAssemblerX64::CheckStackGuardState(Address* return_address, MaybeObject* result = Execution::HandleStackGuardInterrupt(); if (*code_handle != re_code) { // Return address no longer valid - intptr_t delta = *code_handle - re_code; + intptr_t delta = code_handle->address() - re_code->address(); // Overwrite the return address on the stack. *return_address += delta; }