1 #ifdef USE_PRAGMA_IDENT_SRC
2 #pragma ident "@(#)freeChunk.cpp 1.16 07/05/05 17:05:47 JVM"
3 #endif
4 /*
5 * Copyright 2001-2006 Sun Microsystems, Inc. All Rights Reserved.
6 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
7 *
8 * This code is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License version 2 only, as
10 * published by the Free Software Foundation.
11 *
12 * This code is distributed in the hope that it will be useful, but WITHOUT
13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 * version 2 for more details (a copy is included in the LICENSE file that
16 * accompanied this code).
17 *
18 * You should have received a copy of the GNU General Public License version
19 * 2 along with this work; if not, write to the Free Software Foundation,
20 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
21 *
22 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
23 * CA 95054 USA or visit www.sun.com if you need additional information or
24 * have any questions.
25 *
33 #define baadbabeHeapWord badHeapWordVal
34 #define deadbeefHeapWord 0xdeadbeef
35
36 size_t const FreeChunk::header_size() {
37 return sizeof(FreeChunk)/HeapWordSize;
38 }
39
40 void FreeChunk::mangleAllocated(size_t size) {
41 // mangle all but the header of a just-allocated block
42 // of storage
43 assert(size >= MinChunkSize, "smallest size of object");
44 // we can't assert that _size == size because this may be an
45 // allocation out of a linear allocation block
46 assert(sizeof(FreeChunk) % HeapWordSize == 0,
47 "shouldn't write beyond chunk");
48 HeapWord* addr = (HeapWord*)this;
49 size_t hdr = header_size();
50 Copy::fill_to_words(addr + hdr, size - hdr, baadbabeHeapWord);
51 }
52
53 void FreeChunk::mangleFreed(size_t size) {
54 assert(baadbabeHeapWord != deadbeefHeapWord, "Need distinct patterns");
55 // mangle all but the header of a just-freed block of storage
56 // just prior to passing it to the storage dictionary
57 assert(size >= MinChunkSize, "smallest size of object");
58 assert(size == _size, "just checking");
59 HeapWord* addr = (HeapWord*)this;
60 size_t hdr = header_size();
61 Copy::fill_to_words(addr + hdr, size - hdr, deadbeefHeapWord);
62 }
63
64 void FreeChunk::verifyList() const {
65 FreeChunk* nextFC = next();
66 if (nextFC != NULL) {
67 assert(this == nextFC->prev(), "broken chain");
68 assert(size() == nextFC->size(), "wrong size");
69 nextFC->verifyList();
70 }
71 }
72 #endif
|
1 #ifdef USE_PRAGMA_IDENT_SRC
2 #pragma ident "@(#)freeChunk.cpp 1.16 07/05/05 17:05:47 JVM"
3 #endif
4 /*
5 * Copyright 2001-2008 Sun Microsystems, Inc. All Rights Reserved.
6 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
7 *
8 * This code is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License version 2 only, as
10 * published by the Free Software Foundation.
11 *
12 * This code is distributed in the hope that it will be useful, but WITHOUT
13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 * version 2 for more details (a copy is included in the LICENSE file that
16 * accompanied this code).
17 *
18 * You should have received a copy of the GNU General Public License version
19 * 2 along with this work; if not, write to the Free Software Foundation,
20 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
21 *
22 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
23 * CA 95054 USA or visit www.sun.com if you need additional information or
24 * have any questions.
25 *
33 #define baadbabeHeapWord badHeapWordVal
34 #define deadbeefHeapWord 0xdeadbeef
35
36 size_t const FreeChunk::header_size() {
37 return sizeof(FreeChunk)/HeapWordSize;
38 }
39
40 void FreeChunk::mangleAllocated(size_t size) {
41 // mangle all but the header of a just-allocated block
42 // of storage
43 assert(size >= MinChunkSize, "smallest size of object");
44 // we can't assert that _size == size because this may be an
45 // allocation out of a linear allocation block
46 assert(sizeof(FreeChunk) % HeapWordSize == 0,
47 "shouldn't write beyond chunk");
48 HeapWord* addr = (HeapWord*)this;
49 size_t hdr = header_size();
50 Copy::fill_to_words(addr + hdr, size - hdr, baadbabeHeapWord);
51 }
52
53 void FreeChunk::mangleFreed(size_t sz) {
54 assert(baadbabeHeapWord != deadbeefHeapWord, "Need distinct patterns");
55 // mangle all but the header of a just-freed block of storage
56 // just prior to passing it to the storage dictionary
57 assert(sz >= MinChunkSize, "smallest size of object");
58 assert(sz == size(), "just checking");
59 HeapWord* addr = (HeapWord*)this;
60 size_t hdr = header_size();
61 Copy::fill_to_words(addr + hdr, sz - hdr, deadbeefHeapWord);
62 }
63
64 void FreeChunk::verifyList() const {
65 FreeChunk* nextFC = next();
66 if (nextFC != NULL) {
67 assert(this == nextFC->prev(), "broken chain");
68 assert(size() == nextFC->size(), "wrong size");
69 nextFC->verifyList();
70 }
71 }
72 #endif
|