diff options
author | Vladimir Marko <vmarko@google.com> | 2021-02-02 14:29:04 +0000 |
---|---|---|
committer | Vladimir Marko <vmarko@google.com> | 2021-02-03 08:35:17 +0000 |
commit | 37fd800e917269df7824052452bcbd65f5528a3e (patch) | |
tree | 46a1c77e994a5d238d385d579320eaf3224c6630 /compiler/optimizing/codegen_test_utils.h | |
parent | 98071159668576ae08c2b0de80b0565d58f409f2 (diff) |
Use mmap for compiled code for gtest.
Avoid executing code in memory allocated with malloc() as
pointers to that memory can be tagged which interferes with
managed stack walk.
Test: m test-art-host-gtest.
Bug: 177816575
Change-Id: Id376091f82d5686adf3ab18d2980a42e78de57ce
Diffstat (limited to 'compiler/optimizing/codegen_test_utils.h')
-rw-r--r-- | compiler/optimizing/codegen_test_utils.h | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/compiler/optimizing/codegen_test_utils.h b/compiler/optimizing/codegen_test_utils.h index 9d15f1f294..397e601cee 100644 --- a/compiler/optimizing/codegen_test_utils.h +++ b/compiler/optimizing/codegen_test_utils.h @@ -248,9 +248,17 @@ static void Run(const InternalCodeAllocator& allocator, Expected expected) { InstructionSet target_isa = codegen.GetInstructionSet(); + struct CodeHolder : CommonCompilerTestImpl { + protected: + ClassLinker* GetClassLinker() override { return nullptr; } + Runtime* GetRuntime() override { return nullptr; } + }; + CodeHolder code_holder; + const void* code_ptr = + code_holder.MakeExecutable(allocator.GetMemory(), ArrayRef<const uint8_t>(), target_isa); + typedef Expected (*fptr)(); - CommonCompilerTest::MakeExecutable(allocator.GetMemory().data(), allocator.GetMemory().size()); - fptr f = reinterpret_cast<fptr>(reinterpret_cast<uintptr_t>(allocator.GetMemory().data())); + fptr f = reinterpret_cast<fptr>(reinterpret_cast<uintptr_t>(code_ptr)); if (target_isa == InstructionSet::kThumb2) { // For thumb we need the bottom bit set. f = reinterpret_cast<fptr>(reinterpret_cast<uintptr_t>(f) + 1); |