From 13865b81d64db8844dfa4aa737534b27f7528942 Mon Sep 17 00:00:00 2001 From: a Date: Sun, 6 Jul 2025 22:41:42 -0400 Subject: [PATCH] clean up linker segments even more --- sm64.ld | 93 +++++++-------------------------- src/audio/eu/data.c | 2 - src/audio/eu/globals_start.c | 3 -- src/audio/eu/load.c | 21 -------- src/audio/sh/data.c | 2 - src/audio/sh/globals_start.c | 3 -- src/audio/sh/load.c | 21 -------- src/audio/us_jp/globals_start.c | 3 -- src/audio/us_jp/load.c | 23 -------- 9 files changed, 20 insertions(+), 151 deletions(-) delete mode 100644 src/audio/eu/globals_start.c delete mode 100644 src/audio/sh/globals_start.c delete mode 100644 src/audio/us_jp/globals_start.c diff --git a/sm64.ld b/sm64.ld index f39fbc2d..d10fca81 100755 --- a/sm64.ld +++ b/sm64.ld @@ -9,8 +9,6 @@ OUTPUT_ARCH (mips) #include "config.h" #include "ld.h" -EXTERN(assertMsg); - SECTIONS { __romPos = 0; @@ -91,14 +89,6 @@ SECTIONS BEGIN_NOLOAD(main) { BUILD_DIR/src/init*.o(.bss*); -#ifdef VERSION_SH - AUDIO_DIR/port.o(.bss*); -#endif - AUDIO_DIR/globals_start.o(.bss*); - AUDIO_DIR/synthesis.o(.bss*); - AUDIO_DIR/heap.o(.bss*); - AUDIO_DIR/load.o(.bss*); - AUDIO_DIR/data.o(.bss*); AUDIO_DIR*.o(.bss*); BUILD_DIR/src/audio/external.o(.bss*); BUILD_DIR/n64-libc.a:*.o(.bss*); @@ -143,9 +133,6 @@ SECTIONS ASSERT((. <= (SEG_POOL_START + POOL_SIZE)), "Error: extended past pool end.") - __expansionRamStart = 0x80400000; - ASSERT((. <= __expansionRamStart), "Error: RDRAM expanded into Expansion RAM, despite Expansion RAM not being defined.") - BEGIN_SEG(entry, 0x10000000) { BUILD_DIR/levels/entry.o(.data); @@ -190,62 +177,45 @@ SECTIONS BEGIN_SEG(behavior, 0x13000000) { BUILD_DIR/data/behavior_data.o(.data); + . = ALIGN(0x10); } END_SEG(behavior) - /* 0x8016F000 21D7D0-255EC0 [386F0] */ + BEGIN_SEG(gd_dynlists, 0x04000000) + { + EXCLUDE_FILE(BUILD_DIR/libgoddard.a:dynlist_proc.o) + BUILD_DIR/libgoddard.a:dynlist_*.o(.data*); + BUILD_DIR/libgoddard.a:dynlists_*.o(.data*); + BUILD_DIR/libgoddard.a:anim_*.o(.data*); + EXCLUDE_FILE(BUILD_DIR/libgoddard.a:dynlist_proc.o) + BUILD_DIR/libgoddard.a:dynlist_*.o(.rodata*); + BUILD_DIR/libgoddard.a:dynlists_*.o(.rodata*); + BUILD_DIR/libgoddard.a:anim_*.o(.rodata*); + . = ALIGN(0x10); + } + END_SEG(gd_dynlists) + BEGIN_SEG(goddard, SEG_GODDARD) { BUILD_DIR/src/menu*.o(.text); BUILD_DIR/libgoddard.a:*.o(.text); + BUILD_DIR/libgoddard.a:dynlist_proc.o(.text); + /* data, rodata, per file */ BUILD_DIR/src/menu*.o(.data*); BUILD_DIR/src/menu*.o(.rodata*); /* goddard subsystem data */ - BUILD_DIR/libgoddard.a:gd_main.o(.data*); - BUILD_DIR/libgoddard.a:draw_objects.o(.data*); - BUILD_DIR/libgoddard.a:objects.o(.data*); - BUILD_DIR/libgoddard.a:particles.o(.data*); + BUILD_DIR/libgoddard.a:*.o(.data*); BUILD_DIR/libgoddard.a:dynlist_proc.o(.data*); - BUILD_DIR/libgoddard.a:debug_utils.o(.data*); - BUILD_DIR/libgoddard.a:joints.o(.data*); - BUILD_DIR/libgoddard.a:shape_helper.o(.data*); - BUILD_DIR/libgoddard.a:renderer.o(.data*); - /* goddard subsystem rodata */ - BUILD_DIR/libgoddard.a:gd_main.o(.rodata*); - BUILD_DIR/libgoddard.a:gd_memory.o(.rodata*); - BUILD_DIR/libgoddard.a:draw_objects.o(.rodata*); - BUILD_DIR/libgoddard.a:objects.o(.rodata*); - BUILD_DIR/libgoddard.a:skin_movement.o(.rodata*); - BUILD_DIR/libgoddard.a:particles.o(.rodata*); + BUILD_DIR/libgoddard.a:*.o(.rodata*); BUILD_DIR/libgoddard.a:dynlist_proc.o(.rodata*); - BUILD_DIR/libgoddard.a:old_menu.o(.rodata*); - BUILD_DIR/libgoddard.a:debug_utils.o(.rodata*); - BUILD_DIR/libgoddard.a:joints.o(.rodata*); - BUILD_DIR/libgoddard.a:skin.o(.rodata*); - BUILD_DIR/libgoddard.a:gd_math.o(.rodata*); - BUILD_DIR/libgoddard.a:shape_helper.o(.rodata*); - BUILD_DIR/libgoddard.a:renderer.o(.rodata*); . = ALIGN(0x10); } + END_SEG(goddard) BEGIN_NOLOAD(goddard) { BUILD_DIR/src/menu*.o(.bss*); - BUILD_DIR/libgoddard.a:gd_main.o(.bss*); - BUILD_DIR/libgoddard.a:gd_memory.o(.bss*); - BUILD_DIR/libgoddard.a:sfx.o(.bss*); - BUILD_DIR/libgoddard.a:draw_objects.o(.bss*); - BUILD_DIR/libgoddard.a:objects.o(.bss*); - BUILD_DIR/libgoddard.a:skin_movement.o(.bss*); - BUILD_DIR/libgoddard.a:particles.o(.bss*); - BUILD_DIR/libgoddard.a:dynlist_proc.o(.bss*); - BUILD_DIR/libgoddard.a:old_menu.o(.bss*); - BUILD_DIR/libgoddard.a:debug_utils.o(.bss*); - BUILD_DIR/libgoddard.a:joints.o(.bss*); - BUILD_DIR/libgoddard.a:skin.o(.bss*); - BUILD_DIR/libgoddard.a:shape_helper.o(.bss*); - BUILD_DIR/libgoddard.a:renderer.o(.bss*); BUILD_DIR/libgoddard.a:*.o(.bss*); . = ALIGN(0x10); } @@ -268,29 +238,6 @@ SECTIONS MIO0_SEG(debug_level_select, 0x07000000) MIO0_SEG(title_screen_bg, 0x0A000000) - /* 271B20-2A42A0 [32780] */ - BEGIN_SEG(gd_dynlists, 0x04000000) - { - BUILD_DIR/libgoddard.a:dynlist_test_cube.o(.data); - BUILD_DIR/libgoddard.a:dynlist_unused.o(.data); - BUILD_DIR/libgoddard.a:dynlist_mario_face.o(.data); - BUILD_DIR/libgoddard.a:dynlists_mario_eyes.o(.data); - BUILD_DIR/libgoddard.a:dynlists_mario_eyebrows_mustache.o(.data); - BUILD_DIR/libgoddard.a:dynlist_mario_master.o(.data); - BUILD_DIR/libgoddard.a:anim_mario_mustache_right.o(.data); - BUILD_DIR/libgoddard.a:anim_mario_mustache_left.o(.data); - BUILD_DIR/libgoddard.a:anim_mario_lips_1.o(.data); - BUILD_DIR/libgoddard.a:anim_mario_lips_2.o(.data); - BUILD_DIR/libgoddard.a:anim_mario_eyebrows_1.o(.data); - BUILD_DIR/libgoddard.a:anim_group_1.o(.data); - BUILD_DIR/libgoddard.a:anim_group_2.o(.data); - BUILD_DIR/libgoddard.a:dynlist_test_cube.o(.rodata*); - BUILD_DIR/libgoddard.a:dynlist_unused.o(.rodata*); - BUILD_DIR/libgoddard.a:*.o(.data); - BUILD_DIR/libgoddard.a:*.o(.rodata); - } - END_SEG(gd_dynlists) - gMainLevels = __romPos; BEGIN_SEG(menu, 0x14000000) diff --git a/src/audio/eu/data.c b/src/audio/eu/data.c index ee7e587d..f3011659 100644 --- a/src/audio/eu/data.c +++ b/src/audio/eu/data.c @@ -386,5 +386,3 @@ s16 gAiBufferLengths[NUMAIBUFFERS]; u32 gAudioRandom; s32 gAudioErrorFlags; - -u64 gAudioGlobalsEndMarker; diff --git a/src/audio/eu/globals_start.c b/src/audio/eu/globals_start.c deleted file mode 100644 index 01498f2a..00000000 --- a/src/audio/eu/globals_start.c +++ /dev/null @@ -1,3 +0,0 @@ -#include - -u64 gAudioGlobalsStartMarker; diff --git a/src/audio/eu/load.c b/src/audio/eu/load.c index 4cbbc39e..62d5ac2b 100644 --- a/src/audio/eu/load.c +++ b/src/audio/eu/load.c @@ -74,9 +74,6 @@ s8 gSoundMode; s8 gAudioUpdatesPerFrame; -extern u64 gAudioGlobalsStartMarker; -extern u64 gAudioGlobalsEndMarker; - extern u8 gSoundDataADSR[]; // sound_data.ctl extern u8 gSoundDataRaw[]; // sound_data.tbl extern u8 gMusicData[]; // sequences.s @@ -714,30 +711,12 @@ void audio_init() { ((u64 *) gAudioHeap)[i] = 0; } -#ifdef TARGET_N64 - // It seems boot.s doesn't clear the .bss area for audio, so do it here. - lim3 = ((uintptr_t) &gAudioGlobalsEndMarker - (uintptr_t) &gAudioGlobalsStartMarker) / 8; - ptr64 = &gAudioGlobalsStartMarker; - for (k = lim3; k >= 0; k--) { - *ptr64++ = 0; - } -#endif - D_EU_802298D0 = 20.03042f; gRefreshRate = 50; port_eu_init(); if (k) { } -#ifdef TARGET_N64 - eu_stubbed_printf_3( - "Clear Workarea %x -%x size %x \n", - (uintptr_t) &gAudioGlobalsStartMarker, - (uintptr_t) &gAudioGlobalsEndMarker, - (uintptr_t) &gAudioGlobalsEndMarker - (uintptr_t) &gAudioGlobalsStartMarker - ); -#endif - eu_stubbed_printf_1("AudioHeap is %x\n", gAudioHeapSize); for (i = 0; i < NUMAIBUFFERS; i++) { diff --git a/src/audio/sh/data.c b/src/audio/sh/data.c index 997449b3..42c235f6 100644 --- a/src/audio/sh/data.c +++ b/src/audio/sh/data.c @@ -570,5 +570,3 @@ OSMesgQueue *OSMesgQueue2; OSMesg OSMesg3[1]; OSMesgQueue OSMesgQueue3Data; OSMesgQueue *OSMesgQueue3; - -u64 gAudioGlobalsEndMarker; diff --git a/src/audio/sh/globals_start.c b/src/audio/sh/globals_start.c deleted file mode 100644 index 01498f2a..00000000 --- a/src/audio/sh/globals_start.c +++ /dev/null @@ -1,3 +0,0 @@ -#include - -u64 gAudioGlobalsStartMarker; diff --git a/src/audio/sh/load.c b/src/audio/sh/load.c index 360cd26d..4f2c1f07 100644 --- a/src/audio/sh/load.c +++ b/src/audio/sh/load.c @@ -100,9 +100,6 @@ s8 gSoundMode; s8 gAudioUpdatesPerFrame; -extern u64 gAudioGlobalsStartMarker; -extern u64 gAudioGlobalsEndMarker; - extern u8 gSoundDataADSR[]; // ctl extern u8 gSoundDataRaw[]; // tbl extern u8 gMusicData[]; // sequences @@ -1007,28 +1004,10 @@ void audio_init() { ((u64 *) gAudioHeap)[i] = 0; } -#ifdef TARGET_N64 - // It seems boot.s doesn't clear the .bss area for audio, so do it here. - lim = ((uintptr_t) &gAudioGlobalsEndMarker - (uintptr_t) &gAudioGlobalsStartMarker) / 8; - ptr64 = &gAudioGlobalsStartMarker; - for (k = lim; k >= 0; k--) { - *ptr64++ = 0; - } -#endif - D_EU_802298D0 = 16.713f; gRefreshRate = 60; port_eu_init(); -#ifdef TARGET_N64 - eu_stubbed_printf_3( - "Clear Workarea %x -%x size %x \n", - (uintptr_t) &gAudioGlobalsStartMarker, - (uintptr_t) &gAudioGlobalsEndMarker, - (uintptr_t) &gAudioGlobalsEndMarker - (uintptr_t) &gAudioGlobalsStartMarker - ); -#endif - eu_stubbed_printf_1("AudioHeap is %x\n", gAudioHeapSize); for (i = 0; i < NUMAIBUFFERS; i++) { diff --git a/src/audio/us_jp/globals_start.c b/src/audio/us_jp/globals_start.c deleted file mode 100644 index 01498f2a..00000000 --- a/src/audio/us_jp/globals_start.c +++ /dev/null @@ -1,3 +0,0 @@ -#include - -u64 gAudioGlobalsStartMarker; diff --git a/src/audio/us_jp/load.c b/src/audio/us_jp/load.c index c3a886c2..7d1ab9eb 100644 --- a/src/audio/us_jp/load.c +++ b/src/audio/us_jp/load.c @@ -72,9 +72,6 @@ s8 gAudioUpdatesPerFrame; s8 gSoundMode; -extern u64 gAudioGlobalsStartMarker; -extern u64 gAudioGlobalsEndMarker; - extern u8 gSoundDataADSR[]; // sound_data.ctl extern u8 gSoundDataRaw[]; // sound_data.tbl extern u8 gMusicData[]; // sequences.s @@ -724,26 +721,6 @@ void audio_init() { ((u64 *) gAudioHeap)[i] = 0; } -#ifdef TARGET_N64 - // It seems boot.s doesn't clear the .bss area for audio, so do it here. - i = 0; - lim3 = ((uintptr_t) &gAudioGlobalsEndMarker - (uintptr_t) &gAudioGlobalsStartMarker) / 8; - ptr64 = &gAudioGlobalsStartMarker - 1; - for (k = lim3; k >= 0; k--) { - i++; - ptr64[i] = 0; - } -#endif - -#ifdef TARGET_N64 - eu_stubbed_printf_3( - "Clear Workarea %x -%x size %x \n", - (uintptr_t) &gAudioGlobalsStartMarker, - (uintptr_t) &gAudioGlobalsEndMarker, - (uintptr_t) &gAudioGlobalsEndMarker - (uintptr_t) &gAudioGlobalsStartMarker - ); -#endif - eu_stubbed_printf_1("AudioHeap is %x\n", gAudioHeapSize); for (i = 0; i < NUMAIBUFFERS; i++) {