30 #define baadbabeHeapWord badHeapWordVal
31 #define deadbeefHeapWord 0xdeadbeef
32
33 size_t const FreeChunk::header_size() {
34 return sizeof(FreeChunk)/HeapWordSize;
35 }
36
37 void FreeChunk::mangleAllocated(size_t size) {
38 // mangle all but the header of a just-allocated block
39 // of storage
40 assert(size >= MinChunkSize, "smallest size of object");
41 // we can't assert that _size == size because this may be an
42 // allocation out of a linear allocation block
43 assert(sizeof(FreeChunk) % HeapWordSize == 0,
44 "shouldn't write beyond chunk");
45 HeapWord* addr = (HeapWord*)this;
46 size_t hdr = header_size();
47 Copy::fill_to_words(addr + hdr, size - hdr, baadbabeHeapWord);
48 }
49
50 void FreeChunk::mangleFreed(size_t size) {
51 assert(baadbabeHeapWord != deadbeefHeapWord, "Need distinct patterns");
52 // mangle all but the header of a just-freed block of storage
53 // just prior to passing it to the storage dictionary
54 assert(size >= MinChunkSize, "smallest size of object");
55 assert(size == _size, "just checking");
56 HeapWord* addr = (HeapWord*)this;
57 size_t hdr = header_size();
58 Copy::fill_to_words(addr + hdr, size - hdr, deadbeefHeapWord);
59 }
60
61 void FreeChunk::verifyList() const {
62 FreeChunk* nextFC = next();
63 if (nextFC != NULL) {
64 assert(this == nextFC->prev(), "broken chain");
65 assert(size() == nextFC->size(), "wrong size");
66 nextFC->verifyList();
67 }
68 }
69 #endif
|
30 #define baadbabeHeapWord badHeapWordVal
31 #define deadbeefHeapWord 0xdeadbeef
32
33 size_t const FreeChunk::header_size() {
34 return sizeof(FreeChunk)/HeapWordSize;
35 }
36
37 void FreeChunk::mangleAllocated(size_t size) {
38 // mangle all but the header of a just-allocated block
39 // of storage
40 assert(size >= MinChunkSize, "smallest size of object");
41 // we can't assert that _size == size because this may be an
42 // allocation out of a linear allocation block
43 assert(sizeof(FreeChunk) % HeapWordSize == 0,
44 "shouldn't write beyond chunk");
45 HeapWord* addr = (HeapWord*)this;
46 size_t hdr = header_size();
47 Copy::fill_to_words(addr + hdr, size - hdr, baadbabeHeapWord);
48 }
49
50 void FreeChunk::mangleFreed(size_t sz) {
51 assert(baadbabeHeapWord != deadbeefHeapWord, "Need distinct patterns");
52 // mangle all but the header of a just-freed block of storage
53 // just prior to passing it to the storage dictionary
54 assert(sz >= MinChunkSize, "smallest size of object");
55 assert(sz == size(), "just checking");
56 HeapWord* addr = (HeapWord*)this;
57 size_t hdr = header_size();
58 Copy::fill_to_words(addr + hdr, sz - hdr, deadbeefHeapWord);
59 }
60
61 void FreeChunk::verifyList() const {
62 FreeChunk* nextFC = next();
63 if (nextFC != NULL) {
64 assert(this == nextFC->prev(), "broken chain");
65 assert(size() == nextFC->size(), "wrong size");
66 nextFC->verifyList();
67 }
68 }
69 #endif
|