Merge branch 'bugfix/psram_newlib_fns_in_iram' into 'master'
Psram workaround: in newlib, put functions that can be called with flash disabled in RAM. See merge request !1243
This commit is contained in:
commit
ac7e608d92
3 changed files with 289 additions and 0 deletions
|
@ -96,6 +96,7 @@ SECTIONS
|
|||
*libgcc.a:lib2funcs.o(.literal .text .literal.* .text.*)
|
||||
*libspi_flash.a:spi_flash_rom_patch.o(.literal .text .literal.* .text.*)
|
||||
*libgcov.a:(.literal .text .literal.* .text.*)
|
||||
INCLUDE esp32.spiram.rom-functions-iram.ld
|
||||
_iram_text_end = ABSOLUTE(.);
|
||||
} > iram0_0_seg
|
||||
|
||||
|
@ -120,6 +121,7 @@ SECTIONS
|
|||
*libgcov.a:(.rodata .rodata.*)
|
||||
*libheap.a:multi_heap.o(.rodata .rodata.*)
|
||||
*libheap.a:multi_heap_poisoning.o(.rodata .rodata.*)
|
||||
INCLUDE esp32.spiram.rom-functions-dram.ld
|
||||
_data_end = ABSOLUTE(.);
|
||||
. = ALIGN(4);
|
||||
} >dram0_0_seg
|
||||
|
|
143
components/esp32/ld/esp32.spiram.rom-functions-dram.ld
Normal file
143
components/esp32/ld/esp32.spiram.rom-functions-dram.ld
Normal file
|
@ -0,0 +1,143 @@
|
|||
/*
|
||||
If the Newlib functions in ROM aren't used (eg because the external SPI RAM workaround is active), these functions will
|
||||
be linked into the application directly instead. Normally, they would end up in flash, which is undesirable because esp-idf
|
||||
and/or applications may assume that because these functions normally are in ROM, they are accessible even when flash is
|
||||
inaccessible. To work around this, this ld fragment places these functions in RAM instead. If the ROM functions are used,
|
||||
these defines do nothing, so they can still be included in that situation.
|
||||
|
||||
This file is responsible for placing the rodata segment in DRAM.
|
||||
*/
|
||||
|
||||
*lib_a-utoa.o(.rodata .rodata.*)
|
||||
*lib_a-longjmp.o(.rodata .rodata.*)
|
||||
*lib_a-setjmp.o(.rodata .rodata.*)
|
||||
*lib_a-abs.o(.rodata .rodata.*)
|
||||
*lib_a-div.o(.rodata .rodata.*)
|
||||
*lib_a-labs.o(.rodata .rodata.*)
|
||||
*lib_a-ldiv.o(.rodata .rodata.*)
|
||||
*lib_a-quorem.o(.rodata .rodata.*)
|
||||
*lib_a-qsort.o(.rodata .rodata.*)
|
||||
*lib_a-utoa.o(.rodata .rodata.*)
|
||||
*lib_a-itoa.o(.rodata .rodata.*)
|
||||
*lib_a-atoi.o(.rodata .rodata.*)
|
||||
*lib_a-atol.o(.rodata .rodata.*)
|
||||
*lib_a-strtol.o(.rodata .rodata.*)
|
||||
*lib_a-strtoul.o(.rodata .rodata.*)
|
||||
*lib_a-wcrtomb.o(.rodata .rodata.*)
|
||||
*lib_a-fvwrite.o(.rodata .rodata.*)
|
||||
*lib_a-wbuf.o(.rodata .rodata.*)
|
||||
*lib_a-wsetup.o(.rodata .rodata.*)
|
||||
*lib_a-fputwc.o(.rodata .rodata.*)
|
||||
*lib_a-wctomb_r.o(.rodata .rodata.*)
|
||||
*lib_a-ungetc.o(.rodata .rodata.*)
|
||||
*lib_a-makebuf.o(.rodata .rodata.*)
|
||||
*lib_a-fflush.o(.rodata .rodata.*)
|
||||
*lib_a-refill.o(.rodata .rodata.*)
|
||||
*lib_a-s_fpclassify.o(.rodata .rodata.*)
|
||||
*lib_a-locale.o(.rodata .rodata.*)
|
||||
*lib_a-asctime.o(.rodata .rodata.*)
|
||||
*lib_a-ctime.o(.rodata .rodata.*)
|
||||
*lib_a-ctime_r.o(.rodata .rodata.*)
|
||||
*lib_a-lcltime.o(.rodata .rodata.*)
|
||||
*lib_a-lcltime_r.o(.rodata .rodata.*)
|
||||
*lib_a-gmtime.o(.rodata .rodata.*)
|
||||
*lib_a-gmtime_r.o(.rodata .rodata.*)
|
||||
*lib_a-strftime.o(.rodata .rodata.*)
|
||||
*lib_a-mktime.o(.rodata .rodata.*)
|
||||
*lib_a-syswrite.o(.rodata .rodata.*)
|
||||
*lib_a-tzset_r.o(.rodata .rodata.*)
|
||||
*lib_a-tzset.o(.rodata .rodata.*)
|
||||
*lib_a-toupper.o(.rodata .rodata.*)
|
||||
*lib_a-tolower.o(.rodata .rodata.*)
|
||||
*lib_a-toascii.o(.rodata .rodata.*)
|
||||
*lib_a-systimes.o(.rodata .rodata.*)
|
||||
*lib_a-time.o(.rodata .rodata.*)
|
||||
*lib_a-bsd_qsort_r.o(.rodata .rodata.*)
|
||||
*lib_a-qsort_r.o(.rodata .rodata.*)
|
||||
*lib_a-gettzinfo.o(.rodata .rodata.*)
|
||||
*lib_a-strupr.o(.rodata .rodata.*)
|
||||
*lib_a-asctime_r.o(.rodata .rodata.*)
|
||||
*lib_a-bzero.o(.rodata .rodata.*)
|
||||
*lib_a-close.o(.rodata .rodata.*)
|
||||
*lib_a-creat.o(.rodata .rodata.*)
|
||||
*lib_a-environ.o(.rodata .rodata.*)
|
||||
*lib_a-fclose.o(.rodata .rodata.*)
|
||||
*lib_a-isalnum.o(.rodata .rodata.*)
|
||||
*lib_a-isalpha.o(.rodata .rodata.*)
|
||||
*lib_a-isascii.o(.rodata .rodata.*)
|
||||
*lib_a-isblank.o(.rodata .rodata.*)
|
||||
*lib_a-iscntrl.o(.rodata .rodata.*)
|
||||
*lib_a-isdigit.o(.rodata .rodata.*)
|
||||
*lib_a-isgraph.o(.rodata .rodata.*)
|
||||
*lib_a-islower.o(.rodata .rodata.*)
|
||||
*lib_a-isprint.o(.rodata .rodata.*)
|
||||
*lib_a-ispunct.o(.rodata .rodata.*)
|
||||
*lib_a-isspace.o(.rodata .rodata.*)
|
||||
*lib_a-isupper.o(.rodata .rodata.*)
|
||||
*lib_a-memccpy.o(.rodata .rodata.*)
|
||||
*lib_a-memchr.o(.rodata .rodata.*)
|
||||
*lib_a-memcmp.o(.rodata .rodata.*)
|
||||
*lib_a-memcpy.o(.rodata .rodata.*)
|
||||
*lib_a-memmove.o(.rodata .rodata.*)
|
||||
*lib_a-memrchr.o(.rodata .rodata.*)
|
||||
*lib_a-memset.o(.rodata .rodata.*)
|
||||
*lib_a-open.o(.rodata .rodata.*)
|
||||
*lib_a-rand.o(.rodata .rodata.*)
|
||||
*lib_a-rand_r.o(.rodata .rodata.*)
|
||||
*lib_a-read.o(.rodata .rodata.*)
|
||||
*lib_a-rshift.o(.rodata .rodata.*)
|
||||
*lib_a-sbrk.o(.rodata .rodata.*)
|
||||
*lib_a-srand.o(.rodata .rodata.*)
|
||||
*lib_a-strcasecmp.o(.rodata .rodata.*)
|
||||
*lib_a-strcasestr.o(.rodata .rodata.*)
|
||||
*lib_a-strcat.o(.rodata .rodata.*)
|
||||
*lib_a-strchr.o(.rodata .rodata.*)
|
||||
*lib_a-strcmp.o(.rodata .rodata.*)
|
||||
*lib_a-strcoll.o(.rodata .rodata.*)
|
||||
*lib_a-strcpy.o(.rodata .rodata.*)
|
||||
*lib_a-strcspn.o(.rodata .rodata.*)
|
||||
*lib_a-strdup.o(.rodata .rodata.*)
|
||||
*lib_a-strlcat.o(.rodata .rodata.*)
|
||||
*lib_a-strlcpy.o(.rodata .rodata.*)
|
||||
*lib_a-strlen.o(.rodata .rodata.*)
|
||||
*lib_a-strlwr.o(.rodata .rodata.*)
|
||||
*lib_a-strncasecmp.o(.rodata .rodata.*)
|
||||
*lib_a-strncat.o(.rodata .rodata.*)
|
||||
*lib_a-strncmp.o(.rodata .rodata.*)
|
||||
*lib_a-strncpy.o(.rodata .rodata.*)
|
||||
*lib_a-strndup.o(.rodata .rodata.*)
|
||||
*lib_a-strnlen.o(.rodata .rodata.*)
|
||||
*lib_a-strrchr.o(.rodata .rodata.*)
|
||||
*lib_a-strsep.o(.rodata .rodata.*)
|
||||
*lib_a-strspn.o(.rodata .rodata.*)
|
||||
*lib_a-strstr.o(.rodata .rodata.*)
|
||||
*lib_a-strtok_r.o(.rodata .rodata.*)
|
||||
*lib_a-strupr.o(.rodata .rodata.*)
|
||||
*lib_a-stdio.o(.rodata .rodata.*)
|
||||
*lib_a-syssbrk.o(.rodata .rodata.*)
|
||||
*lib_a-sysclose.o(.rodata .rodata.*)
|
||||
*lib_a-sysopen.o(.rodata .rodata.*)
|
||||
*creat.o(.rodata .rodata.*)
|
||||
*lib_a-sysread.o(.rodata .rodata.*)
|
||||
*lib_a-syswrite.o(.rodata .rodata.*)
|
||||
*lib_a-impure.o(.rodata .rodata.*)
|
||||
*lib_a-tzvars.o(.rodata .rodata.*)
|
||||
*lib_a-sf_nan.o(.rodata .rodata.*)
|
||||
*lib_a-tzcalc_limits.o(.rodata .rodata.*)
|
||||
*lib_a-month_lengths.o(.rodata .rodata.*)
|
||||
*lib_a-timelocal.o(.rodata .rodata.*)
|
||||
*lib_a-findfp.o(.rodata .rodata.*)
|
||||
*lock.o(.rodata .rodata.*)
|
||||
*lib_a-getenv_r.o(.rodata .rodata.*)
|
||||
*isatty.o(.rodata .rodata.*)
|
||||
*lib_a-fwalk.o(.rodata .rodata.*)
|
||||
*lib_a-getenv_r.o(.rodata .rodata.*)
|
||||
*lib_a-tzlock.o(.rodata .rodata.*)
|
||||
*lib_a-ctype_.o(.rodata .rodata.*)
|
||||
*lib_a-sccl.o(.rodata .rodata.*)
|
||||
*lib_a-strptime.o(.rodata .rodata.*)
|
||||
*lib_a-envlock.o(.rodata .rodata.*)
|
||||
*lib_a-raise.o(.rodata .rodata.*)
|
||||
*lib_a-strdup_r.o(.rodata .rodata.*)
|
||||
*lib_a-system.o(.rodata .rodata.*)
|
||||
*lib_a-strndup_r.o(.rodata .rodata.*)
|
144
components/esp32/ld/esp32.spiram.rom-functions-iram.ld
Normal file
144
components/esp32/ld/esp32.spiram.rom-functions-iram.ld
Normal file
|
@ -0,0 +1,144 @@
|
|||
/*
|
||||
If the Newlib functions in ROM aren't used (eg because the external SPI RAM workaround is active), these functions will
|
||||
be linked into the application directly instead. Normally, they would end up in flash, which is undesirable because esp-idf
|
||||
and/or applications may assume that because these functions normally are in ROM, they are accessible even when flash is
|
||||
inaccessible. To work around this, this ld fragment places these functions in RAM instead. If the ROM functions are used,
|
||||
these defines do nothing, so they can still be included in that situation.
|
||||
|
||||
This file is responsible for placing the literal and text segments in IRAM.
|
||||
*/
|
||||
|
||||
|
||||
*lib_a-utoa.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-longjmp.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-setjmp.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-abs.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-div.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-labs.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-ldiv.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-quorem.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-qsort.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-utoa.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-itoa.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-atoi.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-atol.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-strtol.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-strtoul.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-wcrtomb.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-fvwrite.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-wbuf.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-wsetup.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-fputwc.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-wctomb_r.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-ungetc.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-makebuf.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-fflush.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-refill.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-s_fpclassify.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-locale.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-asctime.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-ctime.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-ctime_r.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-lcltime.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-lcltime_r.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-gmtime.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-gmtime_r.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-strftime.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-mktime.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-syswrite.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-tzset_r.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-tzset.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-toupper.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-tolower.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-toascii.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-systimes.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-time.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-bsd_qsort_r.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-qsort_r.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-gettzinfo.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-strupr.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-asctime_r.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-bzero.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-close.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-creat.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-environ.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-fclose.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-isalnum.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-isalpha.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-isascii.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-isblank.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-iscntrl.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-isdigit.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-isgraph.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-islower.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-isprint.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-ispunct.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-isspace.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-isupper.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-memccpy.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-memchr.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-memcmp.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-memcpy.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-memmove.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-memrchr.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-memset.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-open.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-rand.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-rand_r.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-read.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-rshift.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-sbrk.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-srand.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-strcasecmp.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-strcasestr.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-strcat.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-strchr.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-strcmp.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-strcoll.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-strcpy.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-strcspn.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-strdup.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-strlcat.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-strlcpy.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-strlen.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-strlwr.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-strncasecmp.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-strncat.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-strncmp.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-strncpy.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-strndup.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-strnlen.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-strrchr.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-strsep.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-strspn.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-strstr.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-strtok_r.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-strupr.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-stdio.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-syssbrk.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-sysclose.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-sysopen.o(.literal .text .literal.* .text.*)
|
||||
*creat.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-sysread.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-syswrite.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-impure.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-tzvars.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-sf_nan.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-tzcalc_limits.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-month_lengths.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-timelocal.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-findfp.o(.literal .text .literal.* .text.*)
|
||||
*lock.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-getenv_r.o(.literal .text .literal.* .text.*)
|
||||
*isatty.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-fwalk.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-getenv_r.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-tzlock.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-ctype_.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-sccl.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-strptime.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-envlock.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-raise.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-strdup_r.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-system.o(.literal .text .literal.* .text.*)
|
||||
*lib_a-strndup_r.o(.literal .text .literal.* .text.*)
|
Loading…
Reference in a new issue