summaryrefslogtreecommitdiffstats
path: root/compiler/common_compiler_test.cc
diff options
context:
space:
mode:
authorAndreas Gampe <agampe@google.com>2014-12-22 13:43:33 -0800
committerAndreas Gampe <agampe@google.com>2014-12-22 13:43:33 -0800
commita2d0afc02234961d148686242c05b8a0c6365f9d (patch)
tree767ca74e7f585364a4e5c4a475be8ccbac364164 /compiler/common_compiler_test.cc
parent06814c9a6e40e8a1e211cd40ebf6431ce4a9721d (diff)
downloadandroid_art-a2d0afc02234961d148686242c05b8a0c6365f9d.tar.gz
android_art-a2d0afc02234961d148686242c05b8a0c6365f9d.tar.bz2
android_art-a2d0afc02234961d148686242c05b8a0c6365f9d.zip
ART: Fix common_compiler_test assumptions
JNI-compiled methods now do not have mapping tables or GC maps, not even zero-sized. Update the code in common_compiler_test. Bug: 18596910 Change-Id: If22bf1b2e369273148f060b0b1ffc02b2b1ef608
Diffstat (limited to 'compiler/common_compiler_test.cc')
-rw-r--r--compiler/common_compiler_test.cc28
1 files changed, 18 insertions, 10 deletions
diff --git a/compiler/common_compiler_test.cc b/compiler/common_compiler_test.cc
index d5c5e601e7..7df71f5b8a 100644
--- a/compiler/common_compiler_test.cc
+++ b/compiler/common_compiler_test.cc
@@ -54,12 +54,16 @@ void CommonCompilerTest::MakeExecutable(mirror::ArtMethod* method) {
const SwapVector<uint8_t>& vmap_table = compiled_method->GetVmapTable();
uint32_t vmap_table_offset = vmap_table.empty() ? 0u
: sizeof(OatQuickMethodHeader) + vmap_table.size();
- const SwapVector<uint8_t>& mapping_table = *compiled_method->GetMappingTable();
- uint32_t mapping_table_offset = mapping_table.empty() ? 0u
- : sizeof(OatQuickMethodHeader) + vmap_table.size() + mapping_table.size();
- const SwapVector<uint8_t>& gc_map = *compiled_method->GetGcMap();
- uint32_t gc_map_offset = gc_map.empty() ? 0u
- : sizeof(OatQuickMethodHeader) + vmap_table.size() + mapping_table.size() + gc_map.size();
+ const SwapVector<uint8_t>* mapping_table = compiled_method->GetMappingTable();
+ bool mapping_table_used = mapping_table != nullptr && !mapping_table->empty();
+ size_t mapping_table_size = mapping_table_used ? mapping_table->size() : 0U;
+ uint32_t mapping_table_offset = !mapping_table_used ? 0u
+ : sizeof(OatQuickMethodHeader) + vmap_table.size() + mapping_table_size;
+ const SwapVector<uint8_t>* gc_map = compiled_method->GetGcMap();
+ bool gc_map_used = gc_map != nullptr && !gc_map->empty();
+ size_t gc_map_size = gc_map_used ? gc_map->size() : 0U;
+ uint32_t gc_map_offset = !gc_map_used ? 0u
+ : sizeof(OatQuickMethodHeader) + vmap_table.size() + mapping_table_size + gc_map_size;
OatQuickMethodHeader method_header(mapping_table_offset, vmap_table_offset, gc_map_offset,
compiled_method->GetFrameSizeInBytes(),
compiled_method->GetCoreSpillMask(),
@@ -67,16 +71,20 @@ void CommonCompilerTest::MakeExecutable(mirror::ArtMethod* method) {
header_code_and_maps_chunks_.push_back(std::vector<uint8_t>());
std::vector<uint8_t>* chunk = &header_code_and_maps_chunks_.back();
- size_t size = sizeof(method_header) + code_size + vmap_table.size() + mapping_table.size() +
- gc_map.size();
+ size_t size = sizeof(method_header) + code_size + vmap_table.size() + mapping_table_size +
+ gc_map_size;
size_t code_offset = compiled_method->AlignCode(size - code_size);
size_t padding = code_offset - (size - code_size);
chunk->reserve(padding + size);
chunk->resize(sizeof(method_header));
memcpy(&(*chunk)[0], &method_header, sizeof(method_header));
chunk->insert(chunk->begin(), vmap_table.begin(), vmap_table.end());
- chunk->insert(chunk->begin(), mapping_table.begin(), mapping_table.end());
- chunk->insert(chunk->begin(), gc_map.begin(), gc_map.end());
+ if (mapping_table_used) {
+ chunk->insert(chunk->begin(), mapping_table->begin(), mapping_table->end());
+ }
+ if (gc_map_used) {
+ chunk->insert(chunk->begin(), gc_map->begin(), gc_map->end());
+ }
chunk->insert(chunk->begin(), padding, 0);
chunk->insert(chunk->end(), code->begin(), code->end());
CHECK_EQ(padding + size, chunk->size());