a bit saner heap format
This commit is contained in:
parent
82fc2a2bda
commit
2359e54661
@ -488,6 +488,9 @@ B bqn_execFile(B path, B args) { // consumes both
|
||||
}
|
||||
|
||||
void bqn_exit(i32 code) {
|
||||
#ifdef DUMP_ON_EXIT
|
||||
cbqn_heapDump();
|
||||
#endif
|
||||
rtWrap_print();
|
||||
CTR_FOR(CTR_PRINT)
|
||||
print_allocStats();
|
||||
|
||||
@ -102,21 +102,15 @@ void BN(forFreedHeap)(V2v f) {
|
||||
|
||||
#define str0(X) #X
|
||||
#define str1(X) str0(X)
|
||||
void writeNum(FILE* f, u64 v, i32 len);
|
||||
void BN(dumpHeap)(FILE* f) {
|
||||
for (u64 i = 0; i < alSize; i++) {
|
||||
AllocInfo ci = al[i];
|
||||
u64 addrI = (u64) ci.p;
|
||||
writeNum(f, ci.sz, 8);
|
||||
writeNum(f, addrI, 8);
|
||||
char* prefix = str1(BN());
|
||||
u64 vals[3];
|
||||
vals[0] = ci.sz;
|
||||
vals[1] = addrI;
|
||||
vals[2] = strlen(prefix)-1;
|
||||
for (i32 i = 0; i < 3; i++) {
|
||||
u8 buf[8];
|
||||
for (i32 j = 0; j < 8; j++) buf[j] = (vals[i]>>(8*j)) & 0xff;
|
||||
fwrite(&buf, 1, 8, f);
|
||||
}
|
||||
fwrite(prefix, 1, vals[2], f);
|
||||
fwrite(prefix, 1, strlen(prefix)+1, f);
|
||||
fwrite(ci.p, 1, ci.sz, f);
|
||||
}
|
||||
fflush(f);
|
||||
|
||||
@ -351,6 +351,11 @@ char path_type(B path) {
|
||||
thrM("Unexpected file type");
|
||||
}
|
||||
void mmX_dumpHeap(FILE* f);
|
||||
void writeNum(FILE* f, u64 v, i32 len) {
|
||||
u8 buf[8];
|
||||
for (i32 i = 0; i < len; i++) buf[i] = (v>>(8*i)) & 0xff;
|
||||
fwrite(buf, 1, len, f);
|
||||
}
|
||||
void cbqn_heapDump() {
|
||||
char* name = "CBQNHeapDump";
|
||||
FILE* f = fopen(name, "w");
|
||||
@ -359,12 +364,13 @@ void cbqn_heapDump() {
|
||||
return;
|
||||
}
|
||||
// fwrite(&size, 8, 1, f);
|
||||
u8 t8 = 0;
|
||||
u8 t8 = 1;
|
||||
fwrite(&t8, 1, 1, f); // version
|
||||
fwrite("CBQN", 1, 5, f);
|
||||
|
||||
// sizeof(ur), sizeof(usz)
|
||||
u8 urW[4]; for (i32 i = 0; i < 4; i++) urW[i] = (sizeof(ur )>>(8*i)) & 0xff; fwrite( &urW, 1, 4, f);
|
||||
u8 uszW[4]; for (i32 i = 0; i < 4; i++) uszW[i] = (sizeof(usz)>>(8*i)) & 0xff; fwrite(&uszW, 1, 4, f);
|
||||
writeNum(f, sizeof(ur ), 4);
|
||||
writeNum(f, sizeof(usz), 4);
|
||||
writeNum(f, getpid(), 8);
|
||||
|
||||
// t_names
|
||||
#define F(X) { t8=t_##X; fwrite(&t8, 1, 1, f); char* s = #X; fwrite(s, 1, strlen(s)+1, f); }
|
||||
|
||||
@ -24,4 +24,4 @@ void file_wBytes(FILE* file, B name, B x); // doesn't consume
|
||||
|
||||
B path_list(B path); // consumes
|
||||
char path_type(B path); // consumes
|
||||
void cbqn_heapDump();
|
||||
void cbqn_heapDump(void);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user