diff options
author | Roland Levillain <rpl@google.com> | 2015-03-13 12:40:16 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2015-03-13 12:40:16 +0000 |
commit | 63346f57e2327894ce6c1e28e3d00342177538a6 (patch) | |
tree | dd3e686f2915a5c1cf37f83c6a9882ae35ff9da2 /compiler/optimizing/stack_map_stream.h | |
parent | faa375ca1409707efaaeeb710b2e933e7668dbe9 (diff) | |
parent | 29ba1b068fc9f5a8011782c147b1f7732928aac7 (diff) | |
download | android_art-63346f57e2327894ce6c1e28e3d00342177538a6.tar.gz android_art-63346f57e2327894ce6c1e28e3d00342177538a6.tar.bz2 android_art-63346f57e2327894ce6c1e28e3d00342177538a6.zip |
Merge "Fix the computation of the size of the stack maps region."
Diffstat (limited to 'compiler/optimizing/stack_map_stream.h')
-rw-r--r-- | compiler/optimizing/stack_map_stream.h | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/compiler/optimizing/stack_map_stream.h b/compiler/optimizing/stack_map_stream.h index 76ddbf3204..8fb58d19a9 100644 --- a/compiler/optimizing/stack_map_stream.h +++ b/compiler/optimizing/stack_map_stream.h @@ -100,13 +100,17 @@ class StackMapStream : public ValueObject { size_t ComputeNeededSize() const { return CodeInfo::kFixedSize - + ComputeStackMapSize() + + ComputeStackMapsSize() + ComputeDexRegisterMapsSize() + ComputeInlineInfoSize(); } - size_t ComputeStackMapSize() const { - return stack_maps_.Size() * StackMap::ComputeAlignedStackMapSize(stack_mask_max_); + size_t ComputeStackMaskSize() const { + return StackMaskEncodingSize(stack_mask_max_); + } + + size_t ComputeStackMapsSize() const { + return stack_maps_.Size() * StackMap::ComputeAlignedStackMapSize(ComputeStackMaskSize()); } // Compute the size of the Dex register map of `entry`. @@ -141,7 +145,7 @@ class StackMapStream : public ValueObject { } size_t ComputeDexRegisterMapsStart() const { - return CodeInfo::kFixedSize + ComputeStackMapSize(); + return CodeInfo::kFixedSize + ComputeStackMapsSize(); } size_t ComputeInlineInfoStart() const { @@ -150,9 +154,10 @@ class StackMapStream : public ValueObject { void FillIn(MemoryRegion region) { CodeInfo code_info(region); + DCHECK_EQ(region.size(), ComputeNeededSize()); code_info.SetOverallSize(region.size()); - size_t stack_mask_size = StackMaskEncodingSize(stack_mask_max_); + size_t stack_mask_size = ComputeStackMaskSize(); uint8_t* memory_start = region.start(); MemoryRegion dex_register_maps_region = region.Subregion( @@ -165,6 +170,7 @@ class StackMapStream : public ValueObject { code_info.SetNumberOfStackMaps(stack_maps_.Size()); code_info.SetStackMaskSize(stack_mask_size); + DCHECK_EQ(code_info.StackMapsSize(), ComputeStackMapsSize()); uintptr_t next_dex_register_map_offset = 0; uintptr_t next_inline_info_offset = 0; |