diff options
author | 2018-07-27 18:47:44 +0100 | |
---|---|---|
committer | 2018-07-27 18:55:54 +0100 | |
commit | e8d3a63260b61608b9487177308d0a2ef0411045 (patch) | |
tree | de71242dde80f8c10751c556bddd7dd76ae7caa7 /compiler/exception_test.cc | |
parent | 9acb522e35e3302786a338c7f50585dd412d68d3 (diff) |
Fix exception_test.
Ensure that code_ptr is properly aligned,
regardless whether the vector is aligned.
Test: test-art-host-gtest-exception_test
Change-Id: I06f7af525323499be23c36e9720f669e98421415
Diffstat (limited to 'compiler/exception_test.cc')
-rw-r--r-- | compiler/exception_test.cc | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/compiler/exception_test.cc b/compiler/exception_test.cc index 90c9e52e84..6d952035c9 100644 --- a/compiler/exception_test.cc +++ b/compiler/exception_test.cc @@ -84,18 +84,18 @@ class ExceptionTest : public CommonRuntimeTest { const size_t stack_maps_size = stack_maps.PrepareForFillIn(); const size_t header_size = sizeof(OatQuickMethodHeader); const size_t code_alignment = GetInstructionSetAlignment(kRuntimeISA); - const size_t code_offset = RoundUp(stack_maps_size + header_size, code_alignment); - fake_header_code_and_maps_.resize(code_offset + fake_code_.size()); + 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. + uint8_t* code_ptr = + AlignUp(&fake_header_code_and_maps_[stack_maps_size + header_size], code_alignment); + MemoryRegion stack_maps_region(&fake_header_code_and_maps_[0], stack_maps_size); stack_maps.FillInCodeInfo(stack_maps_region); - OatQuickMethodHeader method_header(code_offset, 0u, code_size); + OatQuickMethodHeader method_header(code_ptr - stack_maps_region.begin(), 0u, code_size); static_assert(std::is_trivially_copyable<OatQuickMethodHeader>::value, "Cannot use memcpy"); - memcpy(&fake_header_code_and_maps_[code_offset - header_size], &method_header, header_size); - std::copy(fake_code_.begin(), - fake_code_.end(), - fake_header_code_and_maps_.begin() + code_offset); - const void* code_ptr = fake_header_code_and_maps_.data() + code_offset; + memcpy(code_ptr - header_size, &method_header, header_size); + memcpy(code_ptr, fake_code_.data(), fake_code_.size()); if (kRuntimeISA == InstructionSet::kArm) { // Check that the Thumb2 adjustment will be a NOP, see EntryPointToCodePointer(). |