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

Side by Side Diff: syzygy/agent/asan/shadow_marker.h

Issue 2508333002: Remove the is_nested bit from the BlockInfo structure. (Closed)
Patch Set: Address Siggi's comments. Created 4 years, 1 month 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
« no previous file with comments | « syzygy/agent/asan/shadow.cc ('k') | syzygy/agent/asan/shadow_marker.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 /* (0x20) disabled. Thus any marker starting with 0xc0 is a historic */ \ 71 /* (0x20) disabled. Thus any marker starting with 0xc0 is a historic */ \
72 /* block start marker. */ \ 72 /* block start marker. */ \
73 F(kHeapHistoricBlockStartMarker0, 0xC0) \ 73 F(kHeapHistoricBlockStartMarker0, 0xC0) \
74 F(kHeapHistoricBlockStartMarker1, 0xC1) \ 74 F(kHeapHistoricBlockStartMarker1, 0xC1) \
75 F(kHeapHistoricBlockStartMarker2, 0xC2) \ 75 F(kHeapHistoricBlockStartMarker2, 0xC2) \
76 F(kHeapHistoricBlockStartMarker3, 0xC3) \ 76 F(kHeapHistoricBlockStartMarker3, 0xC3) \
77 F(kHeapHistoricBlockStartMarker4, 0xC4) \ 77 F(kHeapHistoricBlockStartMarker4, 0xC4) \
78 F(kHeapHistoricBlockStartMarker5, 0xC5) \ 78 F(kHeapHistoricBlockStartMarker5, 0xC5) \
79 F(kHeapHistoricBlockStartMarker6, 0xC6) \ 79 F(kHeapHistoricBlockStartMarker6, 0xC6) \
80 F(kHeapHistoricBlockStartMarker7, 0xC7) \ 80 F(kHeapHistoricBlockStartMarker7, 0xC7) \
81 /* Nested block start bytes have the bit 0x80 set. */ \
82 F(kHeapHistoricNestedBlockStartMarker0, 0xC8) \
83 F(kHeapHistoricNestedBlockStartMarker1, 0xC9) \
84 F(kHeapHistoricNestedBlockStartMarker2, 0xCA) \
85 F(kHeapHistoricNestedBlockStartMarker3, 0xCB) \
86 F(kHeapHistoricNestedBlockStartMarker4, 0xCC) \
87 F(kHeapHistoricNestedBlockStartMarker5, 0xCD) \
88 F(kHeapHistoricNestedBlockStartMarker6, 0xCE) \
89 F(kHeapHistoricNestedBlockStartMarker7, 0xCF) \
90 /* These are 'historic' markers associated with block left/right */ \ 81 /* These are 'historic' markers associated with block left/right */ \
91 /* redzones and freed data. They consist of the same values as the */ \ 82 /* redzones and freed data. They consist of the same values as the */ \
92 /* active markers, minus the active block bit. */ \ 83 /* active markers, minus the active block bit. */ \
93 F(kHeapHistoricBlockEndMarker, 0xD4) \ 84 F(kHeapHistoricBlockEndMarker, 0xD4) \
94 F(kHeapHistoricNestedBlockEndMarker, 0xD5) \
95 F(kHeapHistoricLeftPaddingMarker, 0xDA) \ 85 F(kHeapHistoricLeftPaddingMarker, 0xDA) \
96 F(kHeapHistoricRightPaddingMarker, 0xDB) \ 86 F(kHeapHistoricRightPaddingMarker, 0xDB) \
97 F(kHeapHistoricFreedMarker, 0xDD) \ 87 F(kHeapHistoricFreedMarker, 0xDD) \
98 /* Any marker starting with 0xe0 marks the beginning of a block. The */ \ 88 /* Any marker starting with 0xe0 marks the beginning of a block. The */ \
99 /* trailing 4 bits of the marker are used to encode additional */ \ 89 /* trailing 4 bits of the marker are used to encode additional */ \
100 /* metadata about the block itself. This is necessary to allow */ \ 90 /* metadata about the block itself. This is necessary to allow */ \
101 /* full introspection of blocks via the shadow. All 'active' block */ \ 91 /* full introspection of blocks via the shadow. All 'active' block */ \
102 /* start bytes have the bit 0x20 set. */ \ 92 /* start bytes have the bit 0x20 set. */ \
103 F(kHeapBlockStartMarker0, 0xE0) \ 93 F(kHeapBlockStartMarker0, 0xE0) \
104 F(kHeapBlockStartMarker1, 0xE1) \ 94 F(kHeapBlockStartMarker1, 0xE1) \
105 F(kHeapBlockStartMarker2, 0xE2) \ 95 F(kHeapBlockStartMarker2, 0xE2) \
106 F(kHeapBlockStartMarker3, 0xE3) \ 96 F(kHeapBlockStartMarker3, 0xE3) \
107 F(kHeapBlockStartMarker4, 0xE4) \ 97 F(kHeapBlockStartMarker4, 0xE4) \
108 F(kHeapBlockStartMarker5, 0xE5) \ 98 F(kHeapBlockStartMarker5, 0xE5) \
109 F(kHeapBlockStartMarker6, 0xE6) \ 99 F(kHeapBlockStartMarker6, 0xE6) \
110 F(kHeapBlockStartMarker7, 0xE7) \ 100 F(kHeapBlockStartMarker7, 0xE7) \
111 /* Nested block start bytes have the bit 0x80 set. */ \
112 F(kHeapNestedBlockStartMarker0, 0xE8) \
113 F(kHeapNestedBlockStartMarker1, 0xE9) \
114 F(kHeapNestedBlockStartMarker2, 0xEA) \
115 F(kHeapNestedBlockStartMarker3, 0xEB) \
116 F(kHeapNestedBlockStartMarker4, 0xEC) \
117 F(kHeapNestedBlockStartMarker5, 0xED) \
118 F(kHeapNestedBlockStartMarker6, 0xEE) \
119 F(kHeapNestedBlockStartMarker7, 0xEF) \
120 /* The data in this block maps to internal memory structures. */ \ 101 /* The data in this block maps to internal memory structures. */ \
121 F(kAsanMemoryMarker, 0xF1) \ 102 F(kAsanMemoryMarker, 0xF1) \
122 /* The address covered by this byte are simply invalid and unable to */ \ 103 /* The address covered by this byte are simply invalid and unable to */ \
123 /* be accessed by user code. */ \ 104 /* be accessed by user code. */ \
124 F(kInvalidAddressMarker, 0xF2) \ 105 F(kInvalidAddressMarker, 0xF2) \
125 /* The bytes are part of a block that has been allocated by the */ \ 106 /* The bytes are part of a block that has been allocated by the */ \
126 /* instrumented code, but subsequently redzoned via the runtime API. */ \ 107 /* instrumented code, but subsequently redzoned via the runtime API. */ \
127 F(kUserRedzoneMarker, 0xF3) \ 108 F(kUserRedzoneMarker, 0xF3) \
128 /* This marker marks the end of a block in memory, and is part of a */ \ 109 /* This marker marks the end of a block in memory, and is part of a */ \
129 /* right redzone. */ \ 110 /* right redzone. */ \
130 F(kHeapBlockEndMarker, 0xF4) \ 111 F(kHeapBlockEndMarker, 0xF4) \
131 F(kHeapNestedBlockEndMarker, 0xF5) \
132 /* The bytes are part of a left redzone (block header padding). */ \ 112 /* The bytes are part of a left redzone (block header padding). */ \
133 /* This is the same value as used by Asan itself. */ \ 113 /* This is the same value as used by Asan itself. */ \
134 F(kHeapLeftPaddingMarker, 0xFA) \ 114 F(kHeapLeftPaddingMarker, 0xFA) \
135 /* The bytes are part of a right redzone (block trailer and padding). */ \ 115 /* The bytes are part of a right redzone (block trailer and padding). */ \
136 /* This is the same value as used by Asan itself. */ \ 116 /* This is the same value as used by Asan itself. */ \
137 F(kHeapRightPaddingMarker, 0xFB) \ 117 F(kHeapRightPaddingMarker, 0xFB) \
138 /* These bytes are part of memory that is destined to be used by the */ \ 118 /* These bytes are part of memory that is destined to be used by the */ \
139 /* heap, has been reserved from the OS, but not yet handed out to */ \ 119 /* heap, has been reserved from the OS, but not yet handed out to */ \
140 /* the code under test. */ \ 120 /* the code under test. */ \
141 F(kAsanReservedMarker, 0xFC) \ 121 F(kAsanReservedMarker, 0xFC) \
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 // @param marker The shadow marker to query. 183 // @param marker The shadow marker to query.
204 // @returns true if the marker describes a historic block start marker. 184 // @returns true if the marker describes a historic block start marker.
205 static bool IsHistoricBlockStart(ShadowMarkerValue marker); 185 static bool IsHistoricBlockStart(ShadowMarkerValue marker);
206 186
207 // @param marker The shadow marker to query. 187 // @param marker The shadow marker to query.
208 // @returns true if the marker describes a block header marker, historic or 188 // @returns true if the marker describes a block header marker, historic or
209 // active. 189 // active.
210 static bool IsBlockStart(ShadowMarkerValue marker); 190 static bool IsBlockStart(ShadowMarkerValue marker);
211 191
212 // @param marker The shadow marker to query. 192 // @param marker The shadow marker to query.
213 // @returns true if the markers describes a nested block start marker,
214 // historic or active.
215 static bool IsNestedBlockStart(ShadowMarkerValue marker);
216
217 // @param marker The shadow marker to query.
218 // @returns the extra data encoded in a block start marker. 193 // @returns the extra data encoded in a block start marker.
219 // @note This should only be called for block start markers. 194 // @note This should only be called for block start markers.
220 static uint8_t GetBlockStartData(ShadowMarkerValue marker); 195 static uint8_t GetBlockStartData(ShadowMarkerValue marker);
221 196
222 // @param marker The shadow marker to query. 197 // @param marker The shadow marker to query.
223 // @returns true if the marker describes an active block start marker. 198 // @returns true if the marker describes an active block start marker.
224 static bool IsActiveBlockEnd(ShadowMarkerValue marker); 199 static bool IsActiveBlockEnd(ShadowMarkerValue marker);
225 200
226 // @param marker The shadow marker to query. 201 // @param marker The shadow marker to query.
227 // @returns true if the marker describes a historic block start marker. 202 // @returns true if the marker describes a historic block start marker.
228 static bool IsHistoricBlockEnd(ShadowMarkerValue marker); 203 static bool IsHistoricBlockEnd(ShadowMarkerValue marker);
229 204
230 // @param marker The shadow marker to query. 205 // @param marker The shadow marker to query.
231 // @returns true if the marker describes a block header marker, historic or 206 // @returns true if the marker describes a block header marker, historic or
232 // active. 207 // active.
233 static bool IsBlockEnd(ShadowMarkerValue marker); 208 static bool IsBlockEnd(ShadowMarkerValue marker);
234 209
235 // @param marker The shadow marker to query. 210 // @param marker The shadow marker to query.
236 // @returns true if the markers describes a nested block end marker,
237 // historic or active.
238 static bool IsNestedBlockEnd(ShadowMarkerValue marker);
239
240 // @param marker The shadow marker to query.
241 // @returns true if the marker describes a historic left redzone. 211 // @returns true if the marker describes a historic left redzone.
242 // Note that block start markers are part of a left redzone. 212 // Note that block start markers are part of a left redzone.
243 static bool IsHistoricLeftRedzone(ShadowMarkerValue marker); 213 static bool IsHistoricLeftRedzone(ShadowMarkerValue marker);
244 214
245 // @param marker The shadow marker to query. 215 // @param marker The shadow marker to query.
246 // @returns true if the marker describes an active left redzone. 216 // @returns true if the marker describes an active left redzone.
247 // Note that block start markers are part of a left redzone. 217 // Note that block start markers are part of a left redzone.
248 static bool IsActiveLeftRedzone(ShadowMarkerValue marker); 218 static bool IsActiveLeftRedzone(ShadowMarkerValue marker);
249 219
250 // @param marker The shadow marker to query. 220 // @param marker The shadow marker to query.
(...skipping 27 matching lines...) Expand all
278 // equivalent historic type. 248 // equivalent historic type.
279 static ShadowMarker ToHistoric(ShadowMarkerValue marker); 249 static ShadowMarker ToHistoric(ShadowMarkerValue marker);
280 250
281 // @} 251 // @}
282 252
283 // @name For building shadow markers. 253 // @name For building shadow markers.
284 // @{ 254 // @{
285 255
286 // Builds a block start marker. 256 // Builds a block start marker.
287 // @param active True if the block is active, false if its historic. 257 // @param active True if the block is active, false if its historic.
288 // @param nested True if the block is nested, false otherwise.
289 // @param data The data to be appended to the marker. This can only consist 258 // @param data The data to be appended to the marker. This can only consist
290 // of 3 bits of data. 259 // of 3 bits of data.
291 // @returns the generated block start marker. 260 // @returns the generated block start marker.
292 static ShadowMarker BuildBlockStart(bool active, bool nested, uint8_t data); 261 static ShadowMarker BuildBlockStart(bool active, uint8_t data);
293 262
294 // Builds a block end marker. 263 // Builds a block end marker.
295 // @param active True if the block is active, false if its historic. 264 // @param active True if the block is active, false if its historic.
296 // @param nested True if the block is nested, false otherwise.
297 // @returns the generated block end marker. 265 // @returns the generated block end marker.
298 static ShadowMarker BuildBlockEnd(bool active, bool nested); 266 static ShadowMarker BuildBlockEnd(bool active);
299 267
300 // @} 268 // @}
301 }; 269 };
302 270
303 } // namespace asan 271 } // namespace asan
304 } // namespace agent 272 } // namespace agent
305 273
306 #endif // SYZYGY_AGENT_ASAN_SHADOW_MARKER_H_ 274 #endif // SYZYGY_AGENT_ASAN_SHADOW_MARKER_H_
OLDNEW
« no previous file with comments | « syzygy/agent/asan/shadow.cc ('k') | syzygy/agent/asan/shadow_marker.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698