From c28f44e0dcf13f8c31d03e5e74cd0026ab7d09bc Mon Sep 17 00:00:00 2001 From: bjoernQ Date: Fri, 9 Sep 2022 11:05:26 +0200 Subject: [PATCH] Prepare for updated wifi drivers --- esp32-hal/build.rs | 5 +++ esp32-hal/ld/link-esp32.x | 84 +++++++++++++++++++++++++++++++++++++++ esp32-hal/ld/linkall.x | 2 +- esp32-hal/ld/memory.x | 3 ++ 4 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 esp32-hal/ld/link-esp32.x diff --git a/esp32-hal/build.rs b/esp32-hal/build.rs index 1c816dc74..94b3b98df 100644 --- a/esp32-hal/build.rs +++ b/esp32-hal/build.rs @@ -29,6 +29,11 @@ fn main() { .write_all(&memory_extras) .unwrap(); + File::create(out.join("link-esp32.x")) + .unwrap() + .write_all(include_bytes!("ld/link-esp32.x")) + .unwrap(); + println!("cargo:rustc-link-search={}", out.display()); // Only re-run the build script when memory.x is changed, diff --git a/esp32-hal/ld/link-esp32.x b/esp32-hal/ld/link-esp32.x new file mode 100644 index 000000000..f43dc4bb9 --- /dev/null +++ b/esp32-hal/ld/link-esp32.x @@ -0,0 +1,84 @@ + +/* before memory.x to allow override */ +ENTRY(Reset) + +INCLUDE memory.x + +/* after memory.x to allow override */ +PROVIDE(__pre_init = DefaultPreInit); +PROVIDE(__zero_bss = default_mem_hook); +PROVIDE(__init_data = default_mem_hook); + +INCLUDE exception.x + +SECTIONS { + .text : ALIGN(4) + { + _stext = .; + . = ALIGN (4); + _text_start = ABSOLUTE(.); + . = ALIGN (4); + *(.literal .text .literal.* .text.*) + _text_end = ABSOLUTE(.); + _etext = .; + } > ROTEXT + + .rodata : ALIGN(4) + { + _rodata_start = ABSOLUTE(.); + . = ALIGN (4); + *(.rodata .rodata.*) + _rodata_end = ABSOLUTE(.); + } > RODATA + + .rodata.wifi : + { + . = ALIGN(4); + *( .rodata_wlog_*.* ) + } > RODATA AT > RODATA + + .data : ALIGN(4) + { + _data_start = ABSOLUTE(.); + . = ALIGN (4); + *(.data .data.*) + _data_end = ABSOLUTE(.); + } > RWDATA AT > RODATA + + /* LMA of .data */ + _sidata = LOADADDR(.data); + + .bss (NOLOAD) : ALIGN(4) + { + _bss_start = ABSOLUTE(.); + . = ALIGN (4); + *(.bss .bss.* COMMON) + _bss_end = ABSOLUTE(.); + } > RWDATA + + .noinit (NOLOAD) : ALIGN(4) + { + . = ALIGN(4); + *(.noinit .noinit.*) + } > RWDATA + + .rwtext : ALIGN(4) + { + . = ALIGN (4); + *(.rwtext.literal .rwtext .rwtext.literal.* .rwtext.*) + } > RWTEXT + + /* must be last segment using RWTEXT */ + .text_heap_start (NOLOAD) : ALIGN(4) + { + . = ALIGN (4); + _text_heap_start = ABSOLUTE(.); + } > RWTEXT + + /* must be last segment using RWDATA */ + .heap_start (NOLOAD) : ALIGN(4) + { + . = ALIGN (4); + _heap_start = ABSOLUTE(.); + } > RWDATA +} \ No newline at end of file diff --git a/esp32-hal/ld/linkall.x b/esp32-hal/ld/linkall.x index f4be5b1ec..49bd26aea 100644 --- a/esp32-hal/ld/linkall.x +++ b/esp32-hal/ld/linkall.x @@ -1,2 +1,2 @@ -INCLUDE "link.x" +INCLUDE "link-esp32.x" INCLUDE "hal-defaults.x" diff --git a/esp32-hal/ld/memory.x b/esp32-hal/ld/memory.x index b2b41ab9b..745bc91ce 100644 --- a/esp32-hal/ld/memory.x +++ b/esp32-hal/ld/memory.x @@ -155,6 +155,9 @@ SECTIONS { . = ALIGN(4); *( .wifi0iram .wifi0iram.*) *( .wifirxiram .wifirxiram.*) + *( .wifislprxiram .wifislprxiram.*) + *( .wifislpiram .wifislpiram.*) + *( .phyiram .phyiram.*) *( .iram1 .iram1.*) } > RWTEXT AT > RODATA