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"); } B evalJIT(Body* b, Scope* sc, u8* ptr) { thrM("JIT: Not supported"); }
Nvm_res m_nvm(Body* b) { thrM("JIT: Not supported"); } Nvm_res m_nvm(Body* b) { thrM("JIT: Not supported"); }
void nvm_free(u8* ptr) { 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 al BN(al)
#define alCap BN(alCap) #define alCap BN(alCap)
#define alSize BN(alSize) #define alSize BN(alSize)
#define str(X) #X
#ifndef MMAP #ifndef MMAP
usz getPageSize(); usz getPageSize();
#define MMAP(SZ) mmap(NULL, (SZ)+getPageSize(), PROT_READ|PROT_WRITE, MAP_NORESERVE|MAP_PRIVATE|MAP_ANON, -1, 0) #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) { void BN(dumpHeap)(FILE* f) {
for (u64 i = 0; i < alSize; i++) { for (u64 i = 0; i < alSize; i++) {
AllocInfo ci = al[i]; AllocInfo ci = al[i];
u64 addrI = (u64) ci.p; 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); char* prefix = str1(BN());
u8 addr[8]; for (i32 i = 0; i < 8; i++) addr[i] = (addrI>>(8*i)) & 0xff; fwrite(&addr, 1, 8, f); 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); fwrite(ci.p, 1, ci.sz, f);
} }
} }

View File

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