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();
|
scsi_disk_close();
|
||||||
|
|
||||||
gdbstub_close();
|
gdbstub_close();
|
||||||
|
|
||||||
|
#if (!(defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64))
|
||||||
|
mem_free();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
|
|||||||
@@ -265,12 +265,16 @@ extern uint32_t biosmask;
|
|||||||
extern uint32_t biosaddr;
|
extern uint32_t biosaddr;
|
||||||
|
|
||||||
extern int readlookup[256];
|
extern int readlookup[256];
|
||||||
|
#if (!(defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64))
|
||||||
extern uintptr_t *readlookup2;
|
extern uintptr_t *readlookup2;
|
||||||
|
#endif
|
||||||
extern uintptr_t old_rl2;
|
extern uintptr_t old_rl2;
|
||||||
extern uint8_t uncached;
|
extern uint8_t uncached;
|
||||||
extern int readlnext;
|
extern int readlnext;
|
||||||
extern int writelookup[256];
|
extern int writelookup[256];
|
||||||
|
#if (!(defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64))
|
||||||
extern uintptr_t *writelookup2;
|
extern uintptr_t *writelookup2;
|
||||||
|
#endif
|
||||||
extern int writelnext;
|
extern int writelnext;
|
||||||
extern uint32_t ram_mapped_addr[64];
|
extern uint32_t ram_mapped_addr[64];
|
||||||
extern uint8_t page_ff[4096];
|
extern uint8_t page_ff[4096];
|
||||||
@@ -288,7 +292,16 @@ extern mem_mapping_t bios_high_mapping;
|
|||||||
extern uint32_t mem_logical_addr;
|
extern uint32_t mem_logical_addr;
|
||||||
|
|
||||||
extern page_t *pages;
|
extern page_t *pages;
|
||||||
|
#if (!(defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64))
|
||||||
extern page_t **page_lookup;
|
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_virt;
|
||||||
extern uint32_t get_phys_phys;
|
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_a20_recalc(void);
|
||||||
|
|
||||||
extern void mem_init(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_close(void);
|
||||||
extern void mem_zero(void);
|
extern void mem_zero(void);
|
||||||
extern void mem_reset(void);
|
extern void mem_reset(void);
|
||||||
|
|||||||
@@ -67,7 +67,9 @@ mem_mapping_t bios_mapping;
|
|||||||
mem_mapping_t bios_high_mapping;
|
mem_mapping_t bios_high_mapping;
|
||||||
|
|
||||||
page_t *pages; /* RAM page table */
|
page_t *pages; /* RAM page table */
|
||||||
|
#if (!(defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64))
|
||||||
page_t **page_lookup; /* pagetable lookup */
|
page_t **page_lookup; /* pagetable lookup */
|
||||||
|
#endif
|
||||||
uint32_t pages_sz; /* #pages in table */
|
uint32_t pages_sz; /* #pages in table */
|
||||||
|
|
||||||
uint8_t *ram; /* the virtual RAM */
|
uint8_t *ram; /* the virtual RAM */
|
||||||
@@ -85,12 +87,23 @@ uint8_t *pccache2;
|
|||||||
|
|
||||||
int readlnext;
|
int readlnext;
|
||||||
int readlookup[256];
|
int readlookup[256];
|
||||||
|
#if (!(defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64))
|
||||||
uintptr_t *readlookup2;
|
uintptr_t *readlookup2;
|
||||||
|
#endif
|
||||||
uintptr_t old_rl2;
|
uintptr_t old_rl2;
|
||||||
uint8_t uncached = 0;
|
uint8_t uncached = 0;
|
||||||
int writelnext;
|
int writelnext;
|
||||||
int writelookup[256];
|
int writelookup[256];
|
||||||
|
#if (!(defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64))
|
||||||
uintptr_t *writelookup2;
|
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;
|
uint32_t mem_logical_addr;
|
||||||
|
|
||||||
@@ -2987,12 +3000,25 @@ mem_init(void)
|
|||||||
ram2 = NULL;
|
ram2 = NULL;
|
||||||
pages = NULL;
|
pages = NULL;
|
||||||
|
|
||||||
|
#if (!(defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64))
|
||||||
/* Allocate the lookup tables. */
|
/* Allocate the lookup tables. */
|
||||||
page_lookup = (page_t **) malloc((1 << 20) * sizeof(page_t *));
|
page_lookup = (page_t **) malloc((1 << 20) * sizeof(page_t *));
|
||||||
readlookup2 = malloc((1 << 20) * sizeof(uintptr_t));
|
readlookup2 = malloc((1 << 20) * sizeof(uintptr_t));
|
||||||
writelookup2 = 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
|
static void
|
||||||
umc_page_recalc(uint32_t c, uint32_t phys, int set)
|
umc_page_recalc(uint32_t c, uint32_t phys, int set)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user