MMU: Move the lookup tables to the heap in 64-bit builds and free them on exit in 32-bit builds, prevents memory leaks.
This commit is contained in:
@@ -1656,6 +1656,10 @@ pc_close(UNUSED(thread_t *ptr))
|
||||
scsi_disk_close();
|
||||
|
||||
gdbstub_close();
|
||||
|
||||
#if (!(defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64))
|
||||
mem_free();
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef __APPLE__
|
||||
|
||||
@@ -265,12 +265,16 @@ extern uint32_t biosmask;
|
||||
extern uint32_t biosaddr;
|
||||
|
||||
extern int readlookup[256];
|
||||
#if (!(defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64))
|
||||
extern uintptr_t *readlookup2;
|
||||
#endif
|
||||
extern uintptr_t old_rl2;
|
||||
extern uint8_t uncached;
|
||||
extern int readlnext;
|
||||
extern int writelookup[256];
|
||||
#if (!(defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64))
|
||||
extern uintptr_t *writelookup2;
|
||||
#endif
|
||||
extern int writelnext;
|
||||
extern uint32_t ram_mapped_addr[64];
|
||||
extern uint8_t page_ff[4096];
|
||||
@@ -288,7 +292,16 @@ extern mem_mapping_t bios_high_mapping;
|
||||
extern uint32_t mem_logical_addr;
|
||||
|
||||
extern page_t *pages;
|
||||
#if (!(defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64))
|
||||
extern page_t **page_lookup;
|
||||
#endif
|
||||
|
||||
#if (defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64)
|
||||
/* The lookup tables. */
|
||||
extern page_t *page_lookup[1048576];
|
||||
extern uintptr_t readlookup2[1048576];
|
||||
extern uintptr_t writelookup2[1048576];
|
||||
#endif
|
||||
|
||||
extern uint32_t get_phys_virt;
|
||||
extern uint32_t get_phys_phys;
|
||||
@@ -457,6 +470,9 @@ extern void mem_a20_init(void);
|
||||
extern void mem_a20_recalc(void);
|
||||
|
||||
extern void mem_init(void);
|
||||
#if (!(defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64))
|
||||
extern void mem_free(void);
|
||||
#endif
|
||||
extern void mem_close(void);
|
||||
extern void mem_zero(void);
|
||||
extern void mem_reset(void);
|
||||
|
||||
@@ -67,7 +67,9 @@ mem_mapping_t bios_mapping;
|
||||
mem_mapping_t bios_high_mapping;
|
||||
|
||||
page_t *pages; /* RAM page table */
|
||||
#if (!(defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64))
|
||||
page_t **page_lookup; /* pagetable lookup */
|
||||
#endif
|
||||
uint32_t pages_sz; /* #pages in table */
|
||||
|
||||
uint8_t *ram; /* the virtual RAM */
|
||||
@@ -85,12 +87,23 @@ uint8_t *pccache2;
|
||||
|
||||
int readlnext;
|
||||
int readlookup[256];
|
||||
#if (!(defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64))
|
||||
uintptr_t *readlookup2;
|
||||
#endif
|
||||
uintptr_t old_rl2;
|
||||
uint8_t uncached = 0;
|
||||
int writelnext;
|
||||
int writelookup[256];
|
||||
#if (!(defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64))
|
||||
uintptr_t *writelookup2;
|
||||
#endif
|
||||
|
||||
#if (defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64)
|
||||
/* The lookup tables. */
|
||||
page_t *page_lookup[1048576] = { 0 };
|
||||
uintptr_t readlookup2[1048576] = { 0 };
|
||||
uintptr_t writelookup2[1048576] = { 0 };
|
||||
#endif
|
||||
|
||||
uint32_t mem_logical_addr;
|
||||
|
||||
@@ -2987,12 +3000,25 @@ mem_init(void)
|
||||
ram2 = NULL;
|
||||
pages = NULL;
|
||||
|
||||
#if (!(defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64))
|
||||
/* Allocate the lookup tables. */
|
||||
page_lookup = (page_t **) malloc((1 << 20) * sizeof(page_t *));
|
||||
readlookup2 = malloc((1 << 20) * sizeof(uintptr_t));
|
||||
writelookup2 = malloc((1 << 20) * sizeof(uintptr_t));
|
||||
#endif
|
||||
}
|
||||
|
||||
#if (!(defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64))
|
||||
void
|
||||
mem_free(void)
|
||||
{
|
||||
free(page_lookup);
|
||||
free(readlookup2);
|
||||
free(writelookup2);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
static void
|
||||
umc_page_recalc(uint32_t c, uint32_t phys, int set)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user