summaryrefslogtreecommitdiff
path: root/compiler/exception_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/exception_test.cc')
-rw-r--r--compiler/exception_test.cc31
1 files changed, 24 insertions, 7 deletions
diff --git a/compiler/exception_test.cc b/compiler/exception_test.cc
index 495398b4b3..82c4998217 100644
--- a/compiler/exception_test.cc
+++ b/compiler/exception_test.cc
@@ -14,6 +14,8 @@
* limitations under the License.
*/
+#include <android-base/test_utils.h>
+
#include <memory>
#include <type_traits>
@@ -22,6 +24,7 @@
#include "base/callee_save_type.h"
#include "base/enums.h"
#include "base/leb128.h"
+#include "base/macros.h"
#include "base/malloc_arena_pool.h"
#include "class_linker.h"
#include "common_runtime_test.h"
@@ -42,7 +45,7 @@
#include "scoped_thread_state_change-inl.h"
#include "thread.h"
-namespace art {
+namespace art HIDDEN {
class ExceptionTest : public CommonRuntimeTest {
protected:
@@ -78,7 +81,12 @@ class ExceptionTest : public CommonRuntimeTest {
ArenaStack arena_stack(&pool);
ScopedArenaAllocator allocator(&arena_stack);
StackMapStream stack_maps(&allocator, kRuntimeISA);
- stack_maps.BeginMethod(4 * sizeof(void*), 0u, 0u, 0u);
+ stack_maps.BeginMethod(/* frame_size_in_bytes= */ 4 * sizeof(void*),
+ /* core_spill_mask= */ 0u,
+ /* fp_spill_mask= */ 0u,
+ /* num_dex_registers= */ 0u,
+ /* baseline= */ false,
+ /* debuggable= */ false);
stack_maps.BeginStackMapEntry(kDexPc, native_pc_offset);
stack_maps.EndStackMapEntry();
stack_maps.EndMethod(code_size);
@@ -86,7 +94,7 @@ class ExceptionTest : public CommonRuntimeTest {
const size_t stack_maps_size = stack_map.size();
const size_t header_size = sizeof(OatQuickMethodHeader);
- const size_t code_alignment = GetInstructionSetAlignment(kRuntimeISA);
+ const size_t code_alignment = GetInstructionSetCodeAlignment(kRuntimeISA);
fake_header_code_and_maps_.resize(stack_maps_size + header_size + code_size + code_alignment);
// NB: The start of the vector might not have been allocated the desired alignment.
@@ -187,15 +195,24 @@ TEST_F(ExceptionTest, StackTraceElement) {
fake_stack.push_back(0);
}
- fake_stack.push_back(method_g_->GetOatQuickMethodHeader(0)->ToNativeQuickPc(
- method_g_, kDexPc, /* is_for_catch_handler= */ false)); // return pc
+ OatQuickMethodHeader* header = OatQuickMethodHeader::FromEntryPoint(
+ method_g_->GetEntryPointFromQuickCompiledCode());
+ // Untag native pc when running with hwasan since the pcs on the stack aren't tagged and we use
+ // this to create a fake stack. See OatQuickMethodHeader::Contains where we untag code pointers
+ // before comparing it with the PC from the stack.
+ uintptr_t native_pc = header->ToNativeQuickPc(method_g_, kDexPc);
+ if (running_with_hwasan()) {
+ // TODO(228989263): Use HWASanUntag once we have a hwasan target for tests too. HWASanUntag
+ // uses static checks which won't work if we don't have a dedicated target.
+ native_pc = (native_pc & ((1ULL << 56) - 1));
+ }
+ fake_stack.push_back(native_pc); // return pc
// Create/push fake 16byte stack frame for method g
fake_stack.push_back(reinterpret_cast<uintptr_t>(method_g_));
fake_stack.push_back(0);
fake_stack.push_back(0);
- fake_stack.push_back(method_g_->GetOatQuickMethodHeader(0)->ToNativeQuickPc(
- method_g_, kDexPc, /* is_for_catch_handler= */ false)); // return pc
+ fake_stack.push_back(native_pc); // return pc.
// Create/push fake 16byte stack frame for method f
fake_stack.push_back(reinterpret_cast<uintptr_t>(method_f_));