(CTR/3DS) increase the default size of the linear heap.

makefile: allow changing stack/linear heap size without requiring a
clean.
This commit is contained in:
aliaspider 2015-10-05 21:45:17 +01:00
parent 303fd1daed
commit b7be1862a3
4 changed files with 31 additions and 22 deletions

View File

@ -28,7 +28,7 @@ CTR_STACK_SIZE = 0x400000
else else
CTR_STACK_SIZE = 0x100000 CTR_STACK_SIZE = 0x100000
endif endif
CTR_LINEAR_HEAP_SIZE = 0xC00000 CTR_LINEAR_HEAP_SIZE = 0xD00000
include ctr/Makefile.cores include ctr/Makefile.cores
@ -42,9 +42,11 @@ endif
APP_SYSTEM_MODE_EXT = 6 APP_SYSTEM_MODE_EXT = 6
CONFIG_OBJECT = ctr/ctr_config_$(CTR_STACK_SIZE)_$(CTR_LINEAR_HEAP_SIZE).o
OBJS := OBJS :=
OBJS += gfx/drivers/ctr_sprite.o OBJS += gfx/drivers/ctr_sprite.o
OBJS += $(CONFIG_OBJECT)
ifeq ($(GRIFFIN_BUILD), 1) ifeq ($(GRIFFIN_BUILD), 1)
OBJS += griffin/griffin.o OBJS += griffin/griffin.o
else else
@ -359,6 +361,10 @@ else
endif endif
$(CONFIG_OBJECT): ctr/ctr_config.c
rm -f ctr/ctr_config_*.o
$(CC) -c -o $@ $< $(CFLAGS) $(INCDIRS)
%.o: %.shader %.o: %.shader
python $(AEMSTRO)/aemstro_as.py $< $(notdir $<).shbin python $(AEMSTRO)/aemstro_as.py $< $(notdir $<).shbin
$(DEVKITARM)/bin/bin2s $(notdir $<).shbin | $(PREFIX)as -o $@ $(DEVKITARM)/bin/bin2s $(notdir $<).shbin | $(PREFIX)as -o $@
@ -417,6 +423,7 @@ clean:
rm -f $(TARGET).bnr rm -f $(TARGET).bnr
rm -f $(TARGET).icn rm -f $(TARGET).icn
rm -f *_shader_shbin.h rm -f *_shader_shbin.h
rm -f ctr/ctr_config_*.o
.PHONY: clean .PHONY: clean

12
ctr/ctr_config.c Normal file
View File

@ -0,0 +1,12 @@
#ifndef CTR_STACK_SIZE
#define CTR_STACK_SIZE 0x100000
#endif
#ifndef CTR_LINEAR_HEAP_SIZE
#define CTR_LINEAR_HEAP_SIZE 0x600000
#endif
int __stacksize__ = CTR_STACK_SIZE;
unsigned int linear_heap_size = CTR_LINEAR_HEAP_SIZE;

View File

@ -46,21 +46,12 @@ void wait_for_input(void);
#define CTR_APPMEMALLOC_PTR ((u32*)0x1FF80040) #define CTR_APPMEMALLOC_PTR ((u32*)0x1FF80040)
#ifndef CTR_STACK_SIZE
#define CTR_STACK_SIZE 0x100000
#endif
#ifndef CTR_LINEAR_HEAP_SIZE
#define CTR_LINEAR_HEAP_SIZE 0x600000
#endif
int __stacksize__ = CTR_STACK_SIZE;
extern char* fake_heap_start; extern char* fake_heap_start;
extern char* fake_heap_end; extern char* fake_heap_end;
u32 __linear_heap; u32 __linear_heap;
u32 __heapBase; u32 __heapBase;
static u32 __heap_size_local, __linear_heap_size_local; static u32 heap_size;
extern u32 linear_heap_size;
extern void (*__system_retAddr)(void); extern void (*__system_retAddr)(void);
@ -79,18 +70,17 @@ void __system_allocateHeaps() {
svcGetSystemInfo(&mem_used, 0, 1); svcGetSystemInfo(&mem_used, 0, 1);
__linear_heap_size_local = CTR_LINEAR_HEAP_SIZE; heap_size = (app_memory - mem_used - linear_heap_size - 0x10000) & 0xFFFFF000;
__heap_size_local = (app_memory - mem_used - __linear_heap_size_local - 0x10000) & 0xFFFFF000;
// Allocate the application heap // Allocate the application heap
__heapBase = 0x08000000; __heapBase = 0x08000000;
svcControlMemory(&tmp, __heapBase, 0x0, __heap_size_local, MEMOP_ALLOC, MEMPERM_READ | MEMPERM_WRITE); svcControlMemory(&tmp, __heapBase, 0x0, heap_size, MEMOP_ALLOC, MEMPERM_READ | MEMPERM_WRITE);
// Allocate the linear heap // Allocate the linear heap
svcControlMemory(&__linear_heap, 0x0, 0x0, __linear_heap_size_local, MEMOP_ALLOC_LINEAR, MEMPERM_READ | MEMPERM_WRITE); svcControlMemory(&__linear_heap, 0x0, 0x0, linear_heap_size, MEMOP_ALLOC_LINEAR, MEMPERM_READ | MEMPERM_WRITE);
// Set up newlib heap // Set up newlib heap
fake_heap_start = (char*)__heapBase; fake_heap_start = (char*)__heapBase;
fake_heap_end = fake_heap_start + __heap_size_local; fake_heap_end = fake_heap_start + heap_size;
} }
@ -99,10 +89,10 @@ void __attribute__((noreturn)) __libctru_exit(int rc)
u32 tmp=0; u32 tmp=0;
// Unmap the linear heap // Unmap the linear heap
svcControlMemory(&tmp, __linear_heap, 0x0, __linear_heap_size_local, MEMOP_FREE, 0x0); svcControlMemory(&tmp, __linear_heap, 0x0, linear_heap_size, MEMOP_FREE, 0x0);
// Unmap the application heap // Unmap the application heap
svcControlMemory(&tmp, __heapBase, 0x0, __heap_size_local, MEMOP_FREE, 0x0); svcControlMemory(&tmp, __heapBase, 0x0, heap_size, MEMOP_FREE, 0x0);
// Close some handles // Close some handles
__destroy_handle_list(); __destroy_handle_list();

View File

@ -60,7 +60,7 @@ void wait_for_input(void);
extern Handle gspEvents[GSPEVENT_MAX]; extern Handle gspEvents[GSPEVENT_MAX];
extern u32* gpuCmdBuf; extern u32* gpuCmdBuf;
extern u32 gpuCmdBufOffset; extern u32 gpuCmdBufOffset;
extern u32 __linear_heap_size; extern u32 linear_heap_size;
extern u32 __linear_heap; extern u32 __linear_heap;
__attribute__((always_inline)) __attribute__((always_inline))
@ -126,7 +126,7 @@ __attribute__((always_inline))
static INLINE void ctrGuFlushAndRun(bool queued) static INLINE void ctrGuFlushAndRun(bool queued)
{ {
//take advantage of GX_SetCommandList_First to flush gsp heap //take advantage of GX_SetCommandList_First to flush gsp heap
ctrGuSetCommandList_First(queued, gpuCmdBuf, gpuCmdBufOffset*4, (u32*)__linear_heap, __linear_heap_size, NULL, 0); ctrGuSetCommandList_First(queued, gpuCmdBuf, gpuCmdBufOffset*4, (u32*)__linear_heap, linear_heap_size, NULL, 0);
ctrGuSetCommandList_Last(queued, gpuCmdBuf, gpuCmdBufOffset*4, 0x0); ctrGuSetCommandList_Last(queued, gpuCmdBuf, gpuCmdBufOffset*4, 0x0);
} }