Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(846)

Unified Diff: src/zone/zone.cc

Issue 2672203002: Ensure we align zone memory at 8 byte boundaries on all platforms (Closed)
Patch Set: Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/zone/zone.h ('k') | test/unittests/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/zone/zone.cc
diff --git a/src/zone/zone.cc b/src/zone/zone.cc
index 05d68defcd68f6810bd3c83e78d45e4bd79e2762..8dd96dc1cd63319175e428f633491e305cf8e12f 100644
--- a/src/zone/zone.cc
+++ b/src/zone/zone.cc
@@ -63,15 +63,7 @@ Zone::~Zone() {
void* Zone::New(size_t size) {
// Round up the requested size to fit the alignment.
- size = RoundUp(size, kAlignment);
-
- // If the allocation size is divisible by 8 then we return an 8-byte aligned
- // address.
- if (kPointerSize == 4 && kAlignment == 4) {
- position_ += ((~size) & 4) & (reinterpret_cast<intptr_t>(position_) & 4);
- } else {
- DCHECK(kAlignment >= kPointerSize);
- }
+ size = RoundUp(size, kAlignmentInBytes);
// Check if the requested size is available without expanding.
Address result = position_;
@@ -91,7 +83,7 @@ void* Zone::New(size_t size) {
ASAN_POISON_MEMORY_REGION(redzone_position, kASanRedzoneBytes);
// Check that the result has the proper alignment and return it.
- DCHECK(IsAddressAligned(result, kAlignment, 0));
+ DCHECK(IsAddressAligned(result, kAlignmentInBytes, 0));
allocation_size_ += size;
return reinterpret_cast<void*>(result);
}
@@ -132,7 +124,7 @@ Segment* Zone::NewSegment(size_t requested_size) {
Address Zone::NewExpand(size_t size) {
// Make sure the requested size is already properly aligned and that
// there isn't enough room in the Zone to satisfy the request.
- DCHECK_EQ(size, RoundDown(size, kAlignment));
+ DCHECK_EQ(size, RoundDown(size, kAlignmentInBytes));
DCHECK(limit_ < position_ ||
reinterpret_cast<uintptr_t>(limit_) -
reinterpret_cast<uintptr_t>(position_) <
@@ -144,7 +136,7 @@ Address Zone::NewExpand(size_t size) {
// is to avoid excessive malloc() and free() overhead.
Segment* head = segment_head_;
const size_t old_size = (head == nullptr) ? 0 : head->size();
- static const size_t kSegmentOverhead = sizeof(Segment) + kAlignment;
+ static const size_t kSegmentOverhead = sizeof(Segment) + kAlignmentInBytes;
const size_t new_size_no_overhead = size + (old_size << 1);
size_t new_size = kSegmentOverhead + new_size_no_overhead;
const size_t min_new_size = kSegmentOverhead + size;
@@ -173,7 +165,7 @@ Address Zone::NewExpand(size_t size) {
}
// Recompute 'top' and 'limit' based on the new segment.
- Address result = RoundUp(segment->start(), kAlignment);
+ Address result = RoundUp(segment->start(), kAlignmentInBytes);
position_ = result + size;
// Check for address overflow.
// (Should not happen since the segment is guaranteed to accomodate
« no previous file with comments | « src/zone/zone.h ('k') | test/unittests/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698