SS2: Add 16 to size just in case, added singular place to put in goddard segment files (in case you ever want to do that)

This commit is contained in:
someone2639
2021-08-13 15:26:43 -04:00
parent 3c46090218
commit 865184597d
4 changed files with 63 additions and 78 deletions

View File

@@ -1,10 +1,5 @@
OUTPUT_ARCH (mips)
#define LINKER /* Removes externs from preprocessed script */
#include "segments.h"
#include "config.h"
#undef LINKER
#define BEGIN_SEG(name, addr) \
_##name##SegmentStart = ADDR(.name); \
_##name##SegmentRomStart = __romPos; \
@@ -25,47 +20,22 @@ OUTPUT_ARCH (mips)
SECTIONS {
__romPos = 0;
BEGIN_SEG(goddard_sz, 0x80345678)
SEG_GODDARD = 0x80345670;
BEGIN_SEG(goddard, SEG_GODDARD)
{
KEEP(BUILD_DIR/src/menu*.o(.text));
KEEP(BUILD_DIR/src/menu*.o(.data*));
KEEP(BUILD_DIR/src/menu*.o(.rodata*));
#ifdef KEEP_MARIO_HEAD
KEEP(BUILD_DIR/libgoddard.a:*.o(.text));
KEEP(BUILD_DIR/libgoddard.a:gd_main.o(.data*));
KEEP(BUILD_DIR/libgoddard.a:draw_objects.o(.data*));
KEEP(BUILD_DIR/libgoddard.a:objects.o(.data*));
KEEP(BUILD_DIR/libgoddard.a:particles.o(.data*));
KEEP(BUILD_DIR/libgoddard.a:dynlist_proc.o(.data*));
KEEP(BUILD_DIR/libgoddard.a:debug_utils.o(.data*));
KEEP(BUILD_DIR/libgoddard.a:joints.o(.data*));
KEEP(BUILD_DIR/libgoddard.a:shape_helper.o(.data*));
KEEP(BUILD_DIR/libgoddard.a:renderer.o(.data*));
KEEP(BUILD_DIR/libgoddard.a:gd_main.o(.rodata*));
KEEP(BUILD_DIR/libgoddard.a:gd_memory.o(.rodata*));
KEEP(BUILD_DIR/libgoddard.a:draw_objects.o(.rodata*));
KEEP(BUILD_DIR/libgoddard.a:objects.o(.rodata*));
KEEP(BUILD_DIR/libgoddard.a:skin_movement.o(.rodata*));
KEEP(BUILD_DIR/libgoddard.a:particles.o(.rodata*));
KEEP(BUILD_DIR/libgoddard.a:dynlist_proc.o(.rodata*));
KEEP(BUILD_DIR/libgoddard.a:old_menu.o(.rodata*));
KEEP(BUILD_DIR/libgoddard.a:debug_utils.o(.rodata*));
KEEP(BUILD_DIR/libgoddard.a:joints.o(.rodata*));
KEEP(BUILD_DIR/libgoddard.a:skin.o(.rodata*));
KEEP(BUILD_DIR/libgoddard.a:gd_math.o(.rodata*));
KEEP(BUILD_DIR/libgoddard.a:shape_helper.o(.rodata*));
KEEP(BUILD_DIR/libgoddard.a:renderer.o(.rodata*));
#endif
. = ALIGN(16);
KEEP(BUILD_DIR/src/menu*.o(.bss*));
#ifdef KEEP_MARIO_HEAD
KEEP(BUILD_DIR/libgoddard.a:*.o(.bss*));
#endif
. = ALIGN(16);
#define LOAD
#include "goddard.ld.inc"
#undef LOAD
}
END_SEG(goddard_sz)
END_SEG(goddard)
BEGIN_NOLOAD(goddard) {
#define NOLOAD
#include "goddard.ld.inc"
#undef NOLOAD
}
END_NOLOAD(goddard)
GODDARD_SIZE = SIZEOF(.goddard_sz);
GODDARD_SIZE = SIZEOF(.goddard) + SIZEOF(.goddard.noload);
/DISCARD/ :
{

43
goddard.ld.inc Normal file
View File

@@ -0,0 +1,43 @@
#ifdef LOAD
KEEP(BUILD_DIR/src/menu*.o(.text));
KEEP(BUILD_DIR/src/menu*.o(.data*));
KEEP(BUILD_DIR/src/menu*.o(.rodata*));
#ifdef KEEP_MARIO_HEAD
KEEP(BUILD_DIR/libgoddard.a:*.o(.text));
KEEP(BUILD_DIR/libgoddard.a:gd_main.o(.data*));
KEEP(BUILD_DIR/libgoddard.a:draw_objects.o(.data*));
KEEP(BUILD_DIR/libgoddard.a:objects.o(.data*));
KEEP(BUILD_DIR/libgoddard.a:particles.o(.data*));
KEEP(BUILD_DIR/libgoddard.a:dynlist_proc.o(.data*));
KEEP(BUILD_DIR/libgoddard.a:debug_utils.o(.data*));
KEEP(BUILD_DIR/libgoddard.a:joints.o(.data*));
KEEP(BUILD_DIR/libgoddard.a:shape_helper.o(.data*));
KEEP(BUILD_DIR/libgoddard.a:renderer.o(.data*));
KEEP(BUILD_DIR/libgoddard.a:gd_main.o(.rodata*));
KEEP(BUILD_DIR/libgoddard.a:gd_memory.o(.rodata*));
KEEP(BUILD_DIR/libgoddard.a:draw_objects.o(.rodata*));
KEEP(BUILD_DIR/libgoddard.a:objects.o(.rodata*));
KEEP(BUILD_DIR/libgoddard.a:skin_movement.o(.rodata*));
KEEP(BUILD_DIR/libgoddard.a:particles.o(.rodata*));
KEEP(BUILD_DIR/libgoddard.a:dynlist_proc.o(.rodata*));
KEEP(BUILD_DIR/libgoddard.a:old_menu.o(.rodata*));
KEEP(BUILD_DIR/libgoddard.a:debug_utils.o(.rodata*));
KEEP(BUILD_DIR/libgoddard.a:joints.o(.rodata*));
KEEP(BUILD_DIR/libgoddard.a:skin.o(.rodata*));
KEEP(BUILD_DIR/libgoddard.a:gd_math.o(.rodata*));
KEEP(BUILD_DIR/libgoddard.a:shape_helper.o(.rodata*));
KEEP(BUILD_DIR/libgoddard.a:renderer.o(.rodata*));
#endif
. = ALIGN(16);
#endif
#ifdef NOLOAD
KEEP(BUILD_DIR/src/menu*.o(.bss*));
#ifdef KEEP_MARIO_HEAD
KEEP(BUILD_DIR/libgoddard.a:*.o(.bss*));
#endif
. = ALIGN(16);
#endif

41
sm64.ld
View File

@@ -300,45 +300,16 @@ SECTIONS
/* 0x8016F000 21D7D0-255EC0 [386F0] */
BEGIN_SEG(goddard, RAM_END - GODDARD_SIZE)
{
BUILD_DIR/src/menu*.o(.text);
BUILD_DIR/src/menu*.o(.data*);
BUILD_DIR/src/menu*.o(.rodata*);
#ifdef KEEP_MARIO_HEAD
BUILD_DIR/libgoddard.a:*.o(.text);
/* 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: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: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*);
#endif
#define LOAD
#include "goddard.ld.inc"
#undef LOAD
}
END_SEG(goddard)
BEGIN_NOLOAD(goddard)
{
BUILD_DIR/src/menu*.o(.bss*);
#ifdef KEEP_MARIO_HEAD
BUILD_DIR/libgoddard.a:*.o(.bss*);
#endif
#define NOLOAD
#include "goddard.ld.inc"
#undef NOLOAD
}
END_NOLOAD(goddard)

View File

@@ -7,6 +7,7 @@ with open(sys.argv[1]) as f:
print(tokens)
with open("build/us/goddard.txt", "w+") as f:
sz = int(tokens[0], 16)
sz += 16
sz &= 0xFFFFFFF0
f.write("GODDARD_SIZE = 0x%X;" % sz)