From 150a56cf01166b5b1648c65af5803668d894adb0 Mon Sep 17 00:00:00 2001 From: Fazana <52551480+FazanaJ@users.noreply.github.com> Date: Fri, 9 May 2025 18:50:32 +0100 Subject: [PATCH] Use different linker script for nonmatching builds (#505) * got overzealous with the alignments * small knowledge improvement on models * true * add enum size entries for easy ref * bgload names I forgot to merge in * transition memes * absinthe * brug * anguish * hell * getting there * misery * Update README.md * Update include/structs.h Co-authored-by: Ryan Myers * format moment * Delete object_animate.s * Update obj_animate.s * remembered to rename this * clear mem properly * Update waves.c * custom linker override for nonmatching builds * fix warns * format * Update Makefile * Update dkr.custom.ld * Update Makefile * Update waves.c * Update audio_spatial.c * Update dkr.custom.ld * Update dkr.custom.ld * Update Makefile --------- Co-authored-by: Ryan Myers --- .gitignore | 3 +- Makefile | 19 +++++--- mods/dkr.custom.ld | 105 +++++++++++++++++++++++++++++++++++++++++++++ src/main.c | 2 +- src/main.h | 2 + 5 files changed, 121 insertions(+), 10 deletions(-) create mode 100644 mods/dkr.custom.ld diff --git a/.gitignore b/.gitignore index 7d58e8c2..12bd9c8e 100755 --- a/.gitignore +++ b/.gitignore @@ -54,8 +54,7 @@ __pycache__/ *__pycache__/ expected/ .*/ -*.ld -*/*.ld +ver/*.ld *.map */*.map *auto.txt diff --git a/Makefile b/Makefile index 115f8d1d..f5c21e77 100755 --- a/Makefile +++ b/Makefile @@ -91,6 +91,10 @@ O_FILES := $(foreach file,$(S_FILES),$(BUILD_DIR)/$(file).o) \ $(foreach file,$(C_FILES),$(BUILD_DIR)/$(file).o) \ $(foreach file,$(BIN_FILES),$(BUILD_DIR)/$(file).o) +O_FILES_LD := $(filter-out $(BUILD_DIR)/asm/assets/assets.s.o, \ + $(foreach file,$(S_FILES),$(BUILD_DIR)/$(file).o) \ + $(foreach file,$(C_FILES),$(BUILD_DIR)/$(file).o)) + find-command = $(shell which $(1) 2>/dev/null) # Tools @@ -212,9 +216,15 @@ ifneq ($(filter x86_64%,$(UNAME_M)),) endif TARGET = $(BUILD_DIR)/$(BASENAME).$(REGION).$(VERSION) +LD_FLAGS := +ifeq ($(NON_MATCHING), 0) LD_SCRIPT = ver/$(BASENAME).$(REGION).$(VERSION).ld +else +LD_SCRIPT = mods/dkr.custom.ld +LD_FLAGS += $(O_FILES_LD) +endif -LD_FLAGS = -T $(LD_SCRIPT) -T $(SYMBOLS_DIR)/undefined_syms.txt -Map $(TARGET).map +LD_FLAGS += -T $(LD_SCRIPT) -T $(SYMBOLS_DIR)/undefined_syms.txt -Map $(TARGET).map ASM_PROCESSOR_DIR := $(TOOLS_DIR)/asm-processor ASM_PROCESSOR = $(PYTHON) $(ASM_PROCESSOR_DIR)/build.py @@ -356,7 +366,7 @@ distclean: clean rm -rf $(ASM_DIRS) rm -rf $(BIN_DIRS) rm -f $(SYMBOLS_DIR)/*auto.$(REGION).$(VERSION).txt - rm -f $(LD_SCRIPT) + rm -f ver/$(BASENAME).$(REGION).$(VERSION).ld distcleanall: cleanall rm -rf asm @@ -476,11 +486,6 @@ $(BUILD_DIR)/asm/header.s.o: src/hasm/header.s | $(ALL_ASSETS_BUILT) $(V)$(AS) $(ASFLAGS) -o $(BUILD_DIR)/asm/header.s.o $< ifeq ($(NON_MATCHING),1) -# Specifically override llcvt file for NON_MATCHING builds -$(BUILD_DIR)/$(LIBULTRA_DIR)/src/libc/llcvt.c.o: src/hasm/llmuldiv_gcc.s | $(ALL_ASSETS_BUILT) - $(call print,Assembling llmuldiv_gcc:,$<,$@) - $(V)$(AS) $(ASFLAGS) --defsym NON_MATCHING=1 -o $(BUILD_DIR)/$(LIBULTRA_DIR)/src/libc/llcvt.c.o $< - # If doing a NON_MATCHING build, and the custom boot file exists, use that. ifneq ("$(wildcard $(BOOT_CUSTOM))","") $(BUILD_DIR)/assets/boot.bin.o: $(BOOT_CUSTOM) | $(ALL_ASSETS_BUILT) diff --git a/mods/dkr.custom.ld b/mods/dkr.custom.ld new file mode 100644 index 00000000..603a89e1 --- /dev/null +++ b/mods/dkr.custom.ld @@ -0,0 +1,105 @@ +SECTIONS +{ + __romPos = 0; + header_ROM_START = __romPos; + header_VRAM = ADDR(.header); + .header : AT(header_ROM_START) SUBALIGN(16) + { + FILL(0x00000000); + header_DATA_START = .; + build/asm/header.s.o(.data); + header_DATA_END = .; + header_DATA_SIZE = ABSOLUTE(header_DATA_END - header_DATA_START); + } + __romPos += SIZEOF(.header); + header_ROM_END = __romPos; + header_VRAM_END = .; + + boot_ROM_START = __romPos; + boot_VRAM = ADDR(.boot); + .boot : AT(boot_ROM_START) SUBALIGN(16) + { + FILL(0x00000000); + boot_DATA_START = .; + build/assets/boot.bin.o(.data); + boot_DATA_END = .; + boot_DATA_SIZE = ABSOLUTE(boot_DATA_END - boot_DATA_START); + } + __romPos += SIZEOF(.boot); + boot_ROM_END = __romPos; + boot_VRAM_END = .; + + main_ROM_START = __romPos; + main_VRAM = ADDR(.main); + .main 0x80000400 : AT(main_ROM_START) SUBALIGN(16) + { + /* Text */ + FILL(0x00000000); + main_TEXT_START = .; + build/src/hasm/entrypoint.s.o(.text); + build/src*.o(.text); + build/libultra/src*.o(.text); + build/asm/data/ucode_audio.s.o(.text); + build/asm/data/ucode_boot.s.o(.text); + build/asm/data/ucode_f3ddkr_dram.s.o(.text); + build/asm/data/ucode_f3ddkr_fifo.s.o(.text); + build/asm/data/ucode_f3ddkr_xbus.s.o(.text); + build/asm/data/ucode_unknown_2.s.o(.text); + /* Data */ + main_TEXT_END = .; + main_TEXT_SIZE = ABSOLUTE(main_TEXT_END - main_TEXT_START); + main_DATA_START = .; + build/src*.o(.data*); + build/libultra/src*.o(.data); + build/asm/data/data_audio.s.o(.data); + build/asm/data/data_f3ddkr_dram.s.o(.data); + build/asm/data/data_f3ddkr_fifo.s.o(.data); + build/asm/data/data_f3ddkr_xbus.s.o(.data); + build/asm/data/data_unknown_2.s.o(.data); + /* Rodata */ + main_DATA_END = .; + main_DATA_SIZE = ABSOLUTE(main_DATA_END - main_DATA_START); + main_RODATA_START = .; + build/src*.o(.rodata*); + build/libultra/src*.o(.rodata*); + . = ALIGN(., 16); + main_RODATA_END = .; + main_RODATA_SIZE = ABSOLUTE(main_RODATA_END - main_RODATA_START); + } + main_bss_VRAM = ADDR(.main_bss); + .main_bss (NOLOAD) : SUBALIGN(16) + { + FILL(0x00000000); + main_BSS_START = .; + + build/src*.o(.*bss*); + build/libultra/src*.o(.*bss*); + . = ALIGN(., 16); + main_BSS_END = .; + main_BSS_SIZE = ABSOLUTE(main_BSS_END - main_BSS_START); + } + __romPos += SIZEOF(.main); + __romPos = ALIGN(__romPos, 16); + . = ALIGN(., 16); + main_ROM_END = __romPos; + main_VRAM_END = .; + + assets_ROM_START = __romPos; + assets_VRAM = ADDR(.assets); + .assets main_VRAM_END : AT(assets_ROM_START) SUBALIGN(16) + { + FILL(0x00000000); + assets_DATA_START = .; + build/assets/assets.bin.o(.data); + assets_DATA_END = .; + assets_DATA_SIZE = ABSOLUTE(assets_DATA_END - assets_DATA_START); + } + __romPos += SIZEOF(.assets); + assets_ROM_END = __romPos; + assets_VRAM_END = .; + + /DISCARD/ : + { + *(*); + } +} diff --git a/src/main.c b/src/main.c index a98d27a4..eadbb619 100644 --- a/src/main.c +++ b/src/main.c @@ -21,7 +21,7 @@ OSThread gThread3; // OSThread for thread 3 void mainproc(void) { osInitialize(); #ifdef AVOID_UB - bzero(&gMainMemoryPool, RAM_END - (s32) (&gMainMemoryPool)); + bzero(&gMainMemoryPool, RAM_END - (s32) (&main_BSS_START)); #endif osCreateThread(&gThread1, 1, &thread1_main, 0, &gThread1Stack[STACKSIZE(STACK_IDLE)], OS_PRIORITY_IDLE); osStartThread(&gThread1); diff --git a/src/main.h b/src/main.h index 7ad7fbd5..7f139333 100644 --- a/src/main.h +++ b/src/main.h @@ -5,6 +5,8 @@ #include "macros.h" #include +extern u8 *main_BSS_START[]; + void mainproc(void); void thread1_main(void *); void thread3_verify_stack(void);