run linker script update script

This commit is contained in:
Corwin 2023-10-17 20:29:12 +01:00
parent 4a13d52faf
commit f7434a4bf3
No known key found for this signature in database
9 changed files with 99 additions and 171 deletions

View file

@ -7,9 +7,13 @@ EXTERN(__RUST_INTERRUPT_HANDLER)
EXTERN(__agbabi_memset) EXTERN(__agbabi_memset)
EXTERN(__agbabi_memcpy) EXTERN(__agbabi_memcpy)
/* The bios reserves the final 256 bytes of iwram for its exclusive use, so we
* need to avoid writing there */
__bios_reserved_iwram = 256;
MEMORY { MEMORY {
ewram (w!x) : ORIGIN = 0x02000000, LENGTH = 256K ewram (w!x) : ORIGIN = 0x02000000, LENGTH = 256K
iwram (w!x) : ORIGIN = 0x03000000, LENGTH = 32K iwram (w!x) : ORIGIN = 0x03000000, LENGTH = 32K - __bios_reserved_iwram
rom (rx) : ORIGIN = 0x08000000, LENGTH = 32M rom (rx) : ORIGIN = 0x08000000, LENGTH = 32M
} }
@ -32,33 +36,27 @@ SECTIONS {
. = ALIGN(4); . = ALIGN(4);
} > rom } > rom
__iwram_rom_start = .;
.iwram : { .iwram : {
__iwram_data_start = ABSOLUTE(.);
*(.iwram .iwram.*); *(.iwram .iwram.*);
. = ALIGN(4); . = ALIGN(4);
*(.text_iwram .text_iwram.*); *(.text_iwram .text_iwram.*);
. = ALIGN(4); . = ALIGN(4);
__iwram_data_end = ABSOLUTE(.);
} > iwram AT>rom } > iwram AT>rom
__iwram_data_start = ADDR(.iwram);
__iwram_rom_start = LOADADDR(.iwram);
__iwram_rom_length_halfwords = (SIZEOF(.iwram) + 1) / 2;
. = __iwram_rom_start + (__iwram_data_end - __iwram_data_start);
__ewram_rom_start = .;
.ewram : { .ewram : {
__ewram_data_start = ABSOLUTE(.);
*(.ewram .ewram.*); *(.ewram .ewram.*);
. = ALIGN(4); . = ALIGN(4);
*(.data .data.*); *(.data .data.*);
. = ALIGN(4); . = ALIGN(4);
__ewram_data_end = ABSOLUTE(.);
} > ewram AT>rom } > ewram AT>rom
__ewram_data_start = ADDR(.ewram);
__ewram_rom_start = LOADADDR(.ewram);
__ewram_rom_length_halfwords = (SIZEOF(.ewram) + 1) / 2;
.bss : { .bss : {
*(.bss .bss.*); *(.bss .bss.*);
@ -66,12 +64,6 @@ SECTIONS {
__iwram_end = ABSOLUTE(.); __iwram_end = ABSOLUTE(.);
} > iwram } > iwram
__iwram_rom_length_bytes = __iwram_data_end - __iwram_data_start;
__iwram_rom_length_halfwords = (__iwram_rom_length_bytes + 1) / 2;
__ewram_rom_length_bytes = __ewram_data_end - __ewram_data_start;
__ewram_rom_length_halfwords = (__ewram_rom_length_bytes + 1) / 2;
.shstrtab : { .shstrtab : {
*(.shstrtab) *(.shstrtab)
} }

View file

@ -7,9 +7,13 @@ EXTERN(__RUST_INTERRUPT_HANDLER)
EXTERN(__agbabi_memset) EXTERN(__agbabi_memset)
EXTERN(__agbabi_memcpy) EXTERN(__agbabi_memcpy)
/* The bios reserves the final 256 bytes of iwram for its exclusive use, so we
* need to avoid writing there */
__bios_reserved_iwram = 256;
MEMORY { MEMORY {
ewram (w!x) : ORIGIN = 0x02000000, LENGTH = 256K ewram (w!x) : ORIGIN = 0x02000000, LENGTH = 256K
iwram (w!x) : ORIGIN = 0x03000000, LENGTH = 32K iwram (w!x) : ORIGIN = 0x03000000, LENGTH = 32K - __bios_reserved_iwram
rom (rx) : ORIGIN = 0x08000000, LENGTH = 32M rom (rx) : ORIGIN = 0x08000000, LENGTH = 32M
} }
@ -32,33 +36,27 @@ SECTIONS {
. = ALIGN(4); . = ALIGN(4);
} > rom } > rom
__iwram_rom_start = .;
.iwram : { .iwram : {
__iwram_data_start = ABSOLUTE(.);
*(.iwram .iwram.*); *(.iwram .iwram.*);
. = ALIGN(4); . = ALIGN(4);
*(.text_iwram .text_iwram.*); *(.text_iwram .text_iwram.*);
. = ALIGN(4); . = ALIGN(4);
__iwram_data_end = ABSOLUTE(.);
} > iwram AT>rom } > iwram AT>rom
__iwram_data_start = ADDR(.iwram);
__iwram_rom_start = LOADADDR(.iwram);
__iwram_rom_length_halfwords = (SIZEOF(.iwram) + 1) / 2;
. = __iwram_rom_start + (__iwram_data_end - __iwram_data_start);
__ewram_rom_start = .;
.ewram : { .ewram : {
__ewram_data_start = ABSOLUTE(.);
*(.ewram .ewram.*); *(.ewram .ewram.*);
. = ALIGN(4); . = ALIGN(4);
*(.data .data.*); *(.data .data.*);
. = ALIGN(4); . = ALIGN(4);
__ewram_data_end = ABSOLUTE(.);
} > ewram AT>rom } > ewram AT>rom
__ewram_data_start = ADDR(.ewram);
__ewram_rom_start = LOADADDR(.ewram);
__ewram_rom_length_halfwords = (SIZEOF(.ewram) + 1) / 2;
.bss : { .bss : {
*(.bss .bss.*); *(.bss .bss.*);
@ -66,12 +64,6 @@ SECTIONS {
__iwram_end = ABSOLUTE(.); __iwram_end = ABSOLUTE(.);
} > iwram } > iwram
__iwram_rom_length_bytes = __iwram_data_end - __iwram_data_start;
__iwram_rom_length_halfwords = (__iwram_rom_length_bytes + 1) / 2;
__ewram_rom_length_bytes = __ewram_data_end - __ewram_data_start;
__ewram_rom_length_halfwords = (__ewram_rom_length_bytes + 1) / 2;
.shstrtab : { .shstrtab : {
*(.shstrtab) *(.shstrtab)
} }

View file

@ -7,9 +7,13 @@ EXTERN(__RUST_INTERRUPT_HANDLER)
EXTERN(__agbabi_memset) EXTERN(__agbabi_memset)
EXTERN(__agbabi_memcpy) EXTERN(__agbabi_memcpy)
/* The bios reserves the final 256 bytes of iwram for its exclusive use, so we
* need to avoid writing there */
__bios_reserved_iwram = 256;
MEMORY { MEMORY {
ewram (w!x) : ORIGIN = 0x02000000, LENGTH = 256K ewram (w!x) : ORIGIN = 0x02000000, LENGTH = 256K
iwram (w!x) : ORIGIN = 0x03000000, LENGTH = 32K iwram (w!x) : ORIGIN = 0x03000000, LENGTH = 32K - __bios_reserved_iwram
rom (rx) : ORIGIN = 0x08000000, LENGTH = 32M rom (rx) : ORIGIN = 0x08000000, LENGTH = 32M
} }
@ -32,33 +36,27 @@ SECTIONS {
. = ALIGN(4); . = ALIGN(4);
} > rom } > rom
__iwram_rom_start = .;
.iwram : { .iwram : {
__iwram_data_start = ABSOLUTE(.);
*(.iwram .iwram.*); *(.iwram .iwram.*);
. = ALIGN(4); . = ALIGN(4);
*(.text_iwram .text_iwram.*); *(.text_iwram .text_iwram.*);
. = ALIGN(4); . = ALIGN(4);
__iwram_data_end = ABSOLUTE(.);
} > iwram AT>rom } > iwram AT>rom
__iwram_data_start = ADDR(.iwram);
__iwram_rom_start = LOADADDR(.iwram);
__iwram_rom_length_halfwords = (SIZEOF(.iwram) + 1) / 2;
. = __iwram_rom_start + (__iwram_data_end - __iwram_data_start);
__ewram_rom_start = .;
.ewram : { .ewram : {
__ewram_data_start = ABSOLUTE(.);
*(.ewram .ewram.*); *(.ewram .ewram.*);
. = ALIGN(4); . = ALIGN(4);
*(.data .data.*); *(.data .data.*);
. = ALIGN(4); . = ALIGN(4);
__ewram_data_end = ABSOLUTE(.);
} > ewram AT>rom } > ewram AT>rom
__ewram_data_start = ADDR(.ewram);
__ewram_rom_start = LOADADDR(.ewram);
__ewram_rom_length_halfwords = (SIZEOF(.ewram) + 1) / 2;
.bss : { .bss : {
*(.bss .bss.*); *(.bss .bss.*);
@ -66,12 +64,6 @@ SECTIONS {
__iwram_end = ABSOLUTE(.); __iwram_end = ABSOLUTE(.);
} > iwram } > iwram
__iwram_rom_length_bytes = __iwram_data_end - __iwram_data_start;
__iwram_rom_length_halfwords = (__iwram_rom_length_bytes + 1) / 2;
__ewram_rom_length_bytes = __ewram_data_end - __ewram_data_start;
__ewram_rom_length_halfwords = (__ewram_rom_length_bytes + 1) / 2;
.shstrtab : { .shstrtab : {
*(.shstrtab) *(.shstrtab)
} }

View file

@ -7,9 +7,13 @@ EXTERN(__RUST_INTERRUPT_HANDLER)
EXTERN(__agbabi_memset) EXTERN(__agbabi_memset)
EXTERN(__agbabi_memcpy) EXTERN(__agbabi_memcpy)
/* The bios reserves the final 256 bytes of iwram for its exclusive use, so we
* need to avoid writing there */
__bios_reserved_iwram = 256;
MEMORY { MEMORY {
ewram (w!x) : ORIGIN = 0x02000000, LENGTH = 256K ewram (w!x) : ORIGIN = 0x02000000, LENGTH = 256K
iwram (w!x) : ORIGIN = 0x03000000, LENGTH = 32K iwram (w!x) : ORIGIN = 0x03000000, LENGTH = 32K - __bios_reserved_iwram
rom (rx) : ORIGIN = 0x08000000, LENGTH = 32M rom (rx) : ORIGIN = 0x08000000, LENGTH = 32M
} }
@ -32,33 +36,27 @@ SECTIONS {
. = ALIGN(4); . = ALIGN(4);
} > rom } > rom
__iwram_rom_start = .;
.iwram : { .iwram : {
__iwram_data_start = ABSOLUTE(.);
*(.iwram .iwram.*); *(.iwram .iwram.*);
. = ALIGN(4); . = ALIGN(4);
*(.text_iwram .text_iwram.*); *(.text_iwram .text_iwram.*);
. = ALIGN(4); . = ALIGN(4);
__iwram_data_end = ABSOLUTE(.);
} > iwram AT>rom } > iwram AT>rom
__iwram_data_start = ADDR(.iwram);
__iwram_rom_start = LOADADDR(.iwram);
__iwram_rom_length_halfwords = (SIZEOF(.iwram) + 1) / 2;
. = __iwram_rom_start + (__iwram_data_end - __iwram_data_start);
__ewram_rom_start = .;
.ewram : { .ewram : {
__ewram_data_start = ABSOLUTE(.);
*(.ewram .ewram.*); *(.ewram .ewram.*);
. = ALIGN(4); . = ALIGN(4);
*(.data .data.*); *(.data .data.*);
. = ALIGN(4); . = ALIGN(4);
__ewram_data_end = ABSOLUTE(.);
} > ewram AT>rom } > ewram AT>rom
__ewram_data_start = ADDR(.ewram);
__ewram_rom_start = LOADADDR(.ewram);
__ewram_rom_length_halfwords = (SIZEOF(.ewram) + 1) / 2;
.bss : { .bss : {
*(.bss .bss.*); *(.bss .bss.*);
@ -66,12 +64,6 @@ SECTIONS {
__iwram_end = ABSOLUTE(.); __iwram_end = ABSOLUTE(.);
} > iwram } > iwram
__iwram_rom_length_bytes = __iwram_data_end - __iwram_data_start;
__iwram_rom_length_halfwords = (__iwram_rom_length_bytes + 1) / 2;
__ewram_rom_length_bytes = __ewram_data_end - __ewram_data_start;
__ewram_rom_length_halfwords = (__ewram_rom_length_bytes + 1) / 2;
.shstrtab : { .shstrtab : {
*(.shstrtab) *(.shstrtab)
} }

View file

@ -7,9 +7,13 @@ EXTERN(__RUST_INTERRUPT_HANDLER)
EXTERN(__agbabi_memset) EXTERN(__agbabi_memset)
EXTERN(__agbabi_memcpy) EXTERN(__agbabi_memcpy)
/* The bios reserves the final 256 bytes of iwram for its exclusive use, so we
* need to avoid writing there */
__bios_reserved_iwram = 256;
MEMORY { MEMORY {
ewram (w!x) : ORIGIN = 0x02000000, LENGTH = 256K ewram (w!x) : ORIGIN = 0x02000000, LENGTH = 256K
iwram (w!x) : ORIGIN = 0x03000000, LENGTH = 32K iwram (w!x) : ORIGIN = 0x03000000, LENGTH = 32K - __bios_reserved_iwram
rom (rx) : ORIGIN = 0x08000000, LENGTH = 32M rom (rx) : ORIGIN = 0x08000000, LENGTH = 32M
} }
@ -32,33 +36,27 @@ SECTIONS {
. = ALIGN(4); . = ALIGN(4);
} > rom } > rom
__iwram_rom_start = .;
.iwram : { .iwram : {
__iwram_data_start = ABSOLUTE(.);
*(.iwram .iwram.*); *(.iwram .iwram.*);
. = ALIGN(4); . = ALIGN(4);
*(.text_iwram .text_iwram.*); *(.text_iwram .text_iwram.*);
. = ALIGN(4); . = ALIGN(4);
__iwram_data_end = ABSOLUTE(.);
} > iwram AT>rom } > iwram AT>rom
__iwram_data_start = ADDR(.iwram);
__iwram_rom_start = LOADADDR(.iwram);
__iwram_rom_length_halfwords = (SIZEOF(.iwram) + 1) / 2;
. = __iwram_rom_start + (__iwram_data_end - __iwram_data_start);
__ewram_rom_start = .;
.ewram : { .ewram : {
__ewram_data_start = ABSOLUTE(.);
*(.ewram .ewram.*); *(.ewram .ewram.*);
. = ALIGN(4); . = ALIGN(4);
*(.data .data.*); *(.data .data.*);
. = ALIGN(4); . = ALIGN(4);
__ewram_data_end = ABSOLUTE(.);
} > ewram AT>rom } > ewram AT>rom
__ewram_data_start = ADDR(.ewram);
__ewram_rom_start = LOADADDR(.ewram);
__ewram_rom_length_halfwords = (SIZEOF(.ewram) + 1) / 2;
.bss : { .bss : {
*(.bss .bss.*); *(.bss .bss.*);
@ -66,12 +64,6 @@ SECTIONS {
__iwram_end = ABSOLUTE(.); __iwram_end = ABSOLUTE(.);
} > iwram } > iwram
__iwram_rom_length_bytes = __iwram_data_end - __iwram_data_start;
__iwram_rom_length_halfwords = (__iwram_rom_length_bytes + 1) / 2;
__ewram_rom_length_bytes = __ewram_data_end - __ewram_data_start;
__ewram_rom_length_halfwords = (__ewram_rom_length_bytes + 1) / 2;
.shstrtab : { .shstrtab : {
*(.shstrtab) *(.shstrtab)
} }

View file

@ -7,9 +7,13 @@ EXTERN(__RUST_INTERRUPT_HANDLER)
EXTERN(__agbabi_memset) EXTERN(__agbabi_memset)
EXTERN(__agbabi_memcpy) EXTERN(__agbabi_memcpy)
/* The bios reserves the final 256 bytes of iwram for its exclusive use, so we
* need to avoid writing there */
__bios_reserved_iwram = 256;
MEMORY { MEMORY {
ewram (w!x) : ORIGIN = 0x02000000, LENGTH = 256K ewram (w!x) : ORIGIN = 0x02000000, LENGTH = 256K
iwram (w!x) : ORIGIN = 0x03000000, LENGTH = 32K iwram (w!x) : ORIGIN = 0x03000000, LENGTH = 32K - __bios_reserved_iwram
rom (rx) : ORIGIN = 0x08000000, LENGTH = 32M rom (rx) : ORIGIN = 0x08000000, LENGTH = 32M
} }
@ -32,33 +36,27 @@ SECTIONS {
. = ALIGN(4); . = ALIGN(4);
} > rom } > rom
__iwram_rom_start = .;
.iwram : { .iwram : {
__iwram_data_start = ABSOLUTE(.);
*(.iwram .iwram.*); *(.iwram .iwram.*);
. = ALIGN(4); . = ALIGN(4);
*(.text_iwram .text_iwram.*); *(.text_iwram .text_iwram.*);
. = ALIGN(4); . = ALIGN(4);
__iwram_data_end = ABSOLUTE(.);
} > iwram AT>rom } > iwram AT>rom
__iwram_data_start = ADDR(.iwram);
__iwram_rom_start = LOADADDR(.iwram);
__iwram_rom_length_halfwords = (SIZEOF(.iwram) + 1) / 2;
. = __iwram_rom_start + (__iwram_data_end - __iwram_data_start);
__ewram_rom_start = .;
.ewram : { .ewram : {
__ewram_data_start = ABSOLUTE(.);
*(.ewram .ewram.*); *(.ewram .ewram.*);
. = ALIGN(4); . = ALIGN(4);
*(.data .data.*); *(.data .data.*);
. = ALIGN(4); . = ALIGN(4);
__ewram_data_end = ABSOLUTE(.);
} > ewram AT>rom } > ewram AT>rom
__ewram_data_start = ADDR(.ewram);
__ewram_rom_start = LOADADDR(.ewram);
__ewram_rom_length_halfwords = (SIZEOF(.ewram) + 1) / 2;
.bss : { .bss : {
*(.bss .bss.*); *(.bss .bss.*);
@ -66,12 +64,6 @@ SECTIONS {
__iwram_end = ABSOLUTE(.); __iwram_end = ABSOLUTE(.);
} > iwram } > iwram
__iwram_rom_length_bytes = __iwram_data_end - __iwram_data_start;
__iwram_rom_length_halfwords = (__iwram_rom_length_bytes + 1) / 2;
__ewram_rom_length_bytes = __ewram_data_end - __ewram_data_start;
__ewram_rom_length_halfwords = (__ewram_rom_length_bytes + 1) / 2;
.shstrtab : { .shstrtab : {
*(.shstrtab) *(.shstrtab)
} }

View file

@ -7,9 +7,13 @@ EXTERN(__RUST_INTERRUPT_HANDLER)
EXTERN(__agbabi_memset) EXTERN(__agbabi_memset)
EXTERN(__agbabi_memcpy) EXTERN(__agbabi_memcpy)
/* The bios reserves the final 256 bytes of iwram for its exclusive use, so we
* need to avoid writing there */
__bios_reserved_iwram = 256;
MEMORY { MEMORY {
ewram (w!x) : ORIGIN = 0x02000000, LENGTH = 256K ewram (w!x) : ORIGIN = 0x02000000, LENGTH = 256K
iwram (w!x) : ORIGIN = 0x03000000, LENGTH = 32K iwram (w!x) : ORIGIN = 0x03000000, LENGTH = 32K - __bios_reserved_iwram
rom (rx) : ORIGIN = 0x08000000, LENGTH = 32M rom (rx) : ORIGIN = 0x08000000, LENGTH = 32M
} }
@ -32,33 +36,27 @@ SECTIONS {
. = ALIGN(4); . = ALIGN(4);
} > rom } > rom
__iwram_rom_start = .;
.iwram : { .iwram : {
__iwram_data_start = ABSOLUTE(.);
*(.iwram .iwram.*); *(.iwram .iwram.*);
. = ALIGN(4); . = ALIGN(4);
*(.text_iwram .text_iwram.*); *(.text_iwram .text_iwram.*);
. = ALIGN(4); . = ALIGN(4);
__iwram_data_end = ABSOLUTE(.);
} > iwram AT>rom } > iwram AT>rom
__iwram_data_start = ADDR(.iwram);
__iwram_rom_start = LOADADDR(.iwram);
__iwram_rom_length_halfwords = (SIZEOF(.iwram) + 1) / 2;
. = __iwram_rom_start + (__iwram_data_end - __iwram_data_start);
__ewram_rom_start = .;
.ewram : { .ewram : {
__ewram_data_start = ABSOLUTE(.);
*(.ewram .ewram.*); *(.ewram .ewram.*);
. = ALIGN(4); . = ALIGN(4);
*(.data .data.*); *(.data .data.*);
. = ALIGN(4); . = ALIGN(4);
__ewram_data_end = ABSOLUTE(.);
} > ewram AT>rom } > ewram AT>rom
__ewram_data_start = ADDR(.ewram);
__ewram_rom_start = LOADADDR(.ewram);
__ewram_rom_length_halfwords = (SIZEOF(.ewram) + 1) / 2;
.bss : { .bss : {
*(.bss .bss.*); *(.bss .bss.*);
@ -66,12 +64,6 @@ SECTIONS {
__iwram_end = ABSOLUTE(.); __iwram_end = ABSOLUTE(.);
} > iwram } > iwram
__iwram_rom_length_bytes = __iwram_data_end - __iwram_data_start;
__iwram_rom_length_halfwords = (__iwram_rom_length_bytes + 1) / 2;
__ewram_rom_length_bytes = __ewram_data_end - __ewram_data_start;
__ewram_rom_length_halfwords = (__ewram_rom_length_bytes + 1) / 2;
.shstrtab : { .shstrtab : {
*(.shstrtab) *(.shstrtab)
} }

View file

@ -7,9 +7,13 @@ EXTERN(__RUST_INTERRUPT_HANDLER)
EXTERN(__agbabi_memset) EXTERN(__agbabi_memset)
EXTERN(__agbabi_memcpy) EXTERN(__agbabi_memcpy)
/* The bios reserves the final 256 bytes of iwram for its exclusive use, so we
* need to avoid writing there */
__bios_reserved_iwram = 256;
MEMORY { MEMORY {
ewram (w!x) : ORIGIN = 0x02000000, LENGTH = 256K ewram (w!x) : ORIGIN = 0x02000000, LENGTH = 256K
iwram (w!x) : ORIGIN = 0x03000000, LENGTH = 32K iwram (w!x) : ORIGIN = 0x03000000, LENGTH = 32K - __bios_reserved_iwram
rom (rx) : ORIGIN = 0x08000000, LENGTH = 32M rom (rx) : ORIGIN = 0x08000000, LENGTH = 32M
} }
@ -32,33 +36,27 @@ SECTIONS {
. = ALIGN(4); . = ALIGN(4);
} > rom } > rom
__iwram_rom_start = .;
.iwram : { .iwram : {
__iwram_data_start = ABSOLUTE(.);
*(.iwram .iwram.*); *(.iwram .iwram.*);
. = ALIGN(4); . = ALIGN(4);
*(.text_iwram .text_iwram.*); *(.text_iwram .text_iwram.*);
. = ALIGN(4); . = ALIGN(4);
__iwram_data_end = ABSOLUTE(.);
} > iwram AT>rom } > iwram AT>rom
__iwram_data_start = ADDR(.iwram);
__iwram_rom_start = LOADADDR(.iwram);
__iwram_rom_length_halfwords = (SIZEOF(.iwram) + 1) / 2;
. = __iwram_rom_start + (__iwram_data_end - __iwram_data_start);
__ewram_rom_start = .;
.ewram : { .ewram : {
__ewram_data_start = ABSOLUTE(.);
*(.ewram .ewram.*); *(.ewram .ewram.*);
. = ALIGN(4); . = ALIGN(4);
*(.data .data.*); *(.data .data.*);
. = ALIGN(4); . = ALIGN(4);
__ewram_data_end = ABSOLUTE(.);
} > ewram AT>rom } > ewram AT>rom
__ewram_data_start = ADDR(.ewram);
__ewram_rom_start = LOADADDR(.ewram);
__ewram_rom_length_halfwords = (SIZEOF(.ewram) + 1) / 2;
.bss : { .bss : {
*(.bss .bss.*); *(.bss .bss.*);
@ -66,12 +64,6 @@ SECTIONS {
__iwram_end = ABSOLUTE(.); __iwram_end = ABSOLUTE(.);
} > iwram } > iwram
__iwram_rom_length_bytes = __iwram_data_end - __iwram_data_start;
__iwram_rom_length_halfwords = (__iwram_rom_length_bytes + 1) / 2;
__ewram_rom_length_bytes = __ewram_data_end - __ewram_data_start;
__ewram_rom_length_halfwords = (__ewram_rom_length_bytes + 1) / 2;
.shstrtab : { .shstrtab : {
*(.shstrtab) *(.shstrtab)
} }

View file

@ -7,9 +7,13 @@ EXTERN(__RUST_INTERRUPT_HANDLER)
EXTERN(__agbabi_memset) EXTERN(__agbabi_memset)
EXTERN(__agbabi_memcpy) EXTERN(__agbabi_memcpy)
/* The bios reserves the final 256 bytes of iwram for its exclusive use, so we
* need to avoid writing there */
__bios_reserved_iwram = 256;
MEMORY { MEMORY {
ewram (w!x) : ORIGIN = 0x02000000, LENGTH = 256K ewram (w!x) : ORIGIN = 0x02000000, LENGTH = 256K
iwram (w!x) : ORIGIN = 0x03000000, LENGTH = 32K iwram (w!x) : ORIGIN = 0x03000000, LENGTH = 32K - __bios_reserved_iwram
rom (rx) : ORIGIN = 0x08000000, LENGTH = 32M rom (rx) : ORIGIN = 0x08000000, LENGTH = 32M
} }
@ -32,33 +36,27 @@ SECTIONS {
. = ALIGN(4); . = ALIGN(4);
} > rom } > rom
__iwram_rom_start = .;
.iwram : { .iwram : {
__iwram_data_start = ABSOLUTE(.);
*(.iwram .iwram.*); *(.iwram .iwram.*);
. = ALIGN(4); . = ALIGN(4);
*(.text_iwram .text_iwram.*); *(.text_iwram .text_iwram.*);
. = ALIGN(4); . = ALIGN(4);
__iwram_data_end = ABSOLUTE(.);
} > iwram AT>rom } > iwram AT>rom
__iwram_data_start = ADDR(.iwram);
__iwram_rom_start = LOADADDR(.iwram);
__iwram_rom_length_halfwords = (SIZEOF(.iwram) + 1) / 2;
. = __iwram_rom_start + (__iwram_data_end - __iwram_data_start);
__ewram_rom_start = .;
.ewram : { .ewram : {
__ewram_data_start = ABSOLUTE(.);
*(.ewram .ewram.*); *(.ewram .ewram.*);
. = ALIGN(4); . = ALIGN(4);
*(.data .data.*); *(.data .data.*);
. = ALIGN(4); . = ALIGN(4);
__ewram_data_end = ABSOLUTE(.);
} > ewram AT>rom } > ewram AT>rom
__ewram_data_start = ADDR(.ewram);
__ewram_rom_start = LOADADDR(.ewram);
__ewram_rom_length_halfwords = (SIZEOF(.ewram) + 1) / 2;
.bss : { .bss : {
*(.bss .bss.*); *(.bss .bss.*);
@ -66,12 +64,6 @@ SECTIONS {
__iwram_end = ABSOLUTE(.); __iwram_end = ABSOLUTE(.);
} > iwram } > iwram
__iwram_rom_length_bytes = __iwram_data_end - __iwram_data_start;
__iwram_rom_length_halfwords = (__iwram_rom_length_bytes + 1) / 2;
__ewram_rom_length_bytes = __ewram_data_end - __ewram_data_start;
__ewram_rom_length_halfwords = (__ewram_rom_length_bytes + 1) / 2;
.shstrtab : { .shstrtab : {
*(.shstrtab) *(.shstrtab)
} }