a bit saner heap format

This commit is contained in:
dzaima 2022-06-08 15:24:09 +03:00
parent 82fc2a2bda
commit 2359e54661
4 changed files with 18 additions and 15 deletions

View File

@ -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();

View File

@ -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);

View File

@ -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); }

View File

@ -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);