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

Side by Side Diff: syzygy/agent/asan/heaps/large_block_heap_unittest.cc

Issue 2508333002: Remove the is_nested bit from the BlockInfo structure. (Closed)
Patch Set: Address Siggi's comments. Created 4 years 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 Google Inc. All Rights Reserved. 1 // Copyright 2014 Google Inc. All Rights Reserved.
2 // 2 //
3 // Licensed under the Apache License, Version 2.0 (the "License"); 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License. 4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at 5 // You may obtain a copy of the License at
6 // 6 //
7 // http://www.apache.org/licenses/LICENSE-2.0 7 // http://www.apache.org/licenses/LICENSE-2.0
8 // 8 //
9 // Unless required by applicable law or agreed to in writing, software 9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS, 10 // distributed under the License is distributed on an "AS IS" BASIS,
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 TestLargeBlockHeap h; 63 TestLargeBlockHeap h;
64 EXPECT_EQ(0u, h.size()); 64 EXPECT_EQ(0u, h.size());
65 65
66 BlockLayout layout = {}; 66 BlockLayout layout = {};
67 BlockInfo block = {}; 67 BlockInfo block = {};
68 68
69 // Allocate and free a zero-sized allocation. This should succeed by 69 // Allocate and free a zero-sized allocation. This should succeed by
70 // definition. 70 // definition.
71 void* alloc = h.AllocateBlock(0, 0, 0, &layout); 71 void* alloc = h.AllocateBlock(0, 0, 0, &layout);
72 EXPECT_EQ(1u, h.size()); 72 EXPECT_EQ(1u, h.size());
73 BlockInitialize(layout, alloc, false, &block); 73 BlockInitialize(layout, alloc, &block);
74 EXPECT_TRUE(h.FreeBlock(block)); 74 EXPECT_TRUE(h.FreeBlock(block));
75 EXPECT_EQ(0u, h.size()); 75 EXPECT_EQ(0u, h.size());
76 76
77 // Make a bunch of different sized allocations. 77 // Make a bunch of different sized allocations.
78 BlockInfoSet blocks; 78 BlockInfoSet blocks;
79 for (uint32_t i = 1, j = 1; i < 1024 * 1024; i <<= 1, ++j) { 79 for (uint32_t i = 1, j = 1; i < 1024 * 1024; i <<= 1, ++j) {
80 void* alloc = h.AllocateBlock(i, 0, 0, &layout); 80 void* alloc = h.AllocateBlock(i, 0, 0, &layout);
81 EXPECT_EQ(j, h.size()); 81 EXPECT_EQ(j, h.size());
82 EXPECT_EQ(0u, layout.block_size % GetPageSize()); 82 EXPECT_EQ(0u, layout.block_size % GetPageSize());
83 EXPECT_EQ(0u, reinterpret_cast<uintptr_t>(alloc) % GetPageSize()); 83 EXPECT_EQ(0u, reinterpret_cast<uintptr_t>(alloc) % GetPageSize());
84 EXPECT_LE(GetPageSize(), layout.header_size + layout.header_padding_size); 84 EXPECT_LE(GetPageSize(), layout.header_size + layout.header_padding_size);
85 EXPECT_EQ(i, layout.body_size); 85 EXPECT_EQ(i, layout.body_size);
86 EXPECT_LE(GetPageSize(), layout.trailer_padding_size + layout.trailer_size); 86 EXPECT_LE(GetPageSize(), layout.trailer_padding_size + layout.trailer_size);
87 BlockInitialize(layout, alloc, false, &block); 87 BlockInitialize(layout, alloc, &block);
88 blocks.insert(block); 88 blocks.insert(block);
89 } 89 }
90 90
91 // Now free them. 91 // Now free them.
92 BlockInfoSet::const_iterator it = blocks.begin(); 92 BlockInfoSet::const_iterator it = blocks.begin();
93 for (; it != blocks.end(); ++it) 93 for (; it != blocks.end(); ++it)
94 EXPECT_TRUE(h.FreeBlock(*it)); 94 EXPECT_TRUE(h.FreeBlock(*it));
95 EXPECT_EQ(0u, h.size()); 95 EXPECT_EQ(0u, h.size());
96 } 96 }
97 97
98 TEST(LargeBlockHeapTest, ZeroSizedAllocationsHaveDistinctAddresses) { 98 TEST(LargeBlockHeapTest, ZeroSizedAllocationsHaveDistinctAddresses) {
99 TestLargeBlockHeap h; 99 TestLargeBlockHeap h;
100 100
101 void* a1 = h.Allocate(0); 101 void* a1 = h.Allocate(0);
102 EXPECT_TRUE(a1 != NULL); 102 EXPECT_TRUE(a1 != NULL);
103 void* a2 = h.Allocate(0); 103 void* a2 = h.Allocate(0);
104 EXPECT_TRUE(a2 != NULL); 104 EXPECT_TRUE(a2 != NULL);
105 EXPECT_NE(a1, a2); 105 EXPECT_NE(a1, a2);
106 EXPECT_TRUE(h.Free(a1)); 106 EXPECT_TRUE(h.Free(a1));
107 EXPECT_TRUE(h.Free(a2)); 107 EXPECT_TRUE(h.Free(a2));
108 108
109 BlockLayout layout = {}; 109 BlockLayout layout = {};
110 110
111 BlockInfo b1 = {}; 111 BlockInfo b1 = {};
112 a1 = h.AllocateBlock(0, 0, 0, &layout); 112 a1 = h.AllocateBlock(0, 0, 0, &layout);
113 EXPECT_TRUE(a1 != NULL); 113 EXPECT_TRUE(a1 != NULL);
114 BlockInitialize(layout, a1, false, &b1); 114 BlockInitialize(layout, a1, &b1);
115 115
116 BlockInfo b2 = {}; 116 BlockInfo b2 = {};
117 a2 = h.AllocateBlock(0, 0, 0, &layout); 117 a2 = h.AllocateBlock(0, 0, 0, &layout);
118 EXPECT_TRUE(a2 != NULL); 118 EXPECT_TRUE(a2 != NULL);
119 BlockInitialize(layout, a2, false, &b2); 119 BlockInitialize(layout, a2, &b2);
120 120
121 EXPECT_NE(a1, a2); 121 EXPECT_NE(a1, a2);
122 EXPECT_NE(b1.header, b2.header); 122 EXPECT_NE(b1.header, b2.header);
123 123
124 EXPECT_TRUE(h.FreeBlock(b1)); 124 EXPECT_TRUE(h.FreeBlock(b1));
125 EXPECT_TRUE(h.FreeBlock(b2)); 125 EXPECT_TRUE(h.FreeBlock(b2));
126 } 126 }
127 127
128 TEST(LargeBlockHeapTest, IsAllocated) { 128 TEST(LargeBlockHeapTest, IsAllocated) {
129 TestLargeBlockHeap h; 129 TestLargeBlockHeap h;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 // fail due to a CHECK in the LargeBlockHeap that ensure that there's no more 175 // fail due to a CHECK in the LargeBlockHeap that ensure that there's no more
176 // alive allocations after calling FreeAllAllocations. 176 // alive allocations after calling FreeAllAllocations.
177 for (size_t i = 0; i < kAllocCount; ++i) 177 for (size_t i = 0; i < kAllocCount; ++i)
178 h.Allocate(42); 178 h.Allocate(42);
179 EXPECT_EQ(kAllocCount, h.size()); 179 EXPECT_EQ(kAllocCount, h.size());
180 } 180 }
181 181
182 } // namespace heaps 182 } // namespace heaps
183 } // namespace asan 183 } // namespace asan
184 } // namespace agent 184 } // namespace agent
OLDNEW
« no previous file with comments | « syzygy/agent/asan/heap_managers/block_heap_manager.cc ('k') | syzygy/agent/asan/heaps/simple_block_heap_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698