From: Andreas Gampe Date: Mon, 22 Dec 2014 21:43:33 +0000 (-0800) Subject: ART: Fix common_compiler_test assumptions X-Git-Tag: android-x86-7.1-r1~889^2~2290^2 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=a2d0afc02234961d148686242c05b8a0c6365f9d;p=android-x86%2Fart.git 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 --- diff --git a/compiler/common_compiler_test.cc b/compiler/common_compiler_test.cc index d5c5e601e..7df71f5b8 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& vmap_table = compiled_method->GetVmapTable(); uint32_t vmap_table_offset = vmap_table.empty() ? 0u : sizeof(OatQuickMethodHeader) + vmap_table.size(); - const SwapVector& mapping_table = *compiled_method->GetMappingTable(); - uint32_t mapping_table_offset = mapping_table.empty() ? 0u - : sizeof(OatQuickMethodHeader) + vmap_table.size() + mapping_table.size(); - const SwapVector& 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* 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* 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()); std::vector* 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());