include JIT memory in heap dump

This commit is contained in:
dzaima 2022-03-07 01:20:34 +02:00
parent 94e22ecf8f
commit 0177680ddb
3 changed files with 16 additions and 3 deletions

View File

@ -3,3 +3,4 @@
B evalJIT(Body* b, Scope* sc, u8* ptr) { thrM("JIT: Not supported"); }
Nvm_res m_nvm(Body* b) { thrM("JIT: Not supported"); }
void nvm_free(u8* ptr) { thrM("JIT: Not supported"); }
void mmX_dumpHeap() { }

View File

@ -4,7 +4,6 @@
#define al BN(al)
#define alCap BN(alCap)
#define alSize BN(alSize)
#define str(X) #X
#ifndef MMAP
usz getPageSize();
#define MMAP(SZ) mmap(NULL, (SZ)+getPageSize(), PROT_READ|PROT_WRITE, MAP_NORESERVE|MAP_PRIVATE|MAP_ANON, -1, 0)
@ -98,12 +97,23 @@ void BN(forFreedHeap)(V2v f) {
}
}
#define str0(X) #X
#define str1(X) str0(X)
void BN(dumpHeap)(FILE* f) {
for (u64 i = 0; i < alSize; i++) {
AllocInfo ci = al[i];
u64 addrI = (u64) ci.p;
u8 size[8]; for (i32 i = 0; i < 8; i++) size[i] = (ci.sz>>(8*i)) & 0xff; fwrite(&size, 1, 8, f);
u8 addr[8]; for (i32 i = 0; i < 8; i++) addr[i] = (addrI>>(8*i)) & 0xff; fwrite(&addr, 1, 8, f);
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(ci.p, 1, ci.sz, f);
}
}

View File

@ -236,6 +236,7 @@ char path_type(B path) {
if (S_ISCHR (mode)) return 'c';
thrM("Unexpected file type");
}
void mmX_dumpHeap();
void cbqn_heapDump() {
char* name = "CBQNHeapDump";
FILE* f = fopen(name, "w");
@ -267,6 +268,7 @@ void cbqn_heapDump() {
#undef F
mm_dumpHeap(f);
mmX_dumpHeap(f);
fprintf(stderr, "Heap dumped to \"%s\"\n", name);
fclose(f);
}