|
|
@@ -1,222 +0,0 @@
|
|
|
-/**
|
|
|
- * ZuluSCSI™ - Copyright (c) 2023 Rabbit Hole Computing™
|
|
|
- *
|
|
|
- * ZuluSCSI™ firmware is licensed under the GPL version 3 or any later version.
|
|
|
- *
|
|
|
- * https://www.gnu.org/licenses/gpl-3.0.html
|
|
|
- * ----
|
|
|
- * This program is free software: you can redistribute it and/or modify
|
|
|
- * it under the terms of the GNU General Public License as published by
|
|
|
- * the Free Software Foundation, either version 3 of the License, or
|
|
|
- * (at your option) any later version.
|
|
|
- *
|
|
|
- * This program is distributed in the hope that it will be useful,
|
|
|
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
- * GNU General Public License for more details.
|
|
|
- *
|
|
|
- * You should have received a copy of the GNU General Public License
|
|
|
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
-**/
|
|
|
-
|
|
|
-MEMORY
|
|
|
-{
|
|
|
- FLASH(rx) : ORIGIN = 0x10000000, LENGTH = 576k
|
|
|
- RAM(rwx) : ORIGIN = 0x20000000, LENGTH = 256k /* Leave space for pico-debug */
|
|
|
- SCRATCH_X(rwx) : ORIGIN = 0x20040000, LENGTH = 4k
|
|
|
- SCRATCH_Y(rwx) : ORIGIN = 0x20041000, LENGTH = 4k
|
|
|
-}
|
|
|
-ENTRY(_entry_point)
|
|
|
-SECTIONS
|
|
|
-{
|
|
|
- .flash_begin : {
|
|
|
- __flash_binary_start = .;
|
|
|
- } > FLASH
|
|
|
- .boot2 : {
|
|
|
- __boot2_start__ = .;
|
|
|
- KEEP (*(.boot2))
|
|
|
- __boot2_end__ = .;
|
|
|
- } > FLASH
|
|
|
- ASSERT(__boot2_end__ - __boot2_start__ == 256,
|
|
|
- "ERROR: Pico second stage bootloader must be 256 bytes in size")
|
|
|
- /* If ZuluSCSI SD card bootloader is included, it goes in first 128 kB */
|
|
|
-
|
|
|
- .text.bootloader : ALIGN(16) SUBALIGN(16)
|
|
|
- {
|
|
|
- KEEP(*(.text.btldr*))
|
|
|
- . = ALIGN(131072);
|
|
|
- CHECK_BOOTLOADER_SIZE = 1 / (. <= 131072);
|
|
|
- } > FLASH
|
|
|
-
|
|
|
- .text : {
|
|
|
- __logical_binary_start = .;
|
|
|
- __real_vectors_start = .;
|
|
|
- KEEP (*(.vectors))
|
|
|
- KEEP (*(.binary_info_header))
|
|
|
- __binary_info_header_end = .;
|
|
|
- KEEP (*(.reset))
|
|
|
- KEEP (*(.init))
|
|
|
- *(.fini)
|
|
|
- *crtbegin.o(.ctors)
|
|
|
- *crtbegin?.o(.ctors)
|
|
|
- *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
|
|
|
- *(SORT(.ctors.*))
|
|
|
- *(.ctors)
|
|
|
- *crtbegin.o(.dtors)
|
|
|
- *crtbegin?.o(.dtors)
|
|
|
- *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
|
|
|
- *(SORT(.dtors.*))
|
|
|
- *(.dtors)
|
|
|
- *(.eh_frame*)
|
|
|
- . = ALIGN(4);
|
|
|
-
|
|
|
- /* Put only non-timecritical code in flash
|
|
|
- * This includes e.g. floating point math routines.
|
|
|
- */
|
|
|
- .pio/build/ZuluSCSI_Pico_DaynaPORT/src/ZuluSCSI_log.cpp.o(.text .text*)
|
|
|
- .pio/build/ZuluSCSI_Pico_DaynaPORT/src/ZuluSCSI_log_trace.cpp.o(.text .text*)
|
|
|
- .pio/build/ZuluSCSI_Pico_DaynaPORT/src/ZuluSCSI_settings.cpp.o(.text .text*)
|
|
|
- .pio/build/ZuluSCSI_Pico_DaynaPORT/src/QuirksCheck.cpp.o(.text .text*)
|
|
|
- *libZuluSCSI_platform_RP2040.a:ZuluSCSI_platform.cpp.o(.text .text*)
|
|
|
- *libm*:(.text .text*)
|
|
|
- *libc*:(.text .text*)
|
|
|
- *libgcc*:*df*(.text .text*)
|
|
|
- *USB*(.text .text*)
|
|
|
- *SPI*(.text .text*)
|
|
|
- *Spi*(.text .text*)
|
|
|
- *spi*(.text .text*)
|
|
|
- *stdc*:(.text .text*)
|
|
|
- *supc*:(.text .text*)
|
|
|
- *nosys*:(.text .text*)
|
|
|
- *libc*:*printf*(.text .text*)
|
|
|
- *libc*:*toa*(.text .text*)
|
|
|
- *libminIni.a:(.text .text*)
|
|
|
- *libCUEParser.a:(.text .text*)
|
|
|
- /* RP2040 breakpoints in RAM code don't always work very well
|
|
|
- * because the boot routine tends to overwrite them.
|
|
|
- * Uncommenting this line puts all code in flash.
|
|
|
- */
|
|
|
- /* *(.text .text*) */
|
|
|
- } > FLASH
|
|
|
- .rodata : {
|
|
|
- . = ALIGN(4);
|
|
|
- *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.flashdata*)))
|
|
|
- *(.rodata)
|
|
|
- *(.rodata*)
|
|
|
- . = ALIGN(4);
|
|
|
- } > FLASH
|
|
|
- .ARM.extab :
|
|
|
- {
|
|
|
- *(.ARM.extab* .gnu.linkonce.armextab.*)
|
|
|
- } > FLASH
|
|
|
- __exidx_start = .;
|
|
|
- .ARM.exidx :
|
|
|
- {
|
|
|
- *(.ARM.exidx* .gnu.linkonce.armexidx.*)
|
|
|
- } > FLASH
|
|
|
- __exidx_end = .;
|
|
|
- . = ALIGN(4);
|
|
|
- __binary_info_start = .;
|
|
|
- .binary_info :
|
|
|
- {
|
|
|
- KEEP(*(.binary_info.keep.*))
|
|
|
- *(.binary_info.*)
|
|
|
- } > FLASH
|
|
|
- __binary_info_end = .;
|
|
|
- . = ALIGN(4);
|
|
|
- __etext = .;
|
|
|
- .ram_vector_table (COPY): {
|
|
|
- *(.ram_vector_table)
|
|
|
- } > RAM
|
|
|
- .data : {
|
|
|
- __data_start__ = .;
|
|
|
- *(vtable)
|
|
|
-
|
|
|
- /* Time critical code will go here to avoid external flash latency */
|
|
|
- *(.time_critical*)
|
|
|
- . = ALIGN(4);
|
|
|
- *(.text)
|
|
|
- *(.text*)
|
|
|
-
|
|
|
- . = ALIGN(4);
|
|
|
- *(.data*)
|
|
|
- . = ALIGN(4);
|
|
|
- *(.after_data.*)
|
|
|
- . = ALIGN(4);
|
|
|
- PROVIDE_HIDDEN (__mutex_array_start = .);
|
|
|
- KEEP(*(SORT(.mutex_array.*)))
|
|
|
- KEEP(*(.mutex_array))
|
|
|
- PROVIDE_HIDDEN (__mutex_array_end = .);
|
|
|
- . = ALIGN(4);
|
|
|
- PROVIDE_HIDDEN (__preinit_array_start = .);
|
|
|
- KEEP(*(SORT(.preinit_array.*)))
|
|
|
- KEEP(*(.preinit_array))
|
|
|
- PROVIDE_HIDDEN (__preinit_array_end = .);
|
|
|
- . = ALIGN(4);
|
|
|
- PROVIDE_HIDDEN (__init_array_start = .);
|
|
|
- KEEP(*(SORT(.init_array.*)))
|
|
|
- KEEP(*(.init_array))
|
|
|
- PROVIDE_HIDDEN (__init_array_end = .);
|
|
|
- . = ALIGN(4);
|
|
|
- PROVIDE_HIDDEN (__fini_array_start = .);
|
|
|
- *(SORT(.fini_array.*))
|
|
|
- *(.fini_array)
|
|
|
- PROVIDE_HIDDEN (__fini_array_end = .);
|
|
|
- *(.jcr)
|
|
|
- . = ALIGN(4);
|
|
|
- __data_end__ = .;
|
|
|
- } > RAM AT> FLASH
|
|
|
- .uninitialized_data (COPY): {
|
|
|
- . = ALIGN(4);
|
|
|
- *(.uninitialized_data*)
|
|
|
- } > RAM
|
|
|
- .scratch_x : {
|
|
|
- __scratch_x_start__ = .;
|
|
|
- *(.scratch_x.*)
|
|
|
- . = ALIGN(4);
|
|
|
- __scratch_x_end__ = .;
|
|
|
- } > SCRATCH_X AT > FLASH
|
|
|
- __scratch_x_source__ = LOADADDR(.scratch_x);
|
|
|
- .scratch_y : {
|
|
|
- __scratch_y_start__ = .;
|
|
|
- *(.scratch_y.*)
|
|
|
- . = ALIGN(4);
|
|
|
- __scratch_y_end__ = .;
|
|
|
- } > SCRATCH_Y AT > FLASH
|
|
|
- __scratch_y_source__ = LOADADDR(.scratch_y);
|
|
|
- .bss : {
|
|
|
- . = ALIGN(4);
|
|
|
- __bss_start__ = .;
|
|
|
- *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.bss*)))
|
|
|
- *(COMMON)
|
|
|
- . = ALIGN(4);
|
|
|
- __bss_end__ = .;
|
|
|
- } > RAM
|
|
|
- .heap (COPY):
|
|
|
- {
|
|
|
- __end__ = .;
|
|
|
- PROVIDE(end = .);
|
|
|
- *(.heap*)
|
|
|
- . = ORIGIN(RAM) + LENGTH(RAM) - 0x400;
|
|
|
- __HeapLimit = .;
|
|
|
- } > RAM
|
|
|
- .stack1_dummy (COPY):
|
|
|
- {
|
|
|
- *(.stack1*)
|
|
|
- } > SCRATCH_X
|
|
|
- .stack_dummy (COPY):
|
|
|
- {
|
|
|
- *(.stack*)
|
|
|
- } > RAM
|
|
|
- .flash_end : {
|
|
|
- __flash_binary_end = .;
|
|
|
- } > FLASH
|
|
|
- __StackTop = ORIGIN(RAM) + LENGTH(RAM);
|
|
|
- __StackLimit = __StackTop - 0x400;
|
|
|
- __StackOneTop = ORIGIN(SCRATCH_X) + LENGTH(SCRATCH_X);
|
|
|
- __StackOneBottom = __StackOneTop - SIZEOF(.stack1_dummy);
|
|
|
- __StackBottom = __StackTop - SIZEOF(.stack_dummy);
|
|
|
- PROVIDE(__stack = __StackTop);
|
|
|
- ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed")
|
|
|
- ASSERT( __binary_info_header_end - __logical_binary_start <= 256, "Binary info must be in first 256 bytes of the binary")
|
|
|
-}
|