summaryrefslogtreecommitdiffstats
path: root/compiler/optimizing/stack_map_stream.h
diff options
context:
space:
mode:
authorRoland Levillain <rpl@google.com>2015-03-13 12:40:16 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2015-03-13 12:40:16 +0000
commit63346f57e2327894ce6c1e28e3d00342177538a6 (patch)
treedd3e686f2915a5c1cf37f83c6a9882ae35ff9da2 /compiler/optimizing/stack_map_stream.h
parentfaa375ca1409707efaaeeb710b2e933e7668dbe9 (diff)
parent29ba1b068fc9f5a8011782c147b1f7732928aac7 (diff)
downloadandroid_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.h16
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;