summaryrefslogtreecommitdiff
path: root/compiler/optimizing/codegen_test_utils.h
diff options
context:
space:
mode:
authorVladimir Marko <vmarko@google.com>2021-02-02 14:29:04 +0000
committerVladimir Marko <vmarko@google.com>2021-02-03 08:35:17 +0000
commit37fd800e917269df7824052452bcbd65f5528a3e (patch)
tree46a1c77e994a5d238d385d579320eaf3224c6630 /compiler/optimizing/codegen_test_utils.h
parent98071159668576ae08c2b0de80b0565d58f409f2 (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.h12
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);