Force word alignment of Dex register maps.
Plus some cosmetic changes.
Change-Id: I45e805aa87c2ef8fe8907eaae726cd2188b54897
diff --git a/compiler/optimizing/stack_map_stream.h b/compiler/optimizing/stack_map_stream.h
index 79bebd2..76ddbf3 100644
--- a/compiler/optimizing/stack_map_stream.h
+++ b/compiler/optimizing/stack_map_stream.h
@@ -129,7 +129,8 @@
DexRegisterLocation entry = dex_register_maps_.Get(i);
size += DexRegisterMap::EntrySize(entry);
}
- return size;
+ // On ARM, the Dex register maps must be 4-byte aligned.
+ return RoundUp(size, kWordAlignment);
}
// Compute the size of all the inline information pieces.
@@ -139,12 +140,12 @@
+ (number_of_stack_maps_with_inline_info_ * InlineInfo::kFixedSize);
}
- size_t ComputeDexRegisterMapStart() const {
+ size_t ComputeDexRegisterMapsStart() const {
return CodeInfo::kFixedSize + ComputeStackMapSize();
}
size_t ComputeInlineInfoStart() const {
- return ComputeDexRegisterMapStart() + ComputeDexRegisterMapsSize();
+ return ComputeDexRegisterMapsStart() + ComputeDexRegisterMapsSize();
}
void FillIn(MemoryRegion region) {
@@ -155,7 +156,7 @@
uint8_t* memory_start = region.start();
MemoryRegion dex_register_maps_region = region.Subregion(
- ComputeDexRegisterMapStart(),
+ ComputeDexRegisterMapsStart(),
ComputeDexRegisterMapsSize());
MemoryRegion inline_infos_region = region.Subregion(
diff --git a/runtime/stack_map.h b/runtime/stack_map.h
index c981623..e88820f 100644
--- a/runtime/stack_map.h
+++ b/runtime/stack_map.h
@@ -28,6 +28,9 @@
// (signed) values.
static ssize_t constexpr kFrameSlotSize = 4;
+// Word alignment required on ARM, in bytes.
+static constexpr size_t kWordAlignment = 4;
+
/**
* Classes in the following file are wrapper on stack map information backed
* by a MemoryRegion. As such they read and write to the region, they don't have
@@ -526,9 +529,9 @@
&& region_.size() == other.region_.size();
}
- static size_t ComputeAlignedStackMapSize(size_t stack_map_size) {
+ static size_t ComputeAlignedStackMapSize(size_t stack_mask_size) {
// On ARM, the stack maps must be 4-byte aligned.
- return RoundUp(StackMap::kFixedSize + stack_map_size, 4);
+ return RoundUp(StackMap::kFixedSize + stack_mask_size, kWordAlignment);
}
// Special (invalid) offset for the DexRegisterMapOffset field meaning