Fixups for packaged no_flash and xip_ram binaries (#3012)

* Add tests of improved picotool packaging

* Move section_xip_ram and sections_psram before data in linker scripts

Initialised data must come before uninitialised, so section_xip_ram must come before section_persistent_data

Neither of these place anything in SRAM for default binaries, so this doesn't change the ram_vector_table location

* Update memmap annotations

* Fix debugger start for XIP_RAM binaries

These require a smaller window size, so pass LENGTH(RAM) from the linker script instead of (SRAM_END - SRAM_BASE)

* Add hashing and signing test to check squashing is working for those

* Fix guards around some xip_sram test binaries

* Switch to new section_no_flash_end.incl for calculating ram window start and size, and add to Risc-V
diff --git a/src/rp2040/pico_platform/memmap_blocked_ram.ld b/src/rp2040/pico_platform/memmap_blocked_ram.ld
index 914f35d..e11f414 100644
--- a/src/rp2040/pico_platform/memmap_blocked_ram.ld
+++ b/src/rp2040/pico_platform/memmap_blocked_ram.ld
@@ -31,6 +31,8 @@
  *         │   └── section_binary_info.incl              rp2_common/pico_standard_link
  *         ├── section_generated_post_text.incl          rp2_common/pico_standard_link
  *         ├── section_extra_post_text.incl              rp2_common/pico_standard_link
+ *         ├── sections_psram.incl                       rp2040/pico_platform
+ *         ├── section_xip_ram.incl                      rp2_common/pico_standard_link
  *         ├── sections_default_data.incl                rp2_common/pico_standard_link
  *         │   ├── section_ram_vector_table.incl         rp2_common/pico_standard_link
  *         │   ├── section_uninitialized_data.incl       rp2_common/pico_standard_link
@@ -44,8 +46,6 @@
  *         ├── section_generated_post_scratch.incl       rp2_common/pico_standard_link
  *         ├── section_extra_post_scratch.incl           rp2_common/pico_standard_link
  *         ├── sections_stack.incl                       rp2_common/pico_standard_link
- *         ├── sections_psram.incl                       rp2040/pico_platform
- *         ├── section_xip_ram.incl                      rp2_common/pico_standard_link
  *         ├── section_flash_end.incl                    rp2_common/pico_standard_link
  *         ├── section_end.incl                          rp2_common/pico_standard_link
  *         ├── section_generated_post_end.incl           rp2_common/pico_standard_link
diff --git a/src/rp2040/pico_platform/memmap_copy_to_ram.ld b/src/rp2040/pico_platform/memmap_copy_to_ram.ld
index a162d4a..8fd263c 100644
--- a/src/rp2040/pico_platform/memmap_copy_to_ram.ld
+++ b/src/rp2040/pico_platform/memmap_copy_to_ram.ld
@@ -29,6 +29,8 @@
  *         │   └── section_copy_to_ram_text.incl         rp2_common/pico_standard_link
  *         ├── section_generated_post_text.incl          rp2_common/pico_standard_link
  *         ├── section_extra_post_text.incl              rp2_common/pico_standard_link
+ *         ├── sections_psram.incl                       rp2040/pico_platform
+ *         ├── section_xip_ram.incl                      rp2_common/pico_standard_link
  *         ├── sections_copy_to_ram_data.incl            rp2_common/pico_standard_link
  *         │   ├── section_copy_to_ram_data.incl         rp2_common/pico_standard_link
  *         │   ├── section_tls.incl                      rp2_common/pico_standard_link
@@ -40,8 +42,6 @@
  *         ├── section_generated_post_scratch.incl       rp2_common/pico_standard_link
  *         ├── section_extra_post_scratch.incl           rp2_common/pico_standard_link
  *         ├── sections_stack.incl                       rp2_common/pico_standard_link
- *         ├── sections_psram.incl                       rp2040/pico_platform
- *         ├── section_xip_ram.incl                      rp2_common/pico_standard_link
  *         ├── section_flash_end.incl                    rp2_common/pico_standard_link
  *         ├── section_end.incl                          rp2_common/pico_standard_link
  *         ├── section_generated_post_end.incl           rp2_common/pico_standard_link
diff --git a/src/rp2040/pico_platform/memmap_default.ld b/src/rp2040/pico_platform/memmap_default.ld
index 40fa181..f3cb785 100644
--- a/src/rp2040/pico_platform/memmap_default.ld
+++ b/src/rp2040/pico_platform/memmap_default.ld
@@ -28,6 +28,8 @@
  *         │   └── section_binary_info.incl              rp2_common/pico_standard_link
  *         ├── section_generated_post_text.incl          rp2_common/pico_standard_link
  *         ├── section_extra_post_text.incl              rp2_common/pico_standard_link
+ *         ├── sections_psram.incl                       rp2040/pico_platform
+ *         ├── section_xip_ram.incl                      rp2_common/pico_standard_link
  *         ├── sections_default_data.incl                rp2_common/pico_standard_link
  *         │   ├── section_ram_vector_table.incl         rp2_common/pico_standard_link
  *         │   ├── section_uninitialized_data.incl       rp2_common/pico_standard_link
@@ -41,8 +43,6 @@
  *         ├── section_generated_post_scratch.incl       rp2_common/pico_standard_link
  *         ├── section_extra_post_scratch.incl           rp2_common/pico_standard_link
  *         ├── sections_stack.incl                       rp2_common/pico_standard_link
- *         ├── sections_psram.incl                       rp2040/pico_platform
- *         ├── section_xip_ram.incl                      rp2_common/pico_standard_link
  *         ├── section_flash_end.incl                    rp2_common/pico_standard_link
  *         ├── section_end.incl                          rp2_common/pico_standard_link
  *         ├── section_generated_post_end.incl           rp2_common/pico_standard_link
diff --git a/src/rp2040/pico_platform/memmap_no_flash.cmake b/src/rp2040/pico_platform/memmap_no_flash.cmake
index c4756b8..9d57fb2 100644
--- a/src/rp2040/pico_platform/memmap_no_flash.cmake
+++ b/src/rp2040/pico_platform/memmap_no_flash.cmake
@@ -25,6 +25,7 @@
     pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_generated_post_text.incl)
     pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_heap.incl)
     pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_no_flash_data.incl)
+    pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_no_flash_end.incl)
     pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_no_flash_rodata.incl)
     pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_persistent_data.incl)
     pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_tls.incl)
diff --git a/src/rp2040/pico_platform/memmap_no_flash.ld b/src/rp2040/pico_platform/memmap_no_flash.ld
index 56910d2..b0b0213 100644
--- a/src/rp2040/pico_platform/memmap_no_flash.ld
+++ b/src/rp2040/pico_platform/memmap_no_flash.ld
@@ -23,6 +23,8 @@
  *         │   └── section_binary_info.incl              rp2_common/pico_standard_link
  *         ├── section_generated_post_text.incl          rp2_common/pico_standard_link
  *         ├── section_extra_post_text.incl              rp2_common/pico_standard_link
+ *         ├── sections_psram.incl                       rp2040/pico_platform
+ *         ├── section_xip_ram.incl                      rp2_common/pico_standard_link
  *         ├── sections_no_flash_data.incl               rp2_common/pico_standard_link
  *         │   ├── section_no_flash_data.incl            rp2_common/pico_standard_link
  *         │   ├── section_uninitialized_data.incl       rp2_common/pico_standard_link
@@ -35,9 +37,8 @@
  *         ├── section_generated_post_scratch.incl       rp2_common/pico_standard_link
  *         ├── section_extra_post_scratch.incl           rp2_common/pico_standard_link
  *         ├── sections_stack.incl                       rp2_common/pico_standard_link
- *         ├── sections_psram.incl                       rp2040/pico_platform
- *         ├── section_xip_ram.incl                      rp2_common/pico_standard_link
  *         ├── section_end.incl                          rp2_common/pico_standard_link
+ *         ├── section_no_flash_end.incl                 rp2_common/pico_standard_link
  *         ├── section_generated_post_end.incl           rp2_common/pico_standard_link
  *         ├── section_extra_post_end.incl               rp2_common/pico_standard_link
  *         ├── section_platform_end.incl                 rp2040/pico_platform
diff --git a/src/rp2350/pico_platform/memmap_copy_to_ram.ld b/src/rp2350/pico_platform/memmap_copy_to_ram.ld
index 3c4d565..a64eddc 100644
--- a/src/rp2350/pico_platform/memmap_copy_to_ram.ld
+++ b/src/rp2350/pico_platform/memmap_copy_to_ram.ld
@@ -29,6 +29,8 @@
  *         │   └── section_copy_to_ram_text.incl         rp2_common/pico_standard_link
  *         ├── section_generated_post_text.incl          rp2_common/pico_standard_link
  *         ├── section_extra_post_text.incl              rp2_common/pico_standard_link
+ *         ├── sections_psram.incl                       rp2_common/pico_standard_link
+ *         ├── section_xip_ram.incl                      rp2_common/pico_standard_link
  *         ├── sections_copy_to_ram_data.incl            rp2_common/pico_standard_link
  *         │   ├── section_copy_to_ram_data.incl         rp2_common/pico_standard_link
  *         │   ├── section_tls.incl                      rp2_common/pico_standard_link
@@ -40,8 +42,6 @@
  *         ├── section_generated_post_scratch.incl       rp2_common/pico_standard_link
  *         ├── section_extra_post_scratch.incl           rp2_common/pico_standard_link
  *         ├── sections_stack.incl                       rp2_common/pico_standard_link
- *         ├── sections_psram.incl                       rp2_common/pico_standard_link
- *         ├── section_xip_ram.incl                      rp2_common/pico_standard_link
  *         ├── section_flash_end.incl                    rp2_common/pico_standard_link
  *         ├── section_end.incl                          rp2_common/pico_standard_link
  *         ├── section_generated_post_end.incl           rp2_common/pico_standard_link
diff --git a/src/rp2350/pico_platform/memmap_default.ld b/src/rp2350/pico_platform/memmap_default.ld
index 78079eb..8c13090 100644
--- a/src/rp2350/pico_platform/memmap_default.ld
+++ b/src/rp2350/pico_platform/memmap_default.ld
@@ -28,6 +28,8 @@
  *         │   └── section_binary_info.incl              rp2_common/pico_standard_link
  *         ├── section_generated_post_text.incl          rp2_common/pico_standard_link
  *         ├── section_extra_post_text.incl              rp2_common/pico_standard_link
+ *         ├── sections_psram.incl                       rp2_common/pico_standard_link
+ *         ├── section_xip_ram.incl                      rp2_common/pico_standard_link
  *         ├── sections_default_data.incl                rp2_common/pico_standard_link
  *         │   ├── section_ram_vector_table.incl         rp2_common/pico_standard_link
  *         │   ├── section_uninitialized_data.incl       rp2_common/pico_standard_link
@@ -41,8 +43,6 @@
  *         ├── section_generated_post_scratch.incl       rp2_common/pico_standard_link
  *         ├── section_extra_post_scratch.incl           rp2_common/pico_standard_link
  *         ├── sections_stack.incl                       rp2_common/pico_standard_link
- *         ├── sections_psram.incl                       rp2_common/pico_standard_link
- *         ├── section_xip_ram.incl                      rp2_common/pico_standard_link
  *         ├── section_flash_end.incl                    rp2_common/pico_standard_link
  *         ├── section_end.incl                          rp2_common/pico_standard_link
  *         ├── section_generated_post_end.incl           rp2_common/pico_standard_link
diff --git a/src/rp2350/pico_platform/memmap_no_flash.cmake b/src/rp2350/pico_platform/memmap_no_flash.cmake
index a1434de..66b6312 100644
--- a/src/rp2350/pico_platform/memmap_no_flash.cmake
+++ b/src/rp2350/pico_platform/memmap_no_flash.cmake
@@ -23,6 +23,7 @@
     pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_generated_post_text.incl)
     pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_heap.incl)
     pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_no_flash_data.incl)
+    pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_no_flash_end.incl)
     pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_no_flash_rodata.incl)
     pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_no_flash_text.incl)
     pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_persistent_data.incl)
diff --git a/src/rp2350/pico_platform/memmap_no_flash.ld b/src/rp2350/pico_platform/memmap_no_flash.ld
index 27d943b..0d6850a 100644
--- a/src/rp2350/pico_platform/memmap_no_flash.ld
+++ b/src/rp2350/pico_platform/memmap_no_flash.ld
@@ -23,6 +23,8 @@
  *         │   └── section_binary_info.incl              rp2_common/pico_standard_link
  *         ├── section_generated_post_text.incl          rp2_common/pico_standard_link
  *         ├── section_extra_post_text.incl              rp2_common/pico_standard_link
+ *         ├── sections_psram.incl                       rp2_common/pico_standard_link
+ *         ├── section_xip_ram.incl                      rp2_common/pico_standard_link
  *         ├── sections_no_flash_data.incl               rp2_common/pico_standard_link
  *         │   ├── section_no_flash_data.incl            rp2_common/pico_standard_link
  *         │   ├── section_uninitialized_data.incl       rp2_common/pico_standard_link
@@ -35,9 +37,8 @@
  *         ├── section_generated_post_scratch.incl       rp2_common/pico_standard_link
  *         ├── section_extra_post_scratch.incl           rp2_common/pico_standard_link
  *         ├── sections_stack.incl                       rp2_common/pico_standard_link
- *         ├── sections_psram.incl                       rp2_common/pico_standard_link
- *         ├── section_xip_ram.incl                      rp2_common/pico_standard_link
  *         ├── section_end.incl                          rp2_common/pico_standard_link
+ *         ├── section_no_flash_end.incl                 rp2_common/pico_standard_link
  *         ├── section_generated_post_end.incl           rp2_common/pico_standard_link
  *         ├── section_extra_post_end.incl               rp2_common/pico_standard_link
  *         ├── section_platform_end.incl                 rp2350/pico_platform
diff --git a/src/rp2350/pico_platform/memmap_xip_ram.cmake b/src/rp2350/pico_platform/memmap_xip_ram.cmake
index c470f11..39185cf 100644
--- a/src/rp2350/pico_platform/memmap_xip_ram.cmake
+++ b/src/rp2350/pico_platform/memmap_xip_ram.cmake
@@ -24,6 +24,7 @@
     pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_generated_post_text.incl)
     pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_heap.incl)
     pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_no_flash_data.incl)
+    pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_no_flash_end.incl)
     pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_no_flash_rodata.incl)
     pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_no_flash_text.incl)
     pico_add_link_depend(${TARGET} ${PICO_SDK_PATH}/src/rp2_common/pico_standard_link/script_include/section_persistent_data.incl)
diff --git a/src/rp2350/pico_platform/memmap_xip_ram.ld b/src/rp2350/pico_platform/memmap_xip_ram.ld
index ba06c4e..c00b379 100644
--- a/src/rp2350/pico_platform/memmap_xip_ram.ld
+++ b/src/rp2350/pico_platform/memmap_xip_ram.ld
@@ -24,6 +24,8 @@
  *             │   └── section_binary_info.incl              rp2_common/pico_standard_link
  *             ├── section_generated_post_text.incl          rp2_common/pico_standard_link
  *             ├── section_extra_post_text.incl              rp2_common/pico_standard_link
+ *             ├── sections_psram.incl                       rp2_common/pico_standard_link
+ *             ├── section_xip_ram.incl                      rp2_common/pico_standard_link
  *             ├── sections_no_flash_data.incl               rp2_common/pico_standard_link
  *             │   ├── section_no_flash_data.incl            rp2_common/pico_standard_link
  *             │   ├── section_uninitialized_data.incl       rp2_common/pico_standard_link
@@ -36,9 +38,8 @@
  *             ├── section_generated_post_scratch.incl       rp2_common/pico_standard_link
  *             ├── section_extra_post_scratch.incl           rp2_common/pico_standard_link
  *             ├── sections_stack.incl                       rp2_common/pico_standard_link
- *             ├── sections_psram.incl                       rp2_common/pico_standard_link
- *             ├── section_xip_ram.incl                      rp2_common/pico_standard_link
  *             ├── section_end.incl                          rp2_common/pico_standard_link
+ *             ├── section_no_flash_end.incl                 rp2_common/pico_standard_link
  *             ├── section_generated_post_end.incl           rp2_common/pico_standard_link
  *             ├── section_extra_post_end.incl               rp2_common/pico_standard_link
  *             ├── section_platform_end.incl                 rp2350/pico_platform
diff --git a/src/rp2_common/pico_crt0/crt0.S b/src/rp2_common/pico_crt0/crt0.S
index f5bfcd7..ebeb742 100644
--- a/src/rp2_common/pico_crt0/crt0.S
+++ b/src/rp2_common/pico_crt0/crt0.S
@@ -436,10 +436,10 @@
         // because RP2040 doesn't have special watchdog boot types
         // Launch this no_flash binary using a RAM image boot
         ldr r1, =(WATCHDOG_BASE + WATCHDOG_SCRATCH2_OFFSET) // registers start from here
-        // scratch 2 = __logical_binary_start
-        ldr r2, =__logical_binary_start
-        // scratch 3 = size
-        ldr r3, =(SRAM_END - SRAM_BASE) // assume maximum size for block loop
+        // scratch 2 = start of RAM window, from section_no_flash_end.incl
+        ldr r2, =__ram_window_start
+        // scratch 3 = size of RAM window, from section_no_flash_end.incl
+        ldr r3, =__ram_window_size
         // scratch 4&7 = magic number
         ldr r4, =0xb007c0d3
         mov r7, r4
diff --git a/src/rp2_common/pico_crt0/crt0_riscv.S b/src/rp2_common/pico_crt0/crt0_riscv.S
index 036fcd7..1f17e7e 100644
--- a/src/rp2_common/pico_crt0/crt0_riscv.S
+++ b/src/rp2_common/pico_crt0/crt0_riscv.S
@@ -305,11 +305,11 @@
     #if PICO_NO_FLASH
         // Launch this no_flash binary using a RAM image boot
         la a1, WATCHDOG_BASE + WATCHDOG_SCRATCH2_OFFSET // offsets start from here, to fit in sw immediate
-        // scratch 2 = __logical_binary_start
-        la a0, __logical_binary_start
+        // scratch 2 = start of RAM window, from section_no_flash_end.incl
+        la a0, __ram_window_start
         sw a0, 0(a1)
-        // scratch 3 = size
-        li a0, SRAM_END - SRAM_BASE // assume maximum size for block loop
+        // scratch 3 = size of RAM window, from section_no_flash_end.incl
+        la a0, __ram_window_size
         sw a0, 4(a1)
         // scratch 4&7 = magic number
         li a0, 0xb007c0d3
diff --git a/src/rp2_common/pico_standard_link/script_include/section_no_flash_end.incl b/src/rp2_common/pico_standard_link/script_include/section_no_flash_end.incl
new file mode 100644
index 0000000..9d040e7
--- /dev/null
+++ b/src/rp2_common/pico_standard_link/script_include/section_no_flash_end.incl
@@ -0,0 +1,22 @@
+/* Defines the following symbols for use by code:
+    __ram_window_start, __ram_window_size
+*/
+
+SECTIONS
+{
+    /*
+        Provide the ram window start & size for block loop searches
+
+        The window is from __logical_binary_start to ORIGIN(RAM) + LENGTH(RAM),
+        plus scratch X & Y if they are contiguous - this assumes __logical_binary_start
+        is located in RAM, which should always be the case for no_flash binaries
+
+        This is used by the _entry_point in crt0 
+    */
+    __ram_window_start = __logical_binary_start;
+    __ram_window_size = (ORIGIN(RAM) + LENGTH(RAM)) - __logical_binary_start;
+    __ram_window_size += (((ORIGIN(RAM) + LENGTH(RAM)) == ORIGIN(SCRATCH_X))
+        ? (LENGTH(SCRATCH_X) + (((ORIGIN(SCRATCH_X) + LENGTH(SCRATCH_X)) == ORIGIN(SCRATCH_Y)) ? LENGTH(SCRATCH_Y) : 0))
+        : 0
+    );
+}
diff --git a/src/rp2_common/pico_standard_link/script_include/sections_copy_to_ram.incl b/src/rp2_common/pico_standard_link/script_include/sections_copy_to_ram.incl
index 52636cc..2717d67 100644
--- a/src/rp2_common/pico_standard_link/script_include/sections_copy_to_ram.incl
+++ b/src/rp2_common/pico_standard_link/script_include/sections_copy_to_ram.incl
@@ -3,6 +3,8 @@
 INCLUDE "sections_copy_to_ram_text.incl"
 INCLUDE "section_generated_post_text.incl"
 INCLUDE "section_extra_post_text.incl"
+INCLUDE "sections_psram.incl"
+INCLUDE "section_xip_ram.incl"
 INCLUDE "sections_copy_to_ram_data.incl"
 INCLUDE "section_generated_post_data.incl"
 INCLUDE "section_extra_post_data.incl"
@@ -11,8 +13,6 @@
 INCLUDE "section_generated_post_scratch.incl"
 INCLUDE "section_extra_post_scratch.incl"
 INCLUDE "sections_stack.incl"
-INCLUDE "sections_psram.incl"
-INCLUDE "section_xip_ram.incl"
 INCLUDE "section_flash_end.incl"
 INCLUDE "section_end.incl"
 INCLUDE "section_generated_post_end.incl"
diff --git a/src/rp2_common/pico_standard_link/script_include/sections_default.incl b/src/rp2_common/pico_standard_link/script_include/sections_default.incl
index f81e48c..ec0862a 100644
--- a/src/rp2_common/pico_standard_link/script_include/sections_default.incl
+++ b/src/rp2_common/pico_standard_link/script_include/sections_default.incl
@@ -3,6 +3,8 @@
 INCLUDE "sections_default_text.incl"
 INCLUDE "section_generated_post_text.incl"
 INCLUDE "section_extra_post_text.incl"
+INCLUDE "sections_psram.incl"
+INCLUDE "section_xip_ram.incl"
 INCLUDE "sections_default_data.incl"
 INCLUDE "section_generated_post_data.incl"
 INCLUDE "section_extra_post_data.incl"
@@ -11,8 +13,6 @@
 INCLUDE "section_generated_post_scratch.incl"
 INCLUDE "section_extra_post_scratch.incl"
 INCLUDE "sections_stack.incl"
-INCLUDE "sections_psram.incl"
-INCLUDE "section_xip_ram.incl"
 INCLUDE "section_flash_end.incl"
 INCLUDE "section_end.incl"
 INCLUDE "section_generated_post_end.incl"
diff --git a/src/rp2_common/pico_standard_link/script_include/sections_no_flash.incl b/src/rp2_common/pico_standard_link/script_include/sections_no_flash.incl
index 2e68aa2..fd84e60 100644
--- a/src/rp2_common/pico_standard_link/script_include/sections_no_flash.incl
+++ b/src/rp2_common/pico_standard_link/script_include/sections_no_flash.incl
@@ -3,6 +3,8 @@
 INCLUDE "sections_no_flash_text.incl"
 INCLUDE "section_generated_post_text.incl"
 INCLUDE "section_extra_post_text.incl"
+INCLUDE "sections_psram.incl"
+INCLUDE "section_xip_ram.incl"
 INCLUDE "sections_no_flash_data.incl"
 INCLUDE "section_generated_post_data.incl"
 INCLUDE "section_extra_post_data.incl"
@@ -11,9 +13,8 @@
 INCLUDE "section_generated_post_scratch.incl"
 INCLUDE "section_extra_post_scratch.incl"
 INCLUDE "sections_stack.incl"
-INCLUDE "sections_psram.incl"
-INCLUDE "section_xip_ram.incl"
 INCLUDE "section_end.incl"
+INCLUDE "section_no_flash_end.incl"
 INCLUDE "section_generated_post_end.incl"
 INCLUDE "section_extra_post_end.incl"
 INCLUDE "section_platform_end.incl"
diff --git a/test/pico_low_power_test/CMakeLists.txt b/test/pico_low_power_test/CMakeLists.txt
index 452c64e..726e206 100644
--- a/test/pico_low_power_test/CMakeLists.txt
+++ b/test/pico_low_power_test/CMakeLists.txt
@@ -40,6 +40,24 @@
                 set_target_properties(low_power_test_timers_encrypted PROPERTIES PICO_TEST_BUDDY_FILE external_sleep_timer.elf)
                 # create map/bin/hex file etc.
                 pico_add_extra_outputs(low_power_test_timers_encrypted)
+
+                add_executable(low_power_test_timers_encrypted_xip_sram
+                        low_power_test_timers.c
+                        )
+                target_link_libraries(low_power_test_timers_encrypted_xip_sram low_power_test_common)
+                pico_set_binary_type(low_power_test_timers_encrypted_xip_sram no_flash)
+                pico_package_uf2_output(low_power_test_timers_encrypted_xip_sram)
+                pico_sign_binary(low_power_test_timers_encrypted_xip_sram ${PICO_SDK_PATH}/tools/example_keys/private.pem)
+                # Encrypted binaries don't clear xip_sram, so NO_CLEAR can be omitted when persistent data is in xip_sram
+                pico_encrypt_binary(low_power_test_timers_encrypted_xip_sram ${PICO_SDK_PATH}/tools/example_keys/privateaes.bin ${PICO_SDK_PATH}/tools/example_keys/ivsalt.bin EMBED)
+                pico_set_persistent_data_loc(low_power_test_timers_encrypted_xip_sram xip_ram)
+                # Also check encrypting with code in xip_sram
+                pico_set_time_critical_placement(low_power_test_timers_encrypted_xip_sram xip_ram)
+                set_target_properties(low_power_test_timers_encrypted_xip_sram PROPERTIES PICO_TEST_TIMEOUT 35)
+                set_target_properties(low_power_test_timers_encrypted_xip_sram PROPERTIES PICO_TEST_FAILURE_STRING "ERROR:")
+                set_target_properties(low_power_test_timers_encrypted_xip_sram PROPERTIES PICO_TEST_BUDDY_FILE external_sleep_timer.elf)
+                # create map/bin/hex file etc.
+                pico_add_extra_outputs(low_power_test_timers_encrypted_xip_sram)
         endif()
 
 
diff --git a/test/pico_xip_sram_test/CMakeLists.txt b/test/pico_xip_sram_test/CMakeLists.txt
index defdebe..40555af 100644
--- a/test/pico_xip_sram_test/CMakeLists.txt
+++ b/test/pico_xip_sram_test/CMakeLists.txt
@@ -81,20 +81,57 @@
 pico_set_time_critical_placement(pico_critical_xip_sram_test_no_flash xip_ram)
 pico_add_extra_outputs(pico_critical_xip_sram_test_no_flash)
 
-if (NOT PICO_RP2040 AND NOT PICO_C_COMPILER_IS_CLANG)
-    # XIP SRAM only binary, clang version is too big
-    add_executable(pico_xip_sram_test pico_xip_sram_test.c)
-    target_link_libraries(pico_xip_sram_test PRIVATE pico_stdlib)
-    pico_set_binary_type(pico_xip_sram_test xip_ram)
-    pico_minimize_runtime(pico_xip_sram_test INCLUDE PRINTF PRINTF_MINIMAL DEFAULT_ALARM_POOL PANIC FLOAT)
-    target_compile_definitions(pico_xip_sram_test PRIVATE PICO_HEAP_SIZE=0x200)
-    pico_add_extra_outputs(pico_xip_sram_test)
+if (NOT PICO_RP2040)
+    if (NOT PICO_C_COMPILER_IS_CLANG AND NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
+        # XIP SRAM only binary, clang and debug versions are too big
+        add_executable(pico_xip_sram_test pico_xip_sram_test.c)
+        target_link_libraries(pico_xip_sram_test PRIVATE pico_stdlib)
+        pico_set_binary_type(pico_xip_sram_test xip_ram)
+        pico_minimize_runtime(pico_xip_sram_test INCLUDE PRINTF PRINTF_MINIMAL DEFAULT_ALARM_POOL PANIC FLOAT)
+        target_compile_definitions(pico_xip_sram_test PRIVATE PICO_HEAP_SIZE=0x200)
+        pico_add_extra_outputs(pico_xip_sram_test)
+    endif()
 
-    # Low power and critical XIP SRAM
-    add_executable(pico_critical_xip_sram_test_low_power pico_critical_xip_sram_test.c)
-    target_link_libraries(pico_critical_xip_sram_test_low_power PRIVATE pico_stdlib pico_multicore hardware_dma pico_test hardware_riscv_platform_timer pico_low_power)
-    pico_set_binary_type(pico_critical_xip_sram_test_low_power copy_to_ram)
-    pico_set_time_critical_placement(pico_critical_xip_sram_test_low_power xip_ram)
-    pico_set_persistent_data_loc(pico_critical_xip_sram_test_low_power xip_ram)
-    pico_add_extra_outputs(pico_critical_xip_sram_test_low_power)
+    if (TARGET pico_low_power)
+        # Low power and critical XIP SRAM
+        add_executable(pico_critical_xip_sram_test_low_power pico_critical_xip_sram_test.c)
+        target_link_libraries(pico_critical_xip_sram_test_low_power PRIVATE pico_stdlib pico_multicore hardware_dma pico_test hardware_riscv_platform_timer pico_low_power)
+        pico_set_binary_type(pico_critical_xip_sram_test_low_power copy_to_ram)
+        pico_set_time_critical_placement(pico_critical_xip_sram_test_low_power xip_ram)
+        pico_set_persistent_data_loc(pico_critical_xip_sram_test_low_power xip_ram)
+        pico_add_extra_outputs(pico_critical_xip_sram_test_low_power)
+    endif()
+
+    # Packaged binary and critical XIP SRAM
+    add_executable(pico_critical_xip_sram_test_packaged pico_critical_xip_sram_test.c)
+    target_link_libraries(pico_critical_xip_sram_test_packaged PRIVATE pico_stdlib pico_multicore hardware_dma pico_test)
+    if (NOT PICO_RP2040)
+        target_link_libraries(pico_critical_xip_sram_test_packaged PRIVATE hardware_riscv_platform_timer)
+    endif()
+    pico_set_binary_type(pico_critical_xip_sram_test_packaged no_flash)
+    pico_set_time_critical_placement(pico_critical_xip_sram_test_packaged xip_ram)
+    pico_package_uf2_output(pico_critical_xip_sram_test_packaged)
+    pico_hash_binary(pico_critical_xip_sram_test_packaged)
+    pico_sign_binary(pico_critical_xip_sram_test_packaged ${PICO_SDK_PATH}/tools/example_keys/private.pem)
+    pico_add_extra_outputs(pico_critical_xip_sram_test_packaged)
+
+    # Use XIP SRAM for time critical functions and scratch X for not in flash functions, in a packaged, hashed & signed binary
+    add_executable(pico_critical_xip_sram_no_flash_scratch_x_test_packaged pico_critical_xip_sram_test.c)
+    target_link_libraries(pico_critical_xip_sram_no_flash_scratch_x_test_packaged PRIVATE pico_stdlib pico_multicore hardware_dma pico_test)
+    target_link_libraries(pico_critical_xip_sram_no_flash_scratch_x_test_packaged PRIVATE hardware_riscv_platform_timer)
+    target_compile_definitions(pico_critical_xip_sram_no_flash_scratch_x_test_packaged PRIVATE
+        TEXT_FUNC_SRAM_BASE=SRAM_SCRATCH_X_BASE
+        TEXT_FUNC_SRAM_END=SRAM_SCRATCH_Y_BASE
+    )
+    target_compile_definitions(pico_critical_xip_sram_no_flash_scratch_x_test_packaged PRIVATE
+        PICO_CORE1_STACK_SIZE=0x200
+    )
+    pico_set_binary_type(pico_critical_xip_sram_no_flash_scratch_x_test_packaged no_flash)
+    pico_set_not_in_flash_placement(pico_critical_xip_sram_no_flash_scratch_x_test_packaged scratch_x)
+    pico_set_time_critical_placement(pico_critical_xip_sram_no_flash_scratch_x_test_packaged xip_ram)
+    pico_enable_stdio_usb(pico_critical_xip_sram_no_flash_scratch_x_test_packaged 1) # test with USB as that invokes flash functions
+    pico_package_uf2_output(pico_critical_xip_sram_no_flash_scratch_x_test_packaged)
+    pico_hash_binary(pico_critical_xip_sram_no_flash_scratch_x_test_packaged)
+    pico_sign_binary(pico_critical_xip_sram_no_flash_scratch_x_test_packaged ${PICO_SDK_PATH}/tools/example_keys/private.pem)
+    pico_add_extra_outputs(pico_critical_xip_sram_no_flash_scratch_x_test_packaged)
 endif()
\ No newline at end of file