diff --git a/.gitignore b/.gitignore index e3cfd1232c..7e9a915f53 100644 --- a/.gitignore +++ b/.gitignore @@ -36,6 +36,7 @@ user.props .pydevproject .settings .launch +.vscode # Key files (for Flash Encryption and Secure Boot) secure_boot_signing_key.pem diff --git a/Jenkinsfile b/Jenkinsfile index 0331a984f8..58e6a47ffb 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -85,7 +85,8 @@ def flashBuild(short_name, version, variant) { unstash 'esp32Tools' unstash 'tests' unstash 'tools' - sh 'python esp32/tools/fw_updater/updater.py --port ' + device_name +' flash -t esp32/build-' + variant + '/' + board_name + '-' + version + '.tar.gz' + sh 'python esp32/tools/fw_updater/updater.py --noexit --port ' + device_name +' flash -t esp32/build-' + variant + '/' + board_name + '-' + version + '.tar.gz' + sh 'python esp32/tools/fw_updater/updater.py --port ' + device_name +' pybytes --auto_start False' } } } diff --git a/docs/library/ussl.rst b/docs/library/ussl.rst index a37ac6adbf..6bdaf0187f 100644 --- a/docs/library/ussl.rst +++ b/docs/library/ussl.rst @@ -114,6 +114,21 @@ network sockets, both client-side and server-side. SSL sockets inherit all methods and from the standard sockets, see the :mod:`usocket` module. + .. function:: ssl.save_session(sock) + + Takes an instance sock of ssl.SSLSocket, and returns an instance of ssl.SSLSession representing saved session data from the socket, which can be used to resume a SSL session later. Example:: + + import socket + import ssl + addr = socket.getaddrinfo('www.google.com', 443)[0][-1] + sock_one = ssl.wrap_socket(socket.socket()) + sock_one.connect(addr) # performs a full ssl handshake + session = ssl.save_session(sock_one) + sock_one.close() + sock_one = None + sock_two = ssl.wrap_socket(socket.socket(), saved_session=session) + sock_two.connect(addr) # resumes using saved session, resulting in a faster handshake + Exceptions ---------- diff --git a/esp32/PyJTAG/Readme.md b/esp32/PyJTAG/Readme.md index eae62c271e..cb44c9e89b 100644 --- a/esp32/PyJTAG/Readme.md +++ b/esp32/PyJTAG/Readme.md @@ -1,23 +1,25 @@ # Short readme for how to use the PyJTAG +## Setup +Generally follow these rules to setup JTAG debugging on your OS: https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/jtag-debugging/index.html + +Download link for OpenOCD for ESP32 from Espressif: https://github.com/espressif/openocd-esp32/releases + + +## Build the firmware Create the firmware with `BTYPE=debug` flag. -Do not use the default pins assigned to UART, SPI, CAN because they are used by the JTAG. Pins not to be used: P4, P9, P10, P23 -Detailed information are here: https://pycomiot.atlassian.net/wiki/spaces/FIR/pages/966295564/Usage+of+PyJTAG +Note: Do not use the default pins assigned to UART, SPI, CAN because they are used by the JTAG. Pins not to be used: P4, P9, P10, P23. + +## Setup the PyJTAG board -Setup the PyJTAG board's switches: +PyJTAG's switches: * ESP32 JTAG: all turned ON * ESP32 B.LOADER: all turned ON except SAFE_BOOT_SW which is OFF * TO LTE UART 1/2: does not matter * CURRENT SHUNTS: connected -Place the Pycom board with the reset button towards the Current Shunts. - -Generally follow these rules to setup JTAG debugging on your OS: https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/jtag-debugging/index.html - -(Download link of OpenOCD for ESP32 from Espressif: https://github.com/espressif/openocd-esp32/releases) - -Connect the PyJTAG via usb. You see four new USB devices: +Place the Pycom board with the reset button towards the Current Shunts. Now connect the PyJTAG via usb. You will see four new USB devices. On Linux this will look like this: ``` $ lsusb -d 0403: Bus 001 Device 010: ID 0403:6011 Future Technology Devices International, Ltd FT4232H Quad HS USB-UART/FIFO IC @@ -25,6 +27,8 @@ $ ls /dev/ttyUSB? /dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2 /dev/ttyUSB3 ``` +## Start OCD + Go to `esp32` folder in Firmware-Development repository and run: ``` PATH_TO_OPENOCD/bin/openocd -s PATH_TO_OPENOCD/share/openocd/scripts -s PyJTAG -f PyJTAG/interface/ftdi/esp32-pycom.cfg -f PyJTAG/board/esp32-pycom.cfg @@ -49,9 +53,33 @@ Info : JTAG tap: esp32.cpu1 tap/device found: 0x120034e5 (mfg: 0x272 (Tensilica) Info : Listening on port 3333 for gdb connections ``` +## Start GDB + When OpenOCD is running, start GDB from `esp32` folder. Assuming you have a FIPY: ``` xtensa-esp32-elf-gdb -x PyJTAG/gdbinit build/FIPY/debug/application.elf ``` -In `PyJTAG/gdbinit` a breakpoint is configured at `TASK_Micropython`, so execution should stop there first. +In `PyJTAG/gdbinit` a breakpoint is configured at `TASK_Micropython`, so execution should stop there first: + +``` +Thread 1 hit Temporary breakpoint 1, TASK_Micropython (pvParameters=0x0) at mptask.c:136 +``` + + +## REPL + +Connect to `/dev/ttyUSB2` to reach the REPL terminal over usb serial. E.g. using pymakr in Atom. + +## Troubleshooting +If openocd says "Error: Connect failed", try to close gdb and openocd and start over. + +If `/dev/ttyUSB0` doesn't show up or disappears, disconnect the PyJTAG board, reconnect and start over. + +It can be advisable to use the `gdb` from the latest xtensa toolchain, even if an earlier version is used to build the firmware. + +If `gdb` does not reach the `Thread 1 hit Temporary breakpoint ...` line, close and reopen `gdb`. + +## Extra +A few more details are here: https://pycomiot.atlassian.net/wiki/spaces/FIR/pages/966295564/Usage+of+PyJTAG + diff --git a/esp32/application.mk b/esp32/application.mk index 828917810a..70c0f7d96d 100644 --- a/esp32/application.mk +++ b/esp32/application.mk @@ -369,7 +369,7 @@ SRC_QSTR_AUTO_DEPS += BOOT_LDFLAGS = $(LDFLAGS) -T esp32.bootloader.ld -T esp32.rom.ld -T esp32.peripherals.ld -T esp32.bootloader.rom.ld -T esp32.rom.spiram_incompatible_fns.ld # add the application linker script(s) -APP_LDFLAGS += $(LDFLAGS) -T esp32_out.ld -T esp32.project.ld -T esp32.rom.ld -T esp32.peripherals.ld +APP_LDFLAGS += $(LDFLAGS) -T esp32_out.ld -T esp32.project.ld -T esp32.rom.ld -T esp32.peripherals.ld -T esp32.rom.libgcc.ld # add the application specific CFLAGS CFLAGS += $(APP_INC) -DMICROPY_NLR_SETJMP=1 -DMBEDTLS_CONFIG_FILE='"mbedtls/esp_config.h"' -DHAVE_CONFIG_H -DESP_PLATFORM -DFFCONF_H=\"lib/oofatfs/ffconf.h\" -DWITH_POSIX diff --git a/esp32/bootloader/lib/libbootloader_support.a b/esp32/bootloader/lib/libbootloader_support.a index 3e926b9c93..0bbcdedda4 100644 Binary files a/esp32/bootloader/lib/libbootloader_support.a and b/esp32/bootloader/lib/libbootloader_support.a differ diff --git a/esp32/bootloader/lib/libefuse.a b/esp32/bootloader/lib/libefuse.a index e0b44b4dd2..00abdd7165 100644 Binary files a/esp32/bootloader/lib/libefuse.a and b/esp32/bootloader/lib/libefuse.a differ diff --git a/esp32/bootloader/lib/liblog.a b/esp32/bootloader/lib/liblog.a index 45c1880351..5c446945f7 100644 Binary files a/esp32/bootloader/lib/liblog.a and b/esp32/bootloader/lib/liblog.a differ diff --git a/esp32/bootloader/lib/libmicro-ecc.a b/esp32/bootloader/lib/libmicro-ecc.a index dd735bbb70..a11ea02bff 100644 Binary files a/esp32/bootloader/lib/libmicro-ecc.a and b/esp32/bootloader/lib/libmicro-ecc.a differ diff --git a/esp32/bootloader/lib/libsoc.a b/esp32/bootloader/lib/libsoc.a index 5836d3a4cf..93dfd8156d 100644 Binary files a/esp32/bootloader/lib/libsoc.a and b/esp32/bootloader/lib/libsoc.a differ diff --git a/esp32/bootloader/lib/libspi_flash.a b/esp32/bootloader/lib/libspi_flash.a index e5d9e1b443..29e8be5cb2 100644 Binary files a/esp32/bootloader/lib/libspi_flash.a and b/esp32/bootloader/lib/libspi_flash.a differ diff --git a/esp32/esp32.project.ld b/esp32/esp32.project.ld index ea944aeded..ab86633b9a 100644 --- a/esp32/esp32.project.ld +++ b/esp32/esp32.project.ld @@ -1,6 +1,6 @@ /* Automatically generated file; DO NOT EDIT */ /* Espressif IoT Development Framework Linker Script */ -/* Generated from: /home/gezahusi/Work/Repositories/pycom-esp-idf/components/esp32/ld/esp32.project.ld.in */ +/* Generated from: /Users/ehlers/pycom/pycom-esp-idf/components/esp32/ld/esp32.project.ld.in */ /* Default entry point: */ ENTRY(call_start_cpu0); @@ -168,151 +168,151 @@ SECTIONS *libhal.a:( .literal .literal.* .text .text.*) *libapp_trace.a:( .literal .literal.* .text .text.*) *libesp32.a:panic.*( .literal .literal.* .text .text.*) - *libespcoredump.a:core_dump_port.*( .literal .literal.* .text .text.*) - *libespcoredump.a:core_dump_flash.*( .literal .literal.* .text .text.*) *libespcoredump.a:core_dump_uart.*( .literal .literal.* .text .text.*) + *libespcoredump.a:core_dump_flash.*( .literal .literal.* .text .text.*) *libespcoredump.a:core_dump_common.*( .literal .literal.* .text .text.*) + *libespcoredump.a:core_dump_port.*( .literal .literal.* .text .text.*) *librtc.a:( .literal .literal.* .text .text.*) *libgcc.a:lib2funcs.*( .literal .literal.* .text .text.*) - *libsoc.a:rtc_time.*( .literal .literal.* .text .text.*) - *libsoc.a:cpu_util.*( .literal .literal.* .text .text.*) - *libsoc.a:rtc_sleep.*( .literal .literal.* .text .text.*) - *libsoc.a:rtc_clk_init.*( .literal .literal.* .text .text.*) *libsoc.a:rtc_clk.*( .literal .literal.* .text .text.*) *libsoc.a:rtc_init.*( .literal .literal.* .text .text.*) - *libsoc.a:rtc_pm.*( .literal .literal.* .text .text.*) - *libsoc.a:rtc_wdt.*( .literal .literal.* .text .text.*) + *libsoc.a:rtc_sleep.*( .literal .literal.* .text .text.*) + *libsoc.a:rtc_time.*( .literal .literal.* .text .text.*) *libsoc.a:rtc_periph.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-time.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-makebuf.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-strcasestr.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-tzlock.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-memset.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-strdup.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-environ.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-tzcalc_limits.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-labs.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-strlcat.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-isdigit.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-ungetc.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-sccl.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-strlen.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-stdio.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-tzset_r.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-asctime_r.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-tolower.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-memccpy.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-wctomb_r.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-strcspn.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-strcasecmp.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-iscntrl.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-strncasecmp.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-abs.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-sf_nan.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-asctime.*( .literal .literal.* .text .text.*) + *libsoc.a:rtc_wdt.*( .literal .literal.* .text .text.*) + *libsoc.a:rtc_pm.*( .literal .literal.* .text .text.*) + *libsoc.a:cpu_util.*( .literal .literal.* .text .text.*) + *libsoc.a:rtc_clk_init.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-findfp.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-memcpy.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-strchr.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-strptime.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-creat.*( .literal .literal.* .text .text.*) *libc-psram-workaround.a:lib_a-strncmp.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-fvwrite.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-isblank.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-read.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-tzset.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-strftime.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-itoa.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:isatty.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-ctime.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-gmtime.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-div.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-sbrk.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-setjmp.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-fputwc.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-system.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-isascii.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-atoi.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-open.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-close.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-wbuf.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-sysopen.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-strstr.*( .literal .literal.* .text .text.*) *libc-psram-workaround.a:lib_a-rand_r.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-ispunct.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-s_fpclassify.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-quorem.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-strspn.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-strrchr.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-strndup.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-gettzinfo.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-fclose.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-isalnum.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-strtol.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-creat.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-fwalk.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-memcmp.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-strcmp.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-rshift.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-timelocal.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-strtok_r.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-wctomb_r.*( .literal .literal.* .text .text.*) *libc-psram-workaround.a:lib_a-toascii.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-strnlen.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-wsetup.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-strncat.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-labs.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-tzcalc_limits.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lock.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-utoa.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-memrchr.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-mktime.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-strndup.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-bzero.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-memset.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-sccl.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-s_fpclassify.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-strlen.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-ldiv.*( .literal .literal.* .text .text.*) *libc-psram-workaround.a:lib_a-lcltime_r.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-isalpha.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-gmtime_r.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-srand.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-fvwrite.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-envlock.*( .literal .literal.* .text .text.*) *libc-psram-workaround.a:lib_a-wcrtomb.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-tzvars.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-asctime.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-sf_nan.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-asctime_r.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-refill.*( .literal .literal.* .text .text.*) *libc-psram-workaround.a:lib_a-strcoll.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-strcasestr.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-fwalk.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-memchr.*( .literal .literal.* .text .text.*) *libc-psram-workaround.a:lib_a-strndup_r.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-gmtime.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-gmtime_r.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:isatty.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-wbuf.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-mktime.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-ctime_r.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-isascii.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-memcpy.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-sysclose.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-setjmp.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-srand.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:creat.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-ctype_.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-tzvars.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-strlcpy.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-strspn.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-memcmp.*( .literal .literal.* .text .text.*) *libc-psram-workaround.a:lib_a-strcat.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-bzero.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-month_lengths.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-strncat.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-strftime.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-strdup.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-isblank.*( .literal .literal.* .text .text.*) *libc-psram-workaround.a:lib_a-isupper.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-wsetup.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-close.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-islower.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-strncpy.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-raise.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-atol.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-ldiv.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-getenv_r.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-isspace.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-system.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-strchr.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-memchr.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-refill.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-atoi.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:creat.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-envlock.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-strnlen.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-isgraph.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-syssbrk.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-sysread.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-memmove.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-makebuf.*( .literal .literal.* .text .text.*) *libc-psram-workaround.a:lib_a-longjmp.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-sbrk.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-timelocal.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-strlcpy.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-strdup_r.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-sysopen.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-toupper.*( .literal .literal.* .text .text.*) *libc-psram-workaround.a:lib_a-strtoul.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-strsep.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-itoa.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-memrchr.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-open.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-utoa.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-strcpy.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-fputwc.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-strtok_r.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-strstr.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-memmove.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-isprint.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-syswrite.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-impure.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-toupper.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-strncasecmp.*( .literal .literal.* .text .text.*) *libc-psram-workaround.a:lib_a-rand.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-ctime.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-fflush.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-strdup_r.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-strcpy.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-strcasecmp.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-isgraph.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-ungetc.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-strlwr.*( .literal .literal.* .text .text.*) *libc-psram-workaround.a:lib_a-strupr.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-strsep.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-fflush.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-isspace.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-memccpy.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-sysread.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-quorem.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-getenv_r.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-read.*( .literal .literal.* .text .text.*) *libc-psram-workaround.a:lib_a-lcltime.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-strlwr.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-strptime.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-findfp.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-tzset_r.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-strncpy.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-ctime_r.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-isalnum.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-sysclose.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-strlcat.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-gettzinfo.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-iscntrl.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-tolower.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-rshift.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-time.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-ispunct.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-tzset.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-raise.*( .literal .literal.* .text .text.*) *libc-psram-workaround.a:lib_a-systimes.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-div.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lib_a-ctype_.*( .literal .literal.* .text .text.*) - *libc-psram-workaround.a:lock.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-islower.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-isdigit.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-stdio.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-environ.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-strcmp.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-tzlock.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-strcspn.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-syswrite.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-abs.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-syssbrk.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-strtol.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-fclose.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-month_lengths.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-atol.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-strrchr.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-impure.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-isprint.*( .literal .literal.* .text .text.*) + *libc-psram-workaround.a:lib_a-isalpha.*( .literal .literal.* .text .text.*) *libfreertos.a:( .literal .literal.* .text .text.*) *libgcov.a:( .literal .literal.* .text .text.*) *libxtensa-debug-module.a:eri.*( .literal .literal.* .text .text.*) - *libheap.a:multi_heap.*( .literal .literal.* .text .text.*) *libheap.a:multi_heap_poisoning.*( .literal .literal.* .text .text.*) + *libheap.a:multi_heap.*( .literal .literal.* .text .text.*) _iram_text_end = ABSOLUTE(.); _iram_end = ABSOLUTE(.); @@ -347,134 +347,134 @@ SECTIONS *libesp32.a:panic.*( .rodata .rodata.*) *libphy.a:( .rodata .rodata.*) *libsoc.a:rtc_clk.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-time.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-makebuf.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-strcasestr.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-tzlock.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-memset.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-strdup.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-environ.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-tzcalc_limits.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-labs.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-strlcat.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-isdigit.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-ungetc.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-sccl.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-strlen.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-stdio.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-tzset_r.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-asctime_r.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-tolower.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-memccpy.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-wctomb_r.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-strcspn.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-strcasecmp.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-iscntrl.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-strncasecmp.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-abs.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-sf_nan.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-asctime.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-findfp.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-memcpy.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-strchr.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-strptime.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-creat.*( .rodata .rodata.*) *libc-psram-workaround.a:lib_a-strncmp.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-fvwrite.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-isblank.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-read.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-tzset.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-strftime.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-itoa.*( .rodata .rodata.*) + *libc-psram-workaround.a:isatty.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-ctime.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-gmtime.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-div.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-sbrk.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-setjmp.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-fputwc.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-system.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-isascii.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-atoi.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-open.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-close.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-wbuf.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-sysopen.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-strstr.*( .rodata .rodata.*) *libc-psram-workaround.a:lib_a-rand_r.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-ispunct.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-s_fpclassify.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-quorem.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-strspn.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-strrchr.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-strndup.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-gettzinfo.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-fclose.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-isalnum.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-strtol.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-creat.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-fwalk.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-memcmp.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-strcmp.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-rshift.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-timelocal.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-strtok_r.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-wctomb_r.*( .rodata .rodata.*) *libc-psram-workaround.a:lib_a-toascii.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-strnlen.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-wsetup.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-strncat.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-labs.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-tzcalc_limits.*( .rodata .rodata.*) + *libc-psram-workaround.a:lock.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-utoa.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-memrchr.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-mktime.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-strndup.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-bzero.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-memset.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-sccl.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-s_fpclassify.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-strlen.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-ldiv.*( .rodata .rodata.*) *libc-psram-workaround.a:lib_a-lcltime_r.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-isalpha.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-gmtime_r.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-srand.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-fvwrite.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-envlock.*( .rodata .rodata.*) *libc-psram-workaround.a:lib_a-wcrtomb.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-tzvars.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-asctime.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-sf_nan.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-asctime_r.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-refill.*( .rodata .rodata.*) *libc-psram-workaround.a:lib_a-strcoll.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-strcasestr.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-fwalk.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-memchr.*( .rodata .rodata.*) *libc-psram-workaround.a:lib_a-strndup_r.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-gmtime.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-gmtime_r.*( .rodata .rodata.*) - *libc-psram-workaround.a:isatty.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-wbuf.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-mktime.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-ctime_r.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-isascii.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-memcpy.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-sysclose.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-setjmp.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-srand.*( .rodata .rodata.*) + *libc-psram-workaround.a:creat.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-ctype_.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-tzvars.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-strlcpy.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-strspn.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-memcmp.*( .rodata .rodata.*) *libc-psram-workaround.a:lib_a-strcat.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-bzero.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-month_lengths.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-strncat.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-strftime.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-strdup.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-isblank.*( .rodata .rodata.*) *libc-psram-workaround.a:lib_a-isupper.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-wsetup.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-close.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-islower.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-strncpy.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-raise.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-atol.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-ldiv.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-getenv_r.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-isspace.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-system.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-strchr.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-memchr.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-refill.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-atoi.*( .rodata .rodata.*) - *libc-psram-workaround.a:creat.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-envlock.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-strnlen.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-isgraph.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-syssbrk.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-sysread.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-memmove.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-makebuf.*( .rodata .rodata.*) *libc-psram-workaround.a:lib_a-longjmp.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-sbrk.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-timelocal.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-strlcpy.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-strdup_r.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-sysopen.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-toupper.*( .rodata .rodata.*) *libc-psram-workaround.a:lib_a-strtoul.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-strsep.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-itoa.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-memrchr.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-open.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-utoa.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-strcpy.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-fputwc.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-strtok_r.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-strstr.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-memmove.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-isprint.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-syswrite.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-impure.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-toupper.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-strncasecmp.*( .rodata .rodata.*) *libc-psram-workaround.a:lib_a-rand.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-ctime.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-fflush.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-strdup_r.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-strcpy.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-strcasecmp.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-isgraph.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-ungetc.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-strlwr.*( .rodata .rodata.*) *libc-psram-workaround.a:lib_a-strupr.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-strsep.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-fflush.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-isspace.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-memccpy.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-sysread.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-quorem.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-getenv_r.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-read.*( .rodata .rodata.*) *libc-psram-workaround.a:lib_a-lcltime.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-strlwr.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-strptime.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-findfp.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-tzset_r.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-strncpy.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-ctime_r.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-isalnum.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-sysclose.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-strlcat.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-gettzinfo.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-iscntrl.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-tolower.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-rshift.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-time.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-ispunct.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-tzset.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-raise.*( .rodata .rodata.*) *libc-psram-workaround.a:lib_a-systimes.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-div.*( .rodata .rodata.*) - *libc-psram-workaround.a:lib_a-ctype_.*( .rodata .rodata.*) - *libc-psram-workaround.a:lock.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-islower.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-isdigit.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-stdio.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-environ.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-strcmp.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-tzlock.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-strcspn.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-syswrite.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-abs.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-syssbrk.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-strtol.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-fclose.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-month_lengths.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-atol.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-strrchr.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-impure.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-isprint.*( .rodata .rodata.*) + *libc-psram-workaround.a:lib_a-isalpha.*( .rodata .rodata.*) *libgcov.a:( .rodata .rodata.*) - *libheap.a:multi_heap.*( .rodata .rodata.*) *libheap.a:multi_heap_poisoning.*( .rodata .rodata.*) + *libheap.a:multi_heap.*( .rodata .rodata.*) _data_end = ABSOLUTE(.); . = ALIGN(4); @@ -539,7 +539,7 @@ SECTIONS *(.rodata_desc .rodata_desc.*) /* Should be the first. App version info. DO NOT PUT ANYTHING BEFORE IT! */ *(.rodata_custom_desc .rodata_custom_desc.*) /* Should be the second. Custom app version info. DO NOT PUT ANYTHING BEFORE IT! */ - *(EXCLUDE_FILE(*libapp_trace.a *libesp32.a:panic.* *libphy.a *libsoc.a:rtc_clk.* *libc-psram-workaround.a:lock.* *libc-psram-workaround.a:lib_a-ctype_.* *libc-psram-workaround.a:lib_a-div.* *libc-psram-workaround.a:lib_a-systimes.* *libc-psram-workaround.a:lib_a-findfp.* *libc-psram-workaround.a:lib_a-strptime.* *libc-psram-workaround.a:lib_a-strlwr.* *libc-psram-workaround.a:lib_a-lcltime.* *libc-psram-workaround.a:lib_a-strupr.* *libc-psram-workaround.a:lib_a-fflush.* *libc-psram-workaround.a:lib_a-ctime.* *libc-psram-workaround.a:lib_a-rand.* *libc-psram-workaround.a:lib_a-impure.* *libc-psram-workaround.a:lib_a-syswrite.* *libc-psram-workaround.a:lib_a-isprint.* *libc-psram-workaround.a:lib_a-memmove.* *libc-psram-workaround.a:lib_a-strstr.* *libc-psram-workaround.a:lib_a-strtok_r.* *libc-psram-workaround.a:lib_a-fputwc.* *libc-psram-workaround.a:lib_a-strcpy.* *libc-psram-workaround.a:lib_a-utoa.* *libc-psram-workaround.a:lib_a-open.* *libc-psram-workaround.a:lib_a-memrchr.* *libc-psram-workaround.a:lib_a-itoa.* *libc-psram-workaround.a:lib_a-strsep.* *libc-psram-workaround.a:lib_a-strtoul.* *libc-psram-workaround.a:lib_a-toupper.* *libc-psram-workaround.a:lib_a-sysopen.* *libc-psram-workaround.a:lib_a-strdup_r.* *libc-psram-workaround.a:lib_a-strlcpy.* *libc-psram-workaround.a:lib_a-timelocal.* *libc-psram-workaround.a:lib_a-sbrk.* *libc-psram-workaround.a:lib_a-longjmp.* *libc-psram-workaround.a:lib_a-sysread.* *libc-psram-workaround.a:lib_a-syssbrk.* *libc-psram-workaround.a:lib_a-isgraph.* *libc-psram-workaround.a:lib_a-strnlen.* *libc-psram-workaround.a:lib_a-envlock.* *libc-psram-workaround.a:creat.* *libc-psram-workaround.a:lib_a-atoi.* *libc-psram-workaround.a:lib_a-refill.* *libc-psram-workaround.a:lib_a-memchr.* *libc-psram-workaround.a:lib_a-strchr.* *libc-psram-workaround.a:lib_a-system.* *libc-psram-workaround.a:lib_a-isspace.* *libc-psram-workaround.a:lib_a-getenv_r.* *libc-psram-workaround.a:lib_a-ldiv.* *libc-psram-workaround.a:lib_a-atol.* *libc-psram-workaround.a:lib_a-raise.* *libc-psram-workaround.a:lib_a-strncpy.* *libc-psram-workaround.a:lib_a-islower.* *libc-psram-workaround.a:lib_a-close.* *libc-psram-workaround.a:lib_a-wsetup.* *libc-psram-workaround.a:lib_a-isupper.* *libc-psram-workaround.a:lib_a-strftime.* *libc-psram-workaround.a:lib_a-strncat.* *libc-psram-workaround.a:lib_a-month_lengths.* *libc-psram-workaround.a:lib_a-bzero.* *libc-psram-workaround.a:lib_a-strcat.* *libc-psram-workaround.a:lib_a-srand.* *libc-psram-workaround.a:lib_a-setjmp.* *libc-psram-workaround.a:lib_a-sysclose.* *libc-psram-workaround.a:lib_a-memcpy.* *libc-psram-workaround.a:lib_a-isascii.* *libc-psram-workaround.a:lib_a-ctime_r.* *libc-psram-workaround.a:lib_a-mktime.* *libc-psram-workaround.a:lib_a-wbuf.* *libc-psram-workaround.a:isatty.* *libc-psram-workaround.a:lib_a-gmtime_r.* *libc-psram-workaround.a:lib_a-gmtime.* *libc-psram-workaround.a:lib_a-strndup_r.* *libc-psram-workaround.a:lib_a-strcoll.* *libc-psram-workaround.a:lib_a-tzvars.* *libc-psram-workaround.a:lib_a-wcrtomb.* *libc-psram-workaround.a:lib_a-isalpha.* *libc-psram-workaround.a:lib_a-lcltime_r.* *libc-psram-workaround.a:lib_a-toascii.* *libc-psram-workaround.a:lib_a-rshift.* *libc-psram-workaround.a:lib_a-strcmp.* *libc-psram-workaround.a:lib_a-memcmp.* *libc-psram-workaround.a:lib_a-fwalk.* *libc-psram-workaround.a:lib_a-creat.* *libc-psram-workaround.a:lib_a-strtol.* *libc-psram-workaround.a:lib_a-isalnum.* *libc-psram-workaround.a:lib_a-fclose.* *libc-psram-workaround.a:lib_a-gettzinfo.* *libc-psram-workaround.a:lib_a-strndup.* *libc-psram-workaround.a:lib_a-strrchr.* *libc-psram-workaround.a:lib_a-strspn.* *libc-psram-workaround.a:lib_a-quorem.* *libc-psram-workaround.a:lib_a-s_fpclassify.* *libc-psram-workaround.a:lib_a-ispunct.* *libc-psram-workaround.a:lib_a-rand_r.* *libc-psram-workaround.a:lib_a-tzset.* *libc-psram-workaround.a:lib_a-read.* *libc-psram-workaround.a:lib_a-isblank.* *libc-psram-workaround.a:lib_a-fvwrite.* *libc-psram-workaround.a:lib_a-strncmp.* *libc-psram-workaround.a:lib_a-asctime.* *libc-psram-workaround.a:lib_a-sf_nan.* *libc-psram-workaround.a:lib_a-abs.* *libc-psram-workaround.a:lib_a-strncasecmp.* *libc-psram-workaround.a:lib_a-iscntrl.* *libc-psram-workaround.a:lib_a-strcasecmp.* *libc-psram-workaround.a:lib_a-strcspn.* *libc-psram-workaround.a:lib_a-wctomb_r.* *libc-psram-workaround.a:lib_a-memccpy.* *libc-psram-workaround.a:lib_a-tolower.* *libc-psram-workaround.a:lib_a-asctime_r.* *libc-psram-workaround.a:lib_a-tzset_r.* *libc-psram-workaround.a:lib_a-stdio.* *libc-psram-workaround.a:lib_a-strlen.* *libc-psram-workaround.a:lib_a-sccl.* *libc-psram-workaround.a:lib_a-ungetc.* *libc-psram-workaround.a:lib_a-isdigit.* *libc-psram-workaround.a:lib_a-strlcat.* *libc-psram-workaround.a:lib_a-labs.* *libc-psram-workaround.a:lib_a-tzcalc_limits.* *libc-psram-workaround.a:lib_a-environ.* *libc-psram-workaround.a:lib_a-strdup.* *libc-psram-workaround.a:lib_a-memset.* *libc-psram-workaround.a:lib_a-tzlock.* *libc-psram-workaround.a:lib_a-strcasestr.* *libc-psram-workaround.a:lib_a-makebuf.* *libc-psram-workaround.a:lib_a-time.* *libgcov.a *libheap.a:multi_heap_poisoning.* *libheap.a:multi_heap.*) .rodata EXCLUDE_FILE(*libapp_trace.a *libesp32.a:panic.* *libphy.a *libsoc.a:rtc_clk.* *libc-psram-workaround.a:lock.* *libc-psram-workaround.a:lib_a-ctype_.* *libc-psram-workaround.a:lib_a-div.* *libc-psram-workaround.a:lib_a-systimes.* *libc-psram-workaround.a:lib_a-findfp.* *libc-psram-workaround.a:lib_a-strptime.* *libc-psram-workaround.a:lib_a-strlwr.* *libc-psram-workaround.a:lib_a-lcltime.* *libc-psram-workaround.a:lib_a-strupr.* *libc-psram-workaround.a:lib_a-fflush.* *libc-psram-workaround.a:lib_a-ctime.* *libc-psram-workaround.a:lib_a-rand.* *libc-psram-workaround.a:lib_a-impure.* *libc-psram-workaround.a:lib_a-syswrite.* *libc-psram-workaround.a:lib_a-isprint.* *libc-psram-workaround.a:lib_a-memmove.* *libc-psram-workaround.a:lib_a-strstr.* *libc-psram-workaround.a:lib_a-strtok_r.* *libc-psram-workaround.a:lib_a-fputwc.* *libc-psram-workaround.a:lib_a-strcpy.* *libc-psram-workaround.a:lib_a-utoa.* *libc-psram-workaround.a:lib_a-open.* *libc-psram-workaround.a:lib_a-memrchr.* *libc-psram-workaround.a:lib_a-itoa.* *libc-psram-workaround.a:lib_a-strsep.* *libc-psram-workaround.a:lib_a-strtoul.* *libc-psram-workaround.a:lib_a-toupper.* *libc-psram-workaround.a:lib_a-sysopen.* *libc-psram-workaround.a:lib_a-strdup_r.* *libc-psram-workaround.a:lib_a-strlcpy.* *libc-psram-workaround.a:lib_a-timelocal.* *libc-psram-workaround.a:lib_a-sbrk.* *libc-psram-workaround.a:lib_a-longjmp.* *libc-psram-workaround.a:lib_a-sysread.* *libc-psram-workaround.a:lib_a-syssbrk.* *libc-psram-workaround.a:lib_a-isgraph.* *libc-psram-workaround.a:lib_a-strnlen.* *libc-psram-workaround.a:lib_a-envlock.* *libc-psram-workaround.a:creat.* *libc-psram-workaround.a:lib_a-atoi.* *libc-psram-workaround.a:lib_a-refill.* *libc-psram-workaround.a:lib_a-memchr.* *libc-psram-workaround.a:lib_a-strchr.* *libc-psram-workaround.a:lib_a-system.* *libc-psram-workaround.a:lib_a-isspace.* *libc-psram-workaround.a:lib_a-getenv_r.* *libc-psram-workaround.a:lib_a-ldiv.* *libc-psram-workaround.a:lib_a-atol.* *libc-psram-workaround.a:lib_a-raise.* *libc-psram-workaround.a:lib_a-strncpy.* *libc-psram-workaround.a:lib_a-islower.* *libc-psram-workaround.a:lib_a-close.* *libc-psram-workaround.a:lib_a-wsetup.* *libc-psram-workaround.a:lib_a-isupper.* *libc-psram-workaround.a:lib_a-strftime.* *libc-psram-workaround.a:lib_a-strncat.* *libc-psram-workaround.a:lib_a-month_lengths.* *libc-psram-workaround.a:lib_a-bzero.* *libc-psram-workaround.a:lib_a-strcat.* *libc-psram-workaround.a:lib_a-srand.* *libc-psram-workaround.a:lib_a-setjmp.* *libc-psram-workaround.a:lib_a-sysclose.* *libc-psram-workaround.a:lib_a-memcpy.* *libc-psram-workaround.a:lib_a-isascii.* *libc-psram-workaround.a:lib_a-ctime_r.* *libc-psram-workaround.a:lib_a-mktime.* *libc-psram-workaround.a:lib_a-wbuf.* *libc-psram-workaround.a:isatty.* *libc-psram-workaround.a:lib_a-gmtime_r.* *libc-psram-workaround.a:lib_a-gmtime.* *libc-psram-workaround.a:lib_a-strndup_r.* *libc-psram-workaround.a:lib_a-strcoll.* *libc-psram-workaround.a:lib_a-tzvars.* *libc-psram-workaround.a:lib_a-wcrtomb.* *libc-psram-workaround.a:lib_a-isalpha.* *libc-psram-workaround.a:lib_a-lcltime_r.* *libc-psram-workaround.a:lib_a-toascii.* *libc-psram-workaround.a:lib_a-rshift.* *libc-psram-workaround.a:lib_a-strcmp.* *libc-psram-workaround.a:lib_a-memcmp.* *libc-psram-workaround.a:lib_a-fwalk.* *libc-psram-workaround.a:lib_a-creat.* *libc-psram-workaround.a:lib_a-strtol.* *libc-psram-workaround.a:lib_a-isalnum.* *libc-psram-workaround.a:lib_a-fclose.* *libc-psram-workaround.a:lib_a-gettzinfo.* *libc-psram-workaround.a:lib_a-strndup.* *libc-psram-workaround.a:lib_a-strrchr.* *libc-psram-workaround.a:lib_a-strspn.* *libc-psram-workaround.a:lib_a-quorem.* *libc-psram-workaround.a:lib_a-s_fpclassify.* *libc-psram-workaround.a:lib_a-ispunct.* *libc-psram-workaround.a:lib_a-rand_r.* *libc-psram-workaround.a:lib_a-tzset.* *libc-psram-workaround.a:lib_a-read.* *libc-psram-workaround.a:lib_a-isblank.* *libc-psram-workaround.a:lib_a-fvwrite.* *libc-psram-workaround.a:lib_a-strncmp.* *libc-psram-workaround.a:lib_a-asctime.* *libc-psram-workaround.a:lib_a-sf_nan.* *libc-psram-workaround.a:lib_a-abs.* *libc-psram-workaround.a:lib_a-strncasecmp.* *libc-psram-workaround.a:lib_a-iscntrl.* *libc-psram-workaround.a:lib_a-strcasecmp.* *libc-psram-workaround.a:lib_a-strcspn.* *libc-psram-workaround.a:lib_a-wctomb_r.* *libc-psram-workaround.a:lib_a-memccpy.* *libc-psram-workaround.a:lib_a-tolower.* *libc-psram-workaround.a:lib_a-asctime_r.* *libc-psram-workaround.a:lib_a-tzset_r.* *libc-psram-workaround.a:lib_a-stdio.* *libc-psram-workaround.a:lib_a-strlen.* *libc-psram-workaround.a:lib_a-sccl.* *libc-psram-workaround.a:lib_a-ungetc.* *libc-psram-workaround.a:lib_a-isdigit.* *libc-psram-workaround.a:lib_a-strlcat.* *libc-psram-workaround.a:lib_a-labs.* *libc-psram-workaround.a:lib_a-tzcalc_limits.* *libc-psram-workaround.a:lib_a-environ.* *libc-psram-workaround.a:lib_a-strdup.* *libc-psram-workaround.a:lib_a-memset.* *libc-psram-workaround.a:lib_a-tzlock.* *libc-psram-workaround.a:lib_a-strcasestr.* *libc-psram-workaround.a:lib_a-makebuf.* *libc-psram-workaround.a:lib_a-time.* *libgcov.a *libheap.a:multi_heap_poisoning.* *libheap.a:multi_heap.*) .rodata.*) + *(EXCLUDE_FILE(*libapp_trace.a *libesp32.a:panic.* *libphy.a *libsoc.a:rtc_clk.* *libc-psram-workaround.a:lib_a-isalpha.* *libc-psram-workaround.a:lib_a-isprint.* *libc-psram-workaround.a:lib_a-impure.* *libc-psram-workaround.a:lib_a-strrchr.* *libc-psram-workaround.a:lib_a-atol.* *libc-psram-workaround.a:lib_a-month_lengths.* *libc-psram-workaround.a:lib_a-fclose.* *libc-psram-workaround.a:lib_a-strtol.* *libc-psram-workaround.a:lib_a-syssbrk.* *libc-psram-workaround.a:lib_a-abs.* *libc-psram-workaround.a:lib_a-syswrite.* *libc-psram-workaround.a:lib_a-strcspn.* *libc-psram-workaround.a:lib_a-tzlock.* *libc-psram-workaround.a:lib_a-strcmp.* *libc-psram-workaround.a:lib_a-environ.* *libc-psram-workaround.a:lib_a-stdio.* *libc-psram-workaround.a:lib_a-isdigit.* *libc-psram-workaround.a:lib_a-islower.* *libc-psram-workaround.a:lib_a-systimes.* *libc-psram-workaround.a:lib_a-raise.* *libc-psram-workaround.a:lib_a-tzset.* *libc-psram-workaround.a:lib_a-ispunct.* *libc-psram-workaround.a:lib_a-time.* *libc-psram-workaround.a:lib_a-rshift.* *libc-psram-workaround.a:lib_a-tolower.* *libc-psram-workaround.a:lib_a-iscntrl.* *libc-psram-workaround.a:lib_a-gettzinfo.* *libc-psram-workaround.a:lib_a-strlcat.* *libc-psram-workaround.a:lib_a-sysclose.* *libc-psram-workaround.a:lib_a-isalnum.* *libc-psram-workaround.a:lib_a-ctime_r.* *libc-psram-workaround.a:lib_a-strncpy.* *libc-psram-workaround.a:lib_a-tzset_r.* *libc-psram-workaround.a:lib_a-lcltime.* *libc-psram-workaround.a:lib_a-read.* *libc-psram-workaround.a:lib_a-getenv_r.* *libc-psram-workaround.a:lib_a-quorem.* *libc-psram-workaround.a:lib_a-sysread.* *libc-psram-workaround.a:lib_a-memccpy.* *libc-psram-workaround.a:lib_a-isspace.* *libc-psram-workaround.a:lib_a-fflush.* *libc-psram-workaround.a:lib_a-strsep.* *libc-psram-workaround.a:lib_a-strupr.* *libc-psram-workaround.a:lib_a-strlwr.* *libc-psram-workaround.a:lib_a-ungetc.* *libc-psram-workaround.a:lib_a-isgraph.* *libc-psram-workaround.a:lib_a-strcasecmp.* *libc-psram-workaround.a:lib_a-strcpy.* *libc-psram-workaround.a:lib_a-strdup_r.* *libc-psram-workaround.a:lib_a-rand.* *libc-psram-workaround.a:lib_a-strncasecmp.* *libc-psram-workaround.a:lib_a-toupper.* *libc-psram-workaround.a:lib_a-strtoul.* *libc-psram-workaround.a:lib_a-longjmp.* *libc-psram-workaround.a:lib_a-makebuf.* *libc-psram-workaround.a:lib_a-memmove.* *libc-psram-workaround.a:lib_a-isupper.* *libc-psram-workaround.a:lib_a-isblank.* *libc-psram-workaround.a:lib_a-strdup.* *libc-psram-workaround.a:lib_a-strcat.* *libc-psram-workaround.a:lib_a-memcmp.* *libc-psram-workaround.a:lib_a-strspn.* *libc-psram-workaround.a:lib_a-strlcpy.* *libc-psram-workaround.a:lib_a-tzvars.* *libc-psram-workaround.a:lib_a-ctype_.* *libc-psram-workaround.a:creat.* *libc-psram-workaround.a:lib_a-strndup_r.* *libc-psram-workaround.a:lib_a-memchr.* *libc-psram-workaround.a:lib_a-fwalk.* *libc-psram-workaround.a:lib_a-strcasestr.* *libc-psram-workaround.a:lib_a-strcoll.* *libc-psram-workaround.a:lib_a-refill.* *libc-psram-workaround.a:lib_a-asctime_r.* *libc-psram-workaround.a:lib_a-sf_nan.* *libc-psram-workaround.a:lib_a-asctime.* *libc-psram-workaround.a:lib_a-wcrtomb.* *libc-psram-workaround.a:lib_a-envlock.* *libc-psram-workaround.a:lib_a-fvwrite.* *libc-psram-workaround.a:lib_a-srand.* *libc-psram-workaround.a:lib_a-gmtime_r.* *libc-psram-workaround.a:lib_a-lcltime_r.* *libc-psram-workaround.a:lib_a-ldiv.* *libc-psram-workaround.a:lib_a-strlen.* *libc-psram-workaround.a:lib_a-s_fpclassify.* *libc-psram-workaround.a:lib_a-sccl.* *libc-psram-workaround.a:lib_a-memset.* *libc-psram-workaround.a:lib_a-bzero.* *libc-psram-workaround.a:lib_a-strndup.* *libc-psram-workaround.a:lib_a-mktime.* *libc-psram-workaround.a:lib_a-memrchr.* *libc-psram-workaround.a:lib_a-utoa.* *libc-psram-workaround.a:lock.* *libc-psram-workaround.a:lib_a-tzcalc_limits.* *libc-psram-workaround.a:lib_a-labs.* *libc-psram-workaround.a:lib_a-strncat.* *libc-psram-workaround.a:lib_a-wsetup.* *libc-psram-workaround.a:lib_a-strnlen.* *libc-psram-workaround.a:lib_a-toascii.* *libc-psram-workaround.a:lib_a-wctomb_r.* *libc-psram-workaround.a:lib_a-strtok_r.* *libc-psram-workaround.a:lib_a-timelocal.* *libc-psram-workaround.a:lib_a-rand_r.* *libc-psram-workaround.a:lib_a-strstr.* *libc-psram-workaround.a:lib_a-sysopen.* *libc-psram-workaround.a:lib_a-wbuf.* *libc-psram-workaround.a:lib_a-close.* *libc-psram-workaround.a:lib_a-open.* *libc-psram-workaround.a:lib_a-atoi.* *libc-psram-workaround.a:lib_a-isascii.* *libc-psram-workaround.a:lib_a-system.* *libc-psram-workaround.a:lib_a-fputwc.* *libc-psram-workaround.a:lib_a-setjmp.* *libc-psram-workaround.a:lib_a-sbrk.* *libc-psram-workaround.a:lib_a-div.* *libc-psram-workaround.a:lib_a-gmtime.* *libc-psram-workaround.a:lib_a-ctime.* *libc-psram-workaround.a:isatty.* *libc-psram-workaround.a:lib_a-itoa.* *libc-psram-workaround.a:lib_a-strftime.* *libc-psram-workaround.a:lib_a-strncmp.* *libc-psram-workaround.a:lib_a-creat.* *libc-psram-workaround.a:lib_a-strptime.* *libc-psram-workaround.a:lib_a-strchr.* *libc-psram-workaround.a:lib_a-memcpy.* *libc-psram-workaround.a:lib_a-findfp.* *libgcov.a *libheap.a:multi_heap.* *libheap.a:multi_heap_poisoning.*) .rodata EXCLUDE_FILE(*libapp_trace.a *libesp32.a:panic.* *libphy.a *libsoc.a:rtc_clk.* *libc-psram-workaround.a:lib_a-isalpha.* *libc-psram-workaround.a:lib_a-isprint.* *libc-psram-workaround.a:lib_a-impure.* *libc-psram-workaround.a:lib_a-strrchr.* *libc-psram-workaround.a:lib_a-atol.* *libc-psram-workaround.a:lib_a-month_lengths.* *libc-psram-workaround.a:lib_a-fclose.* *libc-psram-workaround.a:lib_a-strtol.* *libc-psram-workaround.a:lib_a-syssbrk.* *libc-psram-workaround.a:lib_a-abs.* *libc-psram-workaround.a:lib_a-syswrite.* *libc-psram-workaround.a:lib_a-strcspn.* *libc-psram-workaround.a:lib_a-tzlock.* *libc-psram-workaround.a:lib_a-strcmp.* *libc-psram-workaround.a:lib_a-environ.* *libc-psram-workaround.a:lib_a-stdio.* *libc-psram-workaround.a:lib_a-isdigit.* *libc-psram-workaround.a:lib_a-islower.* *libc-psram-workaround.a:lib_a-systimes.* *libc-psram-workaround.a:lib_a-raise.* *libc-psram-workaround.a:lib_a-tzset.* *libc-psram-workaround.a:lib_a-ispunct.* *libc-psram-workaround.a:lib_a-time.* *libc-psram-workaround.a:lib_a-rshift.* *libc-psram-workaround.a:lib_a-tolower.* *libc-psram-workaround.a:lib_a-iscntrl.* *libc-psram-workaround.a:lib_a-gettzinfo.* *libc-psram-workaround.a:lib_a-strlcat.* *libc-psram-workaround.a:lib_a-sysclose.* *libc-psram-workaround.a:lib_a-isalnum.* *libc-psram-workaround.a:lib_a-ctime_r.* *libc-psram-workaround.a:lib_a-strncpy.* *libc-psram-workaround.a:lib_a-tzset_r.* *libc-psram-workaround.a:lib_a-lcltime.* *libc-psram-workaround.a:lib_a-read.* *libc-psram-workaround.a:lib_a-getenv_r.* *libc-psram-workaround.a:lib_a-quorem.* *libc-psram-workaround.a:lib_a-sysread.* *libc-psram-workaround.a:lib_a-memccpy.* *libc-psram-workaround.a:lib_a-isspace.* *libc-psram-workaround.a:lib_a-fflush.* *libc-psram-workaround.a:lib_a-strsep.* *libc-psram-workaround.a:lib_a-strupr.* *libc-psram-workaround.a:lib_a-strlwr.* *libc-psram-workaround.a:lib_a-ungetc.* *libc-psram-workaround.a:lib_a-isgraph.* *libc-psram-workaround.a:lib_a-strcasecmp.* *libc-psram-workaround.a:lib_a-strcpy.* *libc-psram-workaround.a:lib_a-strdup_r.* *libc-psram-workaround.a:lib_a-rand.* *libc-psram-workaround.a:lib_a-strncasecmp.* *libc-psram-workaround.a:lib_a-toupper.* *libc-psram-workaround.a:lib_a-strtoul.* *libc-psram-workaround.a:lib_a-longjmp.* *libc-psram-workaround.a:lib_a-makebuf.* *libc-psram-workaround.a:lib_a-memmove.* *libc-psram-workaround.a:lib_a-isupper.* *libc-psram-workaround.a:lib_a-isblank.* *libc-psram-workaround.a:lib_a-strdup.* *libc-psram-workaround.a:lib_a-strcat.* *libc-psram-workaround.a:lib_a-memcmp.* *libc-psram-workaround.a:lib_a-strspn.* *libc-psram-workaround.a:lib_a-strlcpy.* *libc-psram-workaround.a:lib_a-tzvars.* *libc-psram-workaround.a:lib_a-ctype_.* *libc-psram-workaround.a:creat.* *libc-psram-workaround.a:lib_a-strndup_r.* *libc-psram-workaround.a:lib_a-memchr.* *libc-psram-workaround.a:lib_a-fwalk.* *libc-psram-workaround.a:lib_a-strcasestr.* *libc-psram-workaround.a:lib_a-strcoll.* *libc-psram-workaround.a:lib_a-refill.* *libc-psram-workaround.a:lib_a-asctime_r.* *libc-psram-workaround.a:lib_a-sf_nan.* *libc-psram-workaround.a:lib_a-asctime.* *libc-psram-workaround.a:lib_a-wcrtomb.* *libc-psram-workaround.a:lib_a-envlock.* *libc-psram-workaround.a:lib_a-fvwrite.* *libc-psram-workaround.a:lib_a-srand.* *libc-psram-workaround.a:lib_a-gmtime_r.* *libc-psram-workaround.a:lib_a-lcltime_r.* *libc-psram-workaround.a:lib_a-ldiv.* *libc-psram-workaround.a:lib_a-strlen.* *libc-psram-workaround.a:lib_a-s_fpclassify.* *libc-psram-workaround.a:lib_a-sccl.* *libc-psram-workaround.a:lib_a-memset.* *libc-psram-workaround.a:lib_a-bzero.* *libc-psram-workaround.a:lib_a-strndup.* *libc-psram-workaround.a:lib_a-mktime.* *libc-psram-workaround.a:lib_a-memrchr.* *libc-psram-workaround.a:lib_a-utoa.* *libc-psram-workaround.a:lock.* *libc-psram-workaround.a:lib_a-tzcalc_limits.* *libc-psram-workaround.a:lib_a-labs.* *libc-psram-workaround.a:lib_a-strncat.* *libc-psram-workaround.a:lib_a-wsetup.* *libc-psram-workaround.a:lib_a-strnlen.* *libc-psram-workaround.a:lib_a-toascii.* *libc-psram-workaround.a:lib_a-wctomb_r.* *libc-psram-workaround.a:lib_a-strtok_r.* *libc-psram-workaround.a:lib_a-timelocal.* *libc-psram-workaround.a:lib_a-rand_r.* *libc-psram-workaround.a:lib_a-strstr.* *libc-psram-workaround.a:lib_a-sysopen.* *libc-psram-workaround.a:lib_a-wbuf.* *libc-psram-workaround.a:lib_a-close.* *libc-psram-workaround.a:lib_a-open.* *libc-psram-workaround.a:lib_a-atoi.* *libc-psram-workaround.a:lib_a-isascii.* *libc-psram-workaround.a:lib_a-system.* *libc-psram-workaround.a:lib_a-fputwc.* *libc-psram-workaround.a:lib_a-setjmp.* *libc-psram-workaround.a:lib_a-sbrk.* *libc-psram-workaround.a:lib_a-div.* *libc-psram-workaround.a:lib_a-gmtime.* *libc-psram-workaround.a:lib_a-ctime.* *libc-psram-workaround.a:isatty.* *libc-psram-workaround.a:lib_a-itoa.* *libc-psram-workaround.a:lib_a-strftime.* *libc-psram-workaround.a:lib_a-strncmp.* *libc-psram-workaround.a:lib_a-creat.* *libc-psram-workaround.a:lib_a-strptime.* *libc-psram-workaround.a:lib_a-strchr.* *libc-psram-workaround.a:lib_a-memcpy.* *libc-psram-workaround.a:lib_a-findfp.* *libgcov.a *libheap.a:multi_heap.* *libheap.a:multi_heap_poisoning.*) .rodata.*) *(.irom1.text) /* catch stray ICACHE_RODATA_ATTR */ *(.gnu.linkonce.r.*) @@ -599,7 +599,7 @@ SECTIONS _stext = .; _text_start = ABSOLUTE(.); - *(EXCLUDE_FILE(*libspi_flash.a:spi_flash_rom_patch.* *libesp_ringbuf.a *libhal.a *libapp_trace.a *libesp32.a:panic.* *libespcoredump.a:core_dump_common.* *libespcoredump.a:core_dump_uart.* *libespcoredump.a:core_dump_flash.* *libespcoredump.a:core_dump_port.* *librtc.a *libgcc.a:lib2funcs.* *libsoc.a:rtc_periph.* *libsoc.a:rtc_wdt.* *libsoc.a:rtc_pm.* *libsoc.a:rtc_init.* *libsoc.a:rtc_clk.* *libsoc.a:rtc_clk_init.* *libsoc.a:rtc_sleep.* *libsoc.a:cpu_util.* *libsoc.a:rtc_time.* *libc-psram-workaround.a:lock.* *libc-psram-workaround.a:lib_a-ctype_.* *libc-psram-workaround.a:lib_a-div.* *libc-psram-workaround.a:lib_a-systimes.* *libc-psram-workaround.a:lib_a-findfp.* *libc-psram-workaround.a:lib_a-strptime.* *libc-psram-workaround.a:lib_a-strlwr.* *libc-psram-workaround.a:lib_a-lcltime.* *libc-psram-workaround.a:lib_a-strupr.* *libc-psram-workaround.a:lib_a-fflush.* *libc-psram-workaround.a:lib_a-ctime.* *libc-psram-workaround.a:lib_a-rand.* *libc-psram-workaround.a:lib_a-impure.* *libc-psram-workaround.a:lib_a-syswrite.* *libc-psram-workaround.a:lib_a-isprint.* *libc-psram-workaround.a:lib_a-memmove.* *libc-psram-workaround.a:lib_a-strstr.* *libc-psram-workaround.a:lib_a-strtok_r.* *libc-psram-workaround.a:lib_a-fputwc.* *libc-psram-workaround.a:lib_a-strcpy.* *libc-psram-workaround.a:lib_a-utoa.* *libc-psram-workaround.a:lib_a-open.* *libc-psram-workaround.a:lib_a-memrchr.* *libc-psram-workaround.a:lib_a-itoa.* *libc-psram-workaround.a:lib_a-strsep.* *libc-psram-workaround.a:lib_a-strtoul.* *libc-psram-workaround.a:lib_a-toupper.* *libc-psram-workaround.a:lib_a-sysopen.* *libc-psram-workaround.a:lib_a-strdup_r.* *libc-psram-workaround.a:lib_a-strlcpy.* *libc-psram-workaround.a:lib_a-timelocal.* *libc-psram-workaround.a:lib_a-sbrk.* *libc-psram-workaround.a:lib_a-longjmp.* *libc-psram-workaround.a:lib_a-sysread.* *libc-psram-workaround.a:lib_a-syssbrk.* *libc-psram-workaround.a:lib_a-isgraph.* *libc-psram-workaround.a:lib_a-strnlen.* *libc-psram-workaround.a:lib_a-envlock.* *libc-psram-workaround.a:creat.* *libc-psram-workaround.a:lib_a-atoi.* *libc-psram-workaround.a:lib_a-refill.* *libc-psram-workaround.a:lib_a-memchr.* *libc-psram-workaround.a:lib_a-strchr.* *libc-psram-workaround.a:lib_a-system.* *libc-psram-workaround.a:lib_a-isspace.* *libc-psram-workaround.a:lib_a-getenv_r.* *libc-psram-workaround.a:lib_a-ldiv.* *libc-psram-workaround.a:lib_a-atol.* *libc-psram-workaround.a:lib_a-raise.* *libc-psram-workaround.a:lib_a-strncpy.* *libc-psram-workaround.a:lib_a-islower.* *libc-psram-workaround.a:lib_a-close.* *libc-psram-workaround.a:lib_a-wsetup.* *libc-psram-workaround.a:lib_a-isupper.* *libc-psram-workaround.a:lib_a-strftime.* *libc-psram-workaround.a:lib_a-strncat.* *libc-psram-workaround.a:lib_a-month_lengths.* *libc-psram-workaround.a:lib_a-bzero.* *libc-psram-workaround.a:lib_a-strcat.* *libc-psram-workaround.a:lib_a-srand.* *libc-psram-workaround.a:lib_a-setjmp.* *libc-psram-workaround.a:lib_a-sysclose.* *libc-psram-workaround.a:lib_a-memcpy.* *libc-psram-workaround.a:lib_a-isascii.* *libc-psram-workaround.a:lib_a-ctime_r.* *libc-psram-workaround.a:lib_a-mktime.* *libc-psram-workaround.a:lib_a-wbuf.* *libc-psram-workaround.a:isatty.* *libc-psram-workaround.a:lib_a-gmtime_r.* *libc-psram-workaround.a:lib_a-gmtime.* *libc-psram-workaround.a:lib_a-strndup_r.* *libc-psram-workaround.a:lib_a-strcoll.* *libc-psram-workaround.a:lib_a-tzvars.* *libc-psram-workaround.a:lib_a-wcrtomb.* *libc-psram-workaround.a:lib_a-isalpha.* *libc-psram-workaround.a:lib_a-lcltime_r.* *libc-psram-workaround.a:lib_a-toascii.* *libc-psram-workaround.a:lib_a-rshift.* *libc-psram-workaround.a:lib_a-strcmp.* *libc-psram-workaround.a:lib_a-memcmp.* *libc-psram-workaround.a:lib_a-fwalk.* *libc-psram-workaround.a:lib_a-creat.* *libc-psram-workaround.a:lib_a-strtol.* *libc-psram-workaround.a:lib_a-isalnum.* *libc-psram-workaround.a:lib_a-fclose.* *libc-psram-workaround.a:lib_a-gettzinfo.* *libc-psram-workaround.a:lib_a-strndup.* *libc-psram-workaround.a:lib_a-strrchr.* *libc-psram-workaround.a:lib_a-strspn.* *libc-psram-workaround.a:lib_a-quorem.* *libc-psram-workaround.a:lib_a-s_fpclassify.* *libc-psram-workaround.a:lib_a-ispunct.* *libc-psram-workaround.a:lib_a-rand_r.* *libc-psram-workaround.a:lib_a-tzset.* *libc-psram-workaround.a:lib_a-read.* *libc-psram-workaround.a:lib_a-isblank.* *libc-psram-workaround.a:lib_a-fvwrite.* *libc-psram-workaround.a:lib_a-strncmp.* *libc-psram-workaround.a:lib_a-asctime.* *libc-psram-workaround.a:lib_a-sf_nan.* *libc-psram-workaround.a:lib_a-abs.* *libc-psram-workaround.a:lib_a-strncasecmp.* *libc-psram-workaround.a:lib_a-iscntrl.* *libc-psram-workaround.a:lib_a-strcasecmp.* *libc-psram-workaround.a:lib_a-strcspn.* *libc-psram-workaround.a:lib_a-wctomb_r.* *libc-psram-workaround.a:lib_a-memccpy.* *libc-psram-workaround.a:lib_a-tolower.* *libc-psram-workaround.a:lib_a-asctime_r.* *libc-psram-workaround.a:lib_a-tzset_r.* *libc-psram-workaround.a:lib_a-stdio.* *libc-psram-workaround.a:lib_a-strlen.* *libc-psram-workaround.a:lib_a-sccl.* *libc-psram-workaround.a:lib_a-ungetc.* *libc-psram-workaround.a:lib_a-isdigit.* *libc-psram-workaround.a:lib_a-strlcat.* *libc-psram-workaround.a:lib_a-labs.* *libc-psram-workaround.a:lib_a-tzcalc_limits.* *libc-psram-workaround.a:lib_a-environ.* *libc-psram-workaround.a:lib_a-strdup.* *libc-psram-workaround.a:lib_a-memset.* *libc-psram-workaround.a:lib_a-tzlock.* *libc-psram-workaround.a:lib_a-strcasestr.* *libc-psram-workaround.a:lib_a-makebuf.* *libc-psram-workaround.a:lib_a-time.* *libfreertos.a *libgcov.a *libxtensa-debug-module.a:eri.* *libheap.a:multi_heap_poisoning.* *libheap.a:multi_heap.*) .literal EXCLUDE_FILE(*libspi_flash.a:spi_flash_rom_patch.* *libesp_ringbuf.a *libhal.a *libapp_trace.a *libesp32.a:panic.* *libespcoredump.a:core_dump_common.* *libespcoredump.a:core_dump_uart.* *libespcoredump.a:core_dump_flash.* *libespcoredump.a:core_dump_port.* *librtc.a *libgcc.a:lib2funcs.* *libsoc.a:rtc_periph.* *libsoc.a:rtc_wdt.* *libsoc.a:rtc_pm.* *libsoc.a:rtc_init.* *libsoc.a:rtc_clk.* *libsoc.a:rtc_clk_init.* *libsoc.a:rtc_sleep.* *libsoc.a:cpu_util.* *libsoc.a:rtc_time.* *libc-psram-workaround.a:lock.* *libc-psram-workaround.a:lib_a-ctype_.* *libc-psram-workaround.a:lib_a-div.* *libc-psram-workaround.a:lib_a-systimes.* *libc-psram-workaround.a:lib_a-findfp.* *libc-psram-workaround.a:lib_a-strptime.* *libc-psram-workaround.a:lib_a-strlwr.* *libc-psram-workaround.a:lib_a-lcltime.* *libc-psram-workaround.a:lib_a-strupr.* *libc-psram-workaround.a:lib_a-fflush.* *libc-psram-workaround.a:lib_a-ctime.* *libc-psram-workaround.a:lib_a-rand.* *libc-psram-workaround.a:lib_a-impure.* *libc-psram-workaround.a:lib_a-syswrite.* *libc-psram-workaround.a:lib_a-isprint.* *libc-psram-workaround.a:lib_a-memmove.* *libc-psram-workaround.a:lib_a-strstr.* *libc-psram-workaround.a:lib_a-strtok_r.* *libc-psram-workaround.a:lib_a-fputwc.* *libc-psram-workaround.a:lib_a-strcpy.* *libc-psram-workaround.a:lib_a-utoa.* *libc-psram-workaround.a:lib_a-open.* *libc-psram-workaround.a:lib_a-memrchr.* *libc-psram-workaround.a:lib_a-itoa.* *libc-psram-workaround.a:lib_a-strsep.* *libc-psram-workaround.a:lib_a-strtoul.* *libc-psram-workaround.a:lib_a-toupper.* *libc-psram-workaround.a:lib_a-sysopen.* *libc-psram-workaround.a:lib_a-strdup_r.* *libc-psram-workaround.a:lib_a-strlcpy.* *libc-psram-workaround.a:lib_a-timelocal.* *libc-psram-workaround.a:lib_a-sbrk.* *libc-psram-workaround.a:lib_a-longjmp.* *libc-psram-workaround.a:lib_a-sysread.* *libc-psram-workaround.a:lib_a-syssbrk.* *libc-psram-workaround.a:lib_a-isgraph.* *libc-psram-workaround.a:lib_a-strnlen.* *libc-psram-workaround.a:lib_a-envlock.* *libc-psram-workaround.a:creat.* *libc-psram-workaround.a:lib_a-atoi.* *libc-psram-workaround.a:lib_a-refill.* *libc-psram-workaround.a:lib_a-memchr.* *libc-psram-workaround.a:lib_a-strchr.* *libc-psram-workaround.a:lib_a-system.* *libc-psram-workaround.a:lib_a-isspace.* *libc-psram-workaround.a:lib_a-getenv_r.* *libc-psram-workaround.a:lib_a-ldiv.* *libc-psram-workaround.a:lib_a-atol.* *libc-psram-workaround.a:lib_a-raise.* *libc-psram-workaround.a:lib_a-strncpy.* *libc-psram-workaround.a:lib_a-islower.* *libc-psram-workaround.a:lib_a-close.* *libc-psram-workaround.a:lib_a-wsetup.* *libc-psram-workaround.a:lib_a-isupper.* *libc-psram-workaround.a:lib_a-strftime.* *libc-psram-workaround.a:lib_a-strncat.* *libc-psram-workaround.a:lib_a-month_lengths.* *libc-psram-workaround.a:lib_a-bzero.* *libc-psram-workaround.a:lib_a-strcat.* *libc-psram-workaround.a:lib_a-srand.* *libc-psram-workaround.a:lib_a-setjmp.* *libc-psram-workaround.a:lib_a-sysclose.* *libc-psram-workaround.a:lib_a-memcpy.* *libc-psram-workaround.a:lib_a-isascii.* *libc-psram-workaround.a:lib_a-ctime_r.* *libc-psram-workaround.a:lib_a-mktime.* *libc-psram-workaround.a:lib_a-wbuf.* *libc-psram-workaround.a:isatty.* *libc-psram-workaround.a:lib_a-gmtime_r.* *libc-psram-workaround.a:lib_a-gmtime.* *libc-psram-workaround.a:lib_a-strndup_r.* *libc-psram-workaround.a:lib_a-strcoll.* *libc-psram-workaround.a:lib_a-tzvars.* *libc-psram-workaround.a:lib_a-wcrtomb.* *libc-psram-workaround.a:lib_a-isalpha.* *libc-psram-workaround.a:lib_a-lcltime_r.* *libc-psram-workaround.a:lib_a-toascii.* *libc-psram-workaround.a:lib_a-rshift.* *libc-psram-workaround.a:lib_a-strcmp.* *libc-psram-workaround.a:lib_a-memcmp.* *libc-psram-workaround.a:lib_a-fwalk.* *libc-psram-workaround.a:lib_a-creat.* *libc-psram-workaround.a:lib_a-strtol.* *libc-psram-workaround.a:lib_a-isalnum.* *libc-psram-workaround.a:lib_a-fclose.* *libc-psram-workaround.a:lib_a-gettzinfo.* *libc-psram-workaround.a:lib_a-strndup.* *libc-psram-workaround.a:lib_a-strrchr.* *libc-psram-workaround.a:lib_a-strspn.* *libc-psram-workaround.a:lib_a-quorem.* *libc-psram-workaround.a:lib_a-s_fpclassify.* *libc-psram-workaround.a:lib_a-ispunct.* *libc-psram-workaround.a:lib_a-rand_r.* *libc-psram-workaround.a:lib_a-tzset.* *libc-psram-workaround.a:lib_a-read.* *libc-psram-workaround.a:lib_a-isblank.* *libc-psram-workaround.a:lib_a-fvwrite.* *libc-psram-workaround.a:lib_a-strncmp.* *libc-psram-workaround.a:lib_a-asctime.* *libc-psram-workaround.a:lib_a-sf_nan.* *libc-psram-workaround.a:lib_a-abs.* *libc-psram-workaround.a:lib_a-strncasecmp.* *libc-psram-workaround.a:lib_a-iscntrl.* *libc-psram-workaround.a:lib_a-strcasecmp.* *libc-psram-workaround.a:lib_a-strcspn.* *libc-psram-workaround.a:lib_a-wctomb_r.* *libc-psram-workaround.a:lib_a-memccpy.* *libc-psram-workaround.a:lib_a-tolower.* *libc-psram-workaround.a:lib_a-asctime_r.* *libc-psram-workaround.a:lib_a-tzset_r.* *libc-psram-workaround.a:lib_a-stdio.* *libc-psram-workaround.a:lib_a-strlen.* *libc-psram-workaround.a:lib_a-sccl.* *libc-psram-workaround.a:lib_a-ungetc.* *libc-psram-workaround.a:lib_a-isdigit.* *libc-psram-workaround.a:lib_a-strlcat.* *libc-psram-workaround.a:lib_a-labs.* *libc-psram-workaround.a:lib_a-tzcalc_limits.* *libc-psram-workaround.a:lib_a-environ.* *libc-psram-workaround.a:lib_a-strdup.* *libc-psram-workaround.a:lib_a-memset.* *libc-psram-workaround.a:lib_a-tzlock.* *libc-psram-workaround.a:lib_a-strcasestr.* *libc-psram-workaround.a:lib_a-makebuf.* *libc-psram-workaround.a:lib_a-time.* *libfreertos.a *libgcov.a *libxtensa-debug-module.a:eri.* *libheap.a:multi_heap_poisoning.* *libheap.a:multi_heap.*) .literal.* EXCLUDE_FILE(*libspi_flash.a:spi_flash_rom_patch.* *libesp_ringbuf.a *libhal.a *libapp_trace.a *libesp32.a:panic.* *libespcoredump.a:core_dump_common.* *libespcoredump.a:core_dump_uart.* *libespcoredump.a:core_dump_flash.* *libespcoredump.a:core_dump_port.* *librtc.a *libgcc.a:lib2funcs.* *libsoc.a:rtc_periph.* *libsoc.a:rtc_wdt.* *libsoc.a:rtc_pm.* *libsoc.a:rtc_init.* *libsoc.a:rtc_clk.* *libsoc.a:rtc_clk_init.* *libsoc.a:rtc_sleep.* *libsoc.a:cpu_util.* *libsoc.a:rtc_time.* *libc-psram-workaround.a:lock.* *libc-psram-workaround.a:lib_a-ctype_.* *libc-psram-workaround.a:lib_a-div.* *libc-psram-workaround.a:lib_a-systimes.* *libc-psram-workaround.a:lib_a-findfp.* *libc-psram-workaround.a:lib_a-strptime.* *libc-psram-workaround.a:lib_a-strlwr.* *libc-psram-workaround.a:lib_a-lcltime.* *libc-psram-workaround.a:lib_a-strupr.* *libc-psram-workaround.a:lib_a-fflush.* *libc-psram-workaround.a:lib_a-ctime.* *libc-psram-workaround.a:lib_a-rand.* *libc-psram-workaround.a:lib_a-impure.* *libc-psram-workaround.a:lib_a-syswrite.* *libc-psram-workaround.a:lib_a-isprint.* *libc-psram-workaround.a:lib_a-memmove.* *libc-psram-workaround.a:lib_a-strstr.* *libc-psram-workaround.a:lib_a-strtok_r.* *libc-psram-workaround.a:lib_a-fputwc.* *libc-psram-workaround.a:lib_a-strcpy.* *libc-psram-workaround.a:lib_a-utoa.* *libc-psram-workaround.a:lib_a-open.* *libc-psram-workaround.a:lib_a-memrchr.* *libc-psram-workaround.a:lib_a-itoa.* *libc-psram-workaround.a:lib_a-strsep.* *libc-psram-workaround.a:lib_a-strtoul.* *libc-psram-workaround.a:lib_a-toupper.* *libc-psram-workaround.a:lib_a-sysopen.* *libc-psram-workaround.a:lib_a-strdup_r.* *libc-psram-workaround.a:lib_a-strlcpy.* *libc-psram-workaround.a:lib_a-timelocal.* *libc-psram-workaround.a:lib_a-sbrk.* *libc-psram-workaround.a:lib_a-longjmp.* *libc-psram-workaround.a:lib_a-sysread.* *libc-psram-workaround.a:lib_a-syssbrk.* *libc-psram-workaround.a:lib_a-isgraph.* *libc-psram-workaround.a:lib_a-strnlen.* *libc-psram-workaround.a:lib_a-envlock.* *libc-psram-workaround.a:creat.* *libc-psram-workaround.a:lib_a-atoi.* *libc-psram-workaround.a:lib_a-refill.* *libc-psram-workaround.a:lib_a-memchr.* *libc-psram-workaround.a:lib_a-strchr.* *libc-psram-workaround.a:lib_a-system.* *libc-psram-workaround.a:lib_a-isspace.* *libc-psram-workaround.a:lib_a-getenv_r.* *libc-psram-workaround.a:lib_a-ldiv.* *libc-psram-workaround.a:lib_a-atol.* *libc-psram-workaround.a:lib_a-raise.* *libc-psram-workaround.a:lib_a-strncpy.* *libc-psram-workaround.a:lib_a-islower.* *libc-psram-workaround.a:lib_a-close.* *libc-psram-workaround.a:lib_a-wsetup.* *libc-psram-workaround.a:lib_a-isupper.* *libc-psram-workaround.a:lib_a-strftime.* *libc-psram-workaround.a:lib_a-strncat.* *libc-psram-workaround.a:lib_a-month_lengths.* *libc-psram-workaround.a:lib_a-bzero.* *libc-psram-workaround.a:lib_a-strcat.* *libc-psram-workaround.a:lib_a-srand.* *libc-psram-workaround.a:lib_a-setjmp.* *libc-psram-workaround.a:lib_a-sysclose.* *libc-psram-workaround.a:lib_a-memcpy.* *libc-psram-workaround.a:lib_a-isascii.* *libc-psram-workaround.a:lib_a-ctime_r.* *libc-psram-workaround.a:lib_a-mktime.* *libc-psram-workaround.a:lib_a-wbuf.* *libc-psram-workaround.a:isatty.* *libc-psram-workaround.a:lib_a-gmtime_r.* *libc-psram-workaround.a:lib_a-gmtime.* *libc-psram-workaround.a:lib_a-strndup_r.* *libc-psram-workaround.a:lib_a-strcoll.* *libc-psram-workaround.a:lib_a-tzvars.* *libc-psram-workaround.a:lib_a-wcrtomb.* *libc-psram-workaround.a:lib_a-isalpha.* *libc-psram-workaround.a:lib_a-lcltime_r.* *libc-psram-workaround.a:lib_a-toascii.* *libc-psram-workaround.a:lib_a-rshift.* *libc-psram-workaround.a:lib_a-strcmp.* *libc-psram-workaround.a:lib_a-memcmp.* *libc-psram-workaround.a:lib_a-fwalk.* *libc-psram-workaround.a:lib_a-creat.* *libc-psram-workaround.a:lib_a-strtol.* *libc-psram-workaround.a:lib_a-isalnum.* *libc-psram-workaround.a:lib_a-fclose.* *libc-psram-workaround.a:lib_a-gettzinfo.* *libc-psram-workaround.a:lib_a-strndup.* *libc-psram-workaround.a:lib_a-strrchr.* *libc-psram-workaround.a:lib_a-strspn.* *libc-psram-workaround.a:lib_a-quorem.* *libc-psram-workaround.a:lib_a-s_fpclassify.* *libc-psram-workaround.a:lib_a-ispunct.* *libc-psram-workaround.a:lib_a-rand_r.* *libc-psram-workaround.a:lib_a-tzset.* *libc-psram-workaround.a:lib_a-read.* *libc-psram-workaround.a:lib_a-isblank.* *libc-psram-workaround.a:lib_a-fvwrite.* *libc-psram-workaround.a:lib_a-strncmp.* *libc-psram-workaround.a:lib_a-asctime.* *libc-psram-workaround.a:lib_a-sf_nan.* *libc-psram-workaround.a:lib_a-abs.* *libc-psram-workaround.a:lib_a-strncasecmp.* *libc-psram-workaround.a:lib_a-iscntrl.* *libc-psram-workaround.a:lib_a-strcasecmp.* *libc-psram-workaround.a:lib_a-strcspn.* *libc-psram-workaround.a:lib_a-wctomb_r.* *libc-psram-workaround.a:lib_a-memccpy.* *libc-psram-workaround.a:lib_a-tolower.* *libc-psram-workaround.a:lib_a-asctime_r.* *libc-psram-workaround.a:lib_a-tzset_r.* *libc-psram-workaround.a:lib_a-stdio.* *libc-psram-workaround.a:lib_a-strlen.* *libc-psram-workaround.a:lib_a-sccl.* *libc-psram-workaround.a:lib_a-ungetc.* *libc-psram-workaround.a:lib_a-isdigit.* *libc-psram-workaround.a:lib_a-strlcat.* *libc-psram-workaround.a:lib_a-labs.* *libc-psram-workaround.a:lib_a-tzcalc_limits.* *libc-psram-workaround.a:lib_a-environ.* *libc-psram-workaround.a:lib_a-strdup.* *libc-psram-workaround.a:lib_a-memset.* *libc-psram-workaround.a:lib_a-tzlock.* *libc-psram-workaround.a:lib_a-strcasestr.* *libc-psram-workaround.a:lib_a-makebuf.* *libc-psram-workaround.a:lib_a-time.* *libfreertos.a *libgcov.a *libxtensa-debug-module.a:eri.* *libheap.a:multi_heap_poisoning.* *libheap.a:multi_heap.*) .text EXCLUDE_FILE(*libspi_flash.a:spi_flash_rom_patch.* *libesp_ringbuf.a *libhal.a *libapp_trace.a *libesp32.a:panic.* *libespcoredump.a:core_dump_common.* *libespcoredump.a:core_dump_uart.* *libespcoredump.a:core_dump_flash.* *libespcoredump.a:core_dump_port.* *librtc.a *libgcc.a:lib2funcs.* *libsoc.a:rtc_periph.* *libsoc.a:rtc_wdt.* *libsoc.a:rtc_pm.* *libsoc.a:rtc_init.* *libsoc.a:rtc_clk.* *libsoc.a:rtc_clk_init.* *libsoc.a:rtc_sleep.* *libsoc.a:cpu_util.* *libsoc.a:rtc_time.* *libc-psram-workaround.a:lock.* *libc-psram-workaround.a:lib_a-ctype_.* *libc-psram-workaround.a:lib_a-div.* *libc-psram-workaround.a:lib_a-systimes.* *libc-psram-workaround.a:lib_a-findfp.* *libc-psram-workaround.a:lib_a-strptime.* *libc-psram-workaround.a:lib_a-strlwr.* *libc-psram-workaround.a:lib_a-lcltime.* *libc-psram-workaround.a:lib_a-strupr.* *libc-psram-workaround.a:lib_a-fflush.* *libc-psram-workaround.a:lib_a-ctime.* *libc-psram-workaround.a:lib_a-rand.* *libc-psram-workaround.a:lib_a-impure.* *libc-psram-workaround.a:lib_a-syswrite.* *libc-psram-workaround.a:lib_a-isprint.* *libc-psram-workaround.a:lib_a-memmove.* *libc-psram-workaround.a:lib_a-strstr.* *libc-psram-workaround.a:lib_a-strtok_r.* *libc-psram-workaround.a:lib_a-fputwc.* *libc-psram-workaround.a:lib_a-strcpy.* *libc-psram-workaround.a:lib_a-utoa.* *libc-psram-workaround.a:lib_a-open.* *libc-psram-workaround.a:lib_a-memrchr.* *libc-psram-workaround.a:lib_a-itoa.* *libc-psram-workaround.a:lib_a-strsep.* *libc-psram-workaround.a:lib_a-strtoul.* *libc-psram-workaround.a:lib_a-toupper.* *libc-psram-workaround.a:lib_a-sysopen.* *libc-psram-workaround.a:lib_a-strdup_r.* *libc-psram-workaround.a:lib_a-strlcpy.* *libc-psram-workaround.a:lib_a-timelocal.* *libc-psram-workaround.a:lib_a-sbrk.* *libc-psram-workaround.a:lib_a-longjmp.* *libc-psram-workaround.a:lib_a-sysread.* *libc-psram-workaround.a:lib_a-syssbrk.* *libc-psram-workaround.a:lib_a-isgraph.* *libc-psram-workaround.a:lib_a-strnlen.* *libc-psram-workaround.a:lib_a-envlock.* *libc-psram-workaround.a:creat.* *libc-psram-workaround.a:lib_a-atoi.* *libc-psram-workaround.a:lib_a-refill.* *libc-psram-workaround.a:lib_a-memchr.* *libc-psram-workaround.a:lib_a-strchr.* *libc-psram-workaround.a:lib_a-system.* *libc-psram-workaround.a:lib_a-isspace.* *libc-psram-workaround.a:lib_a-getenv_r.* *libc-psram-workaround.a:lib_a-ldiv.* *libc-psram-workaround.a:lib_a-atol.* *libc-psram-workaround.a:lib_a-raise.* *libc-psram-workaround.a:lib_a-strncpy.* *libc-psram-workaround.a:lib_a-islower.* *libc-psram-workaround.a:lib_a-close.* *libc-psram-workaround.a:lib_a-wsetup.* *libc-psram-workaround.a:lib_a-isupper.* *libc-psram-workaround.a:lib_a-strftime.* *libc-psram-workaround.a:lib_a-strncat.* *libc-psram-workaround.a:lib_a-month_lengths.* *libc-psram-workaround.a:lib_a-bzero.* *libc-psram-workaround.a:lib_a-strcat.* *libc-psram-workaround.a:lib_a-srand.* *libc-psram-workaround.a:lib_a-setjmp.* *libc-psram-workaround.a:lib_a-sysclose.* *libc-psram-workaround.a:lib_a-memcpy.* *libc-psram-workaround.a:lib_a-isascii.* *libc-psram-workaround.a:lib_a-ctime_r.* *libc-psram-workaround.a:lib_a-mktime.* *libc-psram-workaround.a:lib_a-wbuf.* *libc-psram-workaround.a:isatty.* *libc-psram-workaround.a:lib_a-gmtime_r.* *libc-psram-workaround.a:lib_a-gmtime.* *libc-psram-workaround.a:lib_a-strndup_r.* *libc-psram-workaround.a:lib_a-strcoll.* *libc-psram-workaround.a:lib_a-tzvars.* *libc-psram-workaround.a:lib_a-wcrtomb.* *libc-psram-workaround.a:lib_a-isalpha.* *libc-psram-workaround.a:lib_a-lcltime_r.* *libc-psram-workaround.a:lib_a-toascii.* *libc-psram-workaround.a:lib_a-rshift.* *libc-psram-workaround.a:lib_a-strcmp.* *libc-psram-workaround.a:lib_a-memcmp.* *libc-psram-workaround.a:lib_a-fwalk.* *libc-psram-workaround.a:lib_a-creat.* *libc-psram-workaround.a:lib_a-strtol.* *libc-psram-workaround.a:lib_a-isalnum.* *libc-psram-workaround.a:lib_a-fclose.* *libc-psram-workaround.a:lib_a-gettzinfo.* *libc-psram-workaround.a:lib_a-strndup.* *libc-psram-workaround.a:lib_a-strrchr.* *libc-psram-workaround.a:lib_a-strspn.* *libc-psram-workaround.a:lib_a-quorem.* *libc-psram-workaround.a:lib_a-s_fpclassify.* *libc-psram-workaround.a:lib_a-ispunct.* *libc-psram-workaround.a:lib_a-rand_r.* *libc-psram-workaround.a:lib_a-tzset.* *libc-psram-workaround.a:lib_a-read.* *libc-psram-workaround.a:lib_a-isblank.* *libc-psram-workaround.a:lib_a-fvwrite.* *libc-psram-workaround.a:lib_a-strncmp.* *libc-psram-workaround.a:lib_a-asctime.* *libc-psram-workaround.a:lib_a-sf_nan.* *libc-psram-workaround.a:lib_a-abs.* *libc-psram-workaround.a:lib_a-strncasecmp.* *libc-psram-workaround.a:lib_a-iscntrl.* *libc-psram-workaround.a:lib_a-strcasecmp.* *libc-psram-workaround.a:lib_a-strcspn.* *libc-psram-workaround.a:lib_a-wctomb_r.* *libc-psram-workaround.a:lib_a-memccpy.* *libc-psram-workaround.a:lib_a-tolower.* *libc-psram-workaround.a:lib_a-asctime_r.* *libc-psram-workaround.a:lib_a-tzset_r.* *libc-psram-workaround.a:lib_a-stdio.* *libc-psram-workaround.a:lib_a-strlen.* *libc-psram-workaround.a:lib_a-sccl.* *libc-psram-workaround.a:lib_a-ungetc.* *libc-psram-workaround.a:lib_a-isdigit.* *libc-psram-workaround.a:lib_a-strlcat.* *libc-psram-workaround.a:lib_a-labs.* *libc-psram-workaround.a:lib_a-tzcalc_limits.* *libc-psram-workaround.a:lib_a-environ.* *libc-psram-workaround.a:lib_a-strdup.* *libc-psram-workaround.a:lib_a-memset.* *libc-psram-workaround.a:lib_a-tzlock.* *libc-psram-workaround.a:lib_a-strcasestr.* *libc-psram-workaround.a:lib_a-makebuf.* *libc-psram-workaround.a:lib_a-time.* *libfreertos.a *libgcov.a *libxtensa-debug-module.a:eri.* *libheap.a:multi_heap_poisoning.* *libheap.a:multi_heap.*) .text.* .wifi0iram .wifi0iram.*) + *(EXCLUDE_FILE(*libspi_flash.a:spi_flash_rom_patch.* *libesp_ringbuf.a *libhal.a *libapp_trace.a *libesp32.a:panic.* *libespcoredump.a:core_dump_port.* *libespcoredump.a:core_dump_common.* *libespcoredump.a:core_dump_flash.* *libespcoredump.a:core_dump_uart.* *librtc.a *libgcc.a:lib2funcs.* *libsoc.a:rtc_clk_init.* *libsoc.a:cpu_util.* *libsoc.a:rtc_pm.* *libsoc.a:rtc_wdt.* *libsoc.a:rtc_periph.* *libsoc.a:rtc_time.* *libsoc.a:rtc_sleep.* *libsoc.a:rtc_init.* *libsoc.a:rtc_clk.* *libc-psram-workaround.a:lib_a-isalpha.* *libc-psram-workaround.a:lib_a-isprint.* *libc-psram-workaround.a:lib_a-impure.* *libc-psram-workaround.a:lib_a-strrchr.* *libc-psram-workaround.a:lib_a-atol.* *libc-psram-workaround.a:lib_a-month_lengths.* *libc-psram-workaround.a:lib_a-fclose.* *libc-psram-workaround.a:lib_a-strtol.* *libc-psram-workaround.a:lib_a-syssbrk.* *libc-psram-workaround.a:lib_a-abs.* *libc-psram-workaround.a:lib_a-syswrite.* *libc-psram-workaround.a:lib_a-strcspn.* *libc-psram-workaround.a:lib_a-tzlock.* *libc-psram-workaround.a:lib_a-strcmp.* *libc-psram-workaround.a:lib_a-environ.* *libc-psram-workaround.a:lib_a-stdio.* *libc-psram-workaround.a:lib_a-isdigit.* *libc-psram-workaround.a:lib_a-islower.* *libc-psram-workaround.a:lib_a-systimes.* *libc-psram-workaround.a:lib_a-raise.* *libc-psram-workaround.a:lib_a-tzset.* *libc-psram-workaround.a:lib_a-ispunct.* *libc-psram-workaround.a:lib_a-time.* *libc-psram-workaround.a:lib_a-rshift.* *libc-psram-workaround.a:lib_a-tolower.* *libc-psram-workaround.a:lib_a-iscntrl.* *libc-psram-workaround.a:lib_a-gettzinfo.* *libc-psram-workaround.a:lib_a-strlcat.* *libc-psram-workaround.a:lib_a-sysclose.* *libc-psram-workaround.a:lib_a-isalnum.* *libc-psram-workaround.a:lib_a-ctime_r.* *libc-psram-workaround.a:lib_a-strncpy.* *libc-psram-workaround.a:lib_a-tzset_r.* *libc-psram-workaround.a:lib_a-lcltime.* *libc-psram-workaround.a:lib_a-read.* *libc-psram-workaround.a:lib_a-getenv_r.* *libc-psram-workaround.a:lib_a-quorem.* *libc-psram-workaround.a:lib_a-sysread.* *libc-psram-workaround.a:lib_a-memccpy.* *libc-psram-workaround.a:lib_a-isspace.* *libc-psram-workaround.a:lib_a-fflush.* *libc-psram-workaround.a:lib_a-strsep.* *libc-psram-workaround.a:lib_a-strupr.* *libc-psram-workaround.a:lib_a-strlwr.* *libc-psram-workaround.a:lib_a-ungetc.* *libc-psram-workaround.a:lib_a-isgraph.* *libc-psram-workaround.a:lib_a-strcasecmp.* *libc-psram-workaround.a:lib_a-strcpy.* *libc-psram-workaround.a:lib_a-strdup_r.* *libc-psram-workaround.a:lib_a-rand.* *libc-psram-workaround.a:lib_a-strncasecmp.* *libc-psram-workaround.a:lib_a-toupper.* *libc-psram-workaround.a:lib_a-strtoul.* *libc-psram-workaround.a:lib_a-longjmp.* *libc-psram-workaround.a:lib_a-makebuf.* *libc-psram-workaround.a:lib_a-memmove.* *libc-psram-workaround.a:lib_a-isupper.* *libc-psram-workaround.a:lib_a-isblank.* *libc-psram-workaround.a:lib_a-strdup.* *libc-psram-workaround.a:lib_a-strcat.* *libc-psram-workaround.a:lib_a-memcmp.* *libc-psram-workaround.a:lib_a-strspn.* *libc-psram-workaround.a:lib_a-strlcpy.* *libc-psram-workaround.a:lib_a-tzvars.* *libc-psram-workaround.a:lib_a-ctype_.* *libc-psram-workaround.a:creat.* *libc-psram-workaround.a:lib_a-strndup_r.* *libc-psram-workaround.a:lib_a-memchr.* *libc-psram-workaround.a:lib_a-fwalk.* *libc-psram-workaround.a:lib_a-strcasestr.* *libc-psram-workaround.a:lib_a-strcoll.* *libc-psram-workaround.a:lib_a-refill.* *libc-psram-workaround.a:lib_a-asctime_r.* *libc-psram-workaround.a:lib_a-sf_nan.* *libc-psram-workaround.a:lib_a-asctime.* *libc-psram-workaround.a:lib_a-wcrtomb.* *libc-psram-workaround.a:lib_a-envlock.* *libc-psram-workaround.a:lib_a-fvwrite.* *libc-psram-workaround.a:lib_a-srand.* *libc-psram-workaround.a:lib_a-gmtime_r.* *libc-psram-workaround.a:lib_a-lcltime_r.* *libc-psram-workaround.a:lib_a-ldiv.* *libc-psram-workaround.a:lib_a-strlen.* *libc-psram-workaround.a:lib_a-s_fpclassify.* *libc-psram-workaround.a:lib_a-sccl.* *libc-psram-workaround.a:lib_a-memset.* *libc-psram-workaround.a:lib_a-bzero.* *libc-psram-workaround.a:lib_a-strndup.* *libc-psram-workaround.a:lib_a-mktime.* *libc-psram-workaround.a:lib_a-memrchr.* *libc-psram-workaround.a:lib_a-utoa.* *libc-psram-workaround.a:lock.* *libc-psram-workaround.a:lib_a-tzcalc_limits.* *libc-psram-workaround.a:lib_a-labs.* *libc-psram-workaround.a:lib_a-strncat.* *libc-psram-workaround.a:lib_a-wsetup.* *libc-psram-workaround.a:lib_a-strnlen.* *libc-psram-workaround.a:lib_a-toascii.* *libc-psram-workaround.a:lib_a-wctomb_r.* *libc-psram-workaround.a:lib_a-strtok_r.* *libc-psram-workaround.a:lib_a-timelocal.* *libc-psram-workaround.a:lib_a-rand_r.* *libc-psram-workaround.a:lib_a-strstr.* *libc-psram-workaround.a:lib_a-sysopen.* *libc-psram-workaround.a:lib_a-wbuf.* *libc-psram-workaround.a:lib_a-close.* *libc-psram-workaround.a:lib_a-open.* *libc-psram-workaround.a:lib_a-atoi.* *libc-psram-workaround.a:lib_a-isascii.* *libc-psram-workaround.a:lib_a-system.* *libc-psram-workaround.a:lib_a-fputwc.* *libc-psram-workaround.a:lib_a-setjmp.* *libc-psram-workaround.a:lib_a-sbrk.* *libc-psram-workaround.a:lib_a-div.* *libc-psram-workaround.a:lib_a-gmtime.* *libc-psram-workaround.a:lib_a-ctime.* *libc-psram-workaround.a:isatty.* *libc-psram-workaround.a:lib_a-itoa.* *libc-psram-workaround.a:lib_a-strftime.* *libc-psram-workaround.a:lib_a-strncmp.* *libc-psram-workaround.a:lib_a-creat.* *libc-psram-workaround.a:lib_a-strptime.* *libc-psram-workaround.a:lib_a-strchr.* *libc-psram-workaround.a:lib_a-memcpy.* *libc-psram-workaround.a:lib_a-findfp.* *libfreertos.a *libgcov.a *libxtensa-debug-module.a:eri.* *libheap.a:multi_heap.* *libheap.a:multi_heap_poisoning.*) .literal EXCLUDE_FILE(*libspi_flash.a:spi_flash_rom_patch.* *libesp_ringbuf.a *libhal.a *libapp_trace.a *libesp32.a:panic.* *libespcoredump.a:core_dump_port.* *libespcoredump.a:core_dump_common.* *libespcoredump.a:core_dump_flash.* *libespcoredump.a:core_dump_uart.* *librtc.a *libgcc.a:lib2funcs.* *libsoc.a:rtc_clk_init.* *libsoc.a:cpu_util.* *libsoc.a:rtc_pm.* *libsoc.a:rtc_wdt.* *libsoc.a:rtc_periph.* *libsoc.a:rtc_time.* *libsoc.a:rtc_sleep.* *libsoc.a:rtc_init.* *libsoc.a:rtc_clk.* *libc-psram-workaround.a:lib_a-isalpha.* *libc-psram-workaround.a:lib_a-isprint.* *libc-psram-workaround.a:lib_a-impure.* *libc-psram-workaround.a:lib_a-strrchr.* *libc-psram-workaround.a:lib_a-atol.* *libc-psram-workaround.a:lib_a-month_lengths.* *libc-psram-workaround.a:lib_a-fclose.* *libc-psram-workaround.a:lib_a-strtol.* *libc-psram-workaround.a:lib_a-syssbrk.* *libc-psram-workaround.a:lib_a-abs.* *libc-psram-workaround.a:lib_a-syswrite.* *libc-psram-workaround.a:lib_a-strcspn.* *libc-psram-workaround.a:lib_a-tzlock.* *libc-psram-workaround.a:lib_a-strcmp.* *libc-psram-workaround.a:lib_a-environ.* *libc-psram-workaround.a:lib_a-stdio.* *libc-psram-workaround.a:lib_a-isdigit.* *libc-psram-workaround.a:lib_a-islower.* *libc-psram-workaround.a:lib_a-systimes.* *libc-psram-workaround.a:lib_a-raise.* *libc-psram-workaround.a:lib_a-tzset.* *libc-psram-workaround.a:lib_a-ispunct.* *libc-psram-workaround.a:lib_a-time.* *libc-psram-workaround.a:lib_a-rshift.* *libc-psram-workaround.a:lib_a-tolower.* *libc-psram-workaround.a:lib_a-iscntrl.* *libc-psram-workaround.a:lib_a-gettzinfo.* *libc-psram-workaround.a:lib_a-strlcat.* *libc-psram-workaround.a:lib_a-sysclose.* *libc-psram-workaround.a:lib_a-isalnum.* *libc-psram-workaround.a:lib_a-ctime_r.* *libc-psram-workaround.a:lib_a-strncpy.* *libc-psram-workaround.a:lib_a-tzset_r.* *libc-psram-workaround.a:lib_a-lcltime.* *libc-psram-workaround.a:lib_a-read.* *libc-psram-workaround.a:lib_a-getenv_r.* *libc-psram-workaround.a:lib_a-quorem.* *libc-psram-workaround.a:lib_a-sysread.* *libc-psram-workaround.a:lib_a-memccpy.* *libc-psram-workaround.a:lib_a-isspace.* *libc-psram-workaround.a:lib_a-fflush.* *libc-psram-workaround.a:lib_a-strsep.* *libc-psram-workaround.a:lib_a-strupr.* *libc-psram-workaround.a:lib_a-strlwr.* *libc-psram-workaround.a:lib_a-ungetc.* *libc-psram-workaround.a:lib_a-isgraph.* *libc-psram-workaround.a:lib_a-strcasecmp.* *libc-psram-workaround.a:lib_a-strcpy.* *libc-psram-workaround.a:lib_a-strdup_r.* *libc-psram-workaround.a:lib_a-rand.* *libc-psram-workaround.a:lib_a-strncasecmp.* *libc-psram-workaround.a:lib_a-toupper.* *libc-psram-workaround.a:lib_a-strtoul.* *libc-psram-workaround.a:lib_a-longjmp.* *libc-psram-workaround.a:lib_a-makebuf.* *libc-psram-workaround.a:lib_a-memmove.* *libc-psram-workaround.a:lib_a-isupper.* *libc-psram-workaround.a:lib_a-isblank.* *libc-psram-workaround.a:lib_a-strdup.* *libc-psram-workaround.a:lib_a-strcat.* *libc-psram-workaround.a:lib_a-memcmp.* *libc-psram-workaround.a:lib_a-strspn.* *libc-psram-workaround.a:lib_a-strlcpy.* *libc-psram-workaround.a:lib_a-tzvars.* *libc-psram-workaround.a:lib_a-ctype_.* *libc-psram-workaround.a:creat.* *libc-psram-workaround.a:lib_a-strndup_r.* *libc-psram-workaround.a:lib_a-memchr.* *libc-psram-workaround.a:lib_a-fwalk.* *libc-psram-workaround.a:lib_a-strcasestr.* *libc-psram-workaround.a:lib_a-strcoll.* *libc-psram-workaround.a:lib_a-refill.* *libc-psram-workaround.a:lib_a-asctime_r.* *libc-psram-workaround.a:lib_a-sf_nan.* *libc-psram-workaround.a:lib_a-asctime.* *libc-psram-workaround.a:lib_a-wcrtomb.* *libc-psram-workaround.a:lib_a-envlock.* *libc-psram-workaround.a:lib_a-fvwrite.* *libc-psram-workaround.a:lib_a-srand.* *libc-psram-workaround.a:lib_a-gmtime_r.* *libc-psram-workaround.a:lib_a-lcltime_r.* *libc-psram-workaround.a:lib_a-ldiv.* *libc-psram-workaround.a:lib_a-strlen.* *libc-psram-workaround.a:lib_a-s_fpclassify.* *libc-psram-workaround.a:lib_a-sccl.* *libc-psram-workaround.a:lib_a-memset.* *libc-psram-workaround.a:lib_a-bzero.* *libc-psram-workaround.a:lib_a-strndup.* *libc-psram-workaround.a:lib_a-mktime.* *libc-psram-workaround.a:lib_a-memrchr.* *libc-psram-workaround.a:lib_a-utoa.* *libc-psram-workaround.a:lock.* *libc-psram-workaround.a:lib_a-tzcalc_limits.* *libc-psram-workaround.a:lib_a-labs.* *libc-psram-workaround.a:lib_a-strncat.* *libc-psram-workaround.a:lib_a-wsetup.* *libc-psram-workaround.a:lib_a-strnlen.* *libc-psram-workaround.a:lib_a-toascii.* *libc-psram-workaround.a:lib_a-wctomb_r.* *libc-psram-workaround.a:lib_a-strtok_r.* *libc-psram-workaround.a:lib_a-timelocal.* *libc-psram-workaround.a:lib_a-rand_r.* *libc-psram-workaround.a:lib_a-strstr.* *libc-psram-workaround.a:lib_a-sysopen.* *libc-psram-workaround.a:lib_a-wbuf.* *libc-psram-workaround.a:lib_a-close.* *libc-psram-workaround.a:lib_a-open.* *libc-psram-workaround.a:lib_a-atoi.* *libc-psram-workaround.a:lib_a-isascii.* *libc-psram-workaround.a:lib_a-system.* *libc-psram-workaround.a:lib_a-fputwc.* *libc-psram-workaround.a:lib_a-setjmp.* *libc-psram-workaround.a:lib_a-sbrk.* *libc-psram-workaround.a:lib_a-div.* *libc-psram-workaround.a:lib_a-gmtime.* *libc-psram-workaround.a:lib_a-ctime.* *libc-psram-workaround.a:isatty.* *libc-psram-workaround.a:lib_a-itoa.* *libc-psram-workaround.a:lib_a-strftime.* *libc-psram-workaround.a:lib_a-strncmp.* *libc-psram-workaround.a:lib_a-creat.* *libc-psram-workaround.a:lib_a-strptime.* *libc-psram-workaround.a:lib_a-strchr.* *libc-psram-workaround.a:lib_a-memcpy.* *libc-psram-workaround.a:lib_a-findfp.* *libfreertos.a *libgcov.a *libxtensa-debug-module.a:eri.* *libheap.a:multi_heap.* *libheap.a:multi_heap_poisoning.*) .literal.* EXCLUDE_FILE(*libspi_flash.a:spi_flash_rom_patch.* *libesp_ringbuf.a *libhal.a *libapp_trace.a *libesp32.a:panic.* *libespcoredump.a:core_dump_port.* *libespcoredump.a:core_dump_common.* *libespcoredump.a:core_dump_flash.* *libespcoredump.a:core_dump_uart.* *librtc.a *libgcc.a:lib2funcs.* *libsoc.a:rtc_clk_init.* *libsoc.a:cpu_util.* *libsoc.a:rtc_pm.* *libsoc.a:rtc_wdt.* *libsoc.a:rtc_periph.* *libsoc.a:rtc_time.* *libsoc.a:rtc_sleep.* *libsoc.a:rtc_init.* *libsoc.a:rtc_clk.* *libc-psram-workaround.a:lib_a-isalpha.* *libc-psram-workaround.a:lib_a-isprint.* *libc-psram-workaround.a:lib_a-impure.* *libc-psram-workaround.a:lib_a-strrchr.* *libc-psram-workaround.a:lib_a-atol.* *libc-psram-workaround.a:lib_a-month_lengths.* *libc-psram-workaround.a:lib_a-fclose.* *libc-psram-workaround.a:lib_a-strtol.* *libc-psram-workaround.a:lib_a-syssbrk.* *libc-psram-workaround.a:lib_a-abs.* *libc-psram-workaround.a:lib_a-syswrite.* *libc-psram-workaround.a:lib_a-strcspn.* *libc-psram-workaround.a:lib_a-tzlock.* *libc-psram-workaround.a:lib_a-strcmp.* *libc-psram-workaround.a:lib_a-environ.* *libc-psram-workaround.a:lib_a-stdio.* *libc-psram-workaround.a:lib_a-isdigit.* *libc-psram-workaround.a:lib_a-islower.* *libc-psram-workaround.a:lib_a-systimes.* *libc-psram-workaround.a:lib_a-raise.* *libc-psram-workaround.a:lib_a-tzset.* *libc-psram-workaround.a:lib_a-ispunct.* *libc-psram-workaround.a:lib_a-time.* *libc-psram-workaround.a:lib_a-rshift.* *libc-psram-workaround.a:lib_a-tolower.* *libc-psram-workaround.a:lib_a-iscntrl.* *libc-psram-workaround.a:lib_a-gettzinfo.* *libc-psram-workaround.a:lib_a-strlcat.* *libc-psram-workaround.a:lib_a-sysclose.* *libc-psram-workaround.a:lib_a-isalnum.* *libc-psram-workaround.a:lib_a-ctime_r.* *libc-psram-workaround.a:lib_a-strncpy.* *libc-psram-workaround.a:lib_a-tzset_r.* *libc-psram-workaround.a:lib_a-lcltime.* *libc-psram-workaround.a:lib_a-read.* *libc-psram-workaround.a:lib_a-getenv_r.* *libc-psram-workaround.a:lib_a-quorem.* *libc-psram-workaround.a:lib_a-sysread.* *libc-psram-workaround.a:lib_a-memccpy.* *libc-psram-workaround.a:lib_a-isspace.* *libc-psram-workaround.a:lib_a-fflush.* *libc-psram-workaround.a:lib_a-strsep.* *libc-psram-workaround.a:lib_a-strupr.* *libc-psram-workaround.a:lib_a-strlwr.* *libc-psram-workaround.a:lib_a-ungetc.* *libc-psram-workaround.a:lib_a-isgraph.* *libc-psram-workaround.a:lib_a-strcasecmp.* *libc-psram-workaround.a:lib_a-strcpy.* *libc-psram-workaround.a:lib_a-strdup_r.* *libc-psram-workaround.a:lib_a-rand.* *libc-psram-workaround.a:lib_a-strncasecmp.* *libc-psram-workaround.a:lib_a-toupper.* *libc-psram-workaround.a:lib_a-strtoul.* *libc-psram-workaround.a:lib_a-longjmp.* *libc-psram-workaround.a:lib_a-makebuf.* *libc-psram-workaround.a:lib_a-memmove.* *libc-psram-workaround.a:lib_a-isupper.* *libc-psram-workaround.a:lib_a-isblank.* *libc-psram-workaround.a:lib_a-strdup.* *libc-psram-workaround.a:lib_a-strcat.* *libc-psram-workaround.a:lib_a-memcmp.* *libc-psram-workaround.a:lib_a-strspn.* *libc-psram-workaround.a:lib_a-strlcpy.* *libc-psram-workaround.a:lib_a-tzvars.* *libc-psram-workaround.a:lib_a-ctype_.* *libc-psram-workaround.a:creat.* *libc-psram-workaround.a:lib_a-strndup_r.* *libc-psram-workaround.a:lib_a-memchr.* *libc-psram-workaround.a:lib_a-fwalk.* *libc-psram-workaround.a:lib_a-strcasestr.* *libc-psram-workaround.a:lib_a-strcoll.* *libc-psram-workaround.a:lib_a-refill.* *libc-psram-workaround.a:lib_a-asctime_r.* *libc-psram-workaround.a:lib_a-sf_nan.* *libc-psram-workaround.a:lib_a-asctime.* *libc-psram-workaround.a:lib_a-wcrtomb.* *libc-psram-workaround.a:lib_a-envlock.* *libc-psram-workaround.a:lib_a-fvwrite.* *libc-psram-workaround.a:lib_a-srand.* *libc-psram-workaround.a:lib_a-gmtime_r.* *libc-psram-workaround.a:lib_a-lcltime_r.* *libc-psram-workaround.a:lib_a-ldiv.* *libc-psram-workaround.a:lib_a-strlen.* *libc-psram-workaround.a:lib_a-s_fpclassify.* *libc-psram-workaround.a:lib_a-sccl.* *libc-psram-workaround.a:lib_a-memset.* *libc-psram-workaround.a:lib_a-bzero.* *libc-psram-workaround.a:lib_a-strndup.* *libc-psram-workaround.a:lib_a-mktime.* *libc-psram-workaround.a:lib_a-memrchr.* *libc-psram-workaround.a:lib_a-utoa.* *libc-psram-workaround.a:lock.* *libc-psram-workaround.a:lib_a-tzcalc_limits.* *libc-psram-workaround.a:lib_a-labs.* *libc-psram-workaround.a:lib_a-strncat.* *libc-psram-workaround.a:lib_a-wsetup.* *libc-psram-workaround.a:lib_a-strnlen.* *libc-psram-workaround.a:lib_a-toascii.* *libc-psram-workaround.a:lib_a-wctomb_r.* *libc-psram-workaround.a:lib_a-strtok_r.* *libc-psram-workaround.a:lib_a-timelocal.* *libc-psram-workaround.a:lib_a-rand_r.* *libc-psram-workaround.a:lib_a-strstr.* *libc-psram-workaround.a:lib_a-sysopen.* *libc-psram-workaround.a:lib_a-wbuf.* *libc-psram-workaround.a:lib_a-close.* *libc-psram-workaround.a:lib_a-open.* *libc-psram-workaround.a:lib_a-atoi.* *libc-psram-workaround.a:lib_a-isascii.* *libc-psram-workaround.a:lib_a-system.* *libc-psram-workaround.a:lib_a-fputwc.* *libc-psram-workaround.a:lib_a-setjmp.* *libc-psram-workaround.a:lib_a-sbrk.* *libc-psram-workaround.a:lib_a-div.* *libc-psram-workaround.a:lib_a-gmtime.* *libc-psram-workaround.a:lib_a-ctime.* *libc-psram-workaround.a:isatty.* *libc-psram-workaround.a:lib_a-itoa.* *libc-psram-workaround.a:lib_a-strftime.* *libc-psram-workaround.a:lib_a-strncmp.* *libc-psram-workaround.a:lib_a-creat.* *libc-psram-workaround.a:lib_a-strptime.* *libc-psram-workaround.a:lib_a-strchr.* *libc-psram-workaround.a:lib_a-memcpy.* *libc-psram-workaround.a:lib_a-findfp.* *libfreertos.a *libgcov.a *libxtensa-debug-module.a:eri.* *libheap.a:multi_heap.* *libheap.a:multi_heap_poisoning.*) .text EXCLUDE_FILE(*libspi_flash.a:spi_flash_rom_patch.* *libesp_ringbuf.a *libhal.a *libapp_trace.a *libesp32.a:panic.* *libespcoredump.a:core_dump_port.* *libespcoredump.a:core_dump_common.* *libespcoredump.a:core_dump_flash.* *libespcoredump.a:core_dump_uart.* *librtc.a *libgcc.a:lib2funcs.* *libsoc.a:rtc_clk_init.* *libsoc.a:cpu_util.* *libsoc.a:rtc_pm.* *libsoc.a:rtc_wdt.* *libsoc.a:rtc_periph.* *libsoc.a:rtc_time.* *libsoc.a:rtc_sleep.* *libsoc.a:rtc_init.* *libsoc.a:rtc_clk.* *libc-psram-workaround.a:lib_a-isalpha.* *libc-psram-workaround.a:lib_a-isprint.* *libc-psram-workaround.a:lib_a-impure.* *libc-psram-workaround.a:lib_a-strrchr.* *libc-psram-workaround.a:lib_a-atol.* *libc-psram-workaround.a:lib_a-month_lengths.* *libc-psram-workaround.a:lib_a-fclose.* *libc-psram-workaround.a:lib_a-strtol.* *libc-psram-workaround.a:lib_a-syssbrk.* *libc-psram-workaround.a:lib_a-abs.* *libc-psram-workaround.a:lib_a-syswrite.* *libc-psram-workaround.a:lib_a-strcspn.* *libc-psram-workaround.a:lib_a-tzlock.* *libc-psram-workaround.a:lib_a-strcmp.* *libc-psram-workaround.a:lib_a-environ.* *libc-psram-workaround.a:lib_a-stdio.* *libc-psram-workaround.a:lib_a-isdigit.* *libc-psram-workaround.a:lib_a-islower.* *libc-psram-workaround.a:lib_a-systimes.* *libc-psram-workaround.a:lib_a-raise.* *libc-psram-workaround.a:lib_a-tzset.* *libc-psram-workaround.a:lib_a-ispunct.* *libc-psram-workaround.a:lib_a-time.* *libc-psram-workaround.a:lib_a-rshift.* *libc-psram-workaround.a:lib_a-tolower.* *libc-psram-workaround.a:lib_a-iscntrl.* *libc-psram-workaround.a:lib_a-gettzinfo.* *libc-psram-workaround.a:lib_a-strlcat.* *libc-psram-workaround.a:lib_a-sysclose.* *libc-psram-workaround.a:lib_a-isalnum.* *libc-psram-workaround.a:lib_a-ctime_r.* *libc-psram-workaround.a:lib_a-strncpy.* *libc-psram-workaround.a:lib_a-tzset_r.* *libc-psram-workaround.a:lib_a-lcltime.* *libc-psram-workaround.a:lib_a-read.* *libc-psram-workaround.a:lib_a-getenv_r.* *libc-psram-workaround.a:lib_a-quorem.* *libc-psram-workaround.a:lib_a-sysread.* *libc-psram-workaround.a:lib_a-memccpy.* *libc-psram-workaround.a:lib_a-isspace.* *libc-psram-workaround.a:lib_a-fflush.* *libc-psram-workaround.a:lib_a-strsep.* *libc-psram-workaround.a:lib_a-strupr.* *libc-psram-workaround.a:lib_a-strlwr.* *libc-psram-workaround.a:lib_a-ungetc.* *libc-psram-workaround.a:lib_a-isgraph.* *libc-psram-workaround.a:lib_a-strcasecmp.* *libc-psram-workaround.a:lib_a-strcpy.* *libc-psram-workaround.a:lib_a-strdup_r.* *libc-psram-workaround.a:lib_a-rand.* *libc-psram-workaround.a:lib_a-strncasecmp.* *libc-psram-workaround.a:lib_a-toupper.* *libc-psram-workaround.a:lib_a-strtoul.* *libc-psram-workaround.a:lib_a-longjmp.* *libc-psram-workaround.a:lib_a-makebuf.* *libc-psram-workaround.a:lib_a-memmove.* *libc-psram-workaround.a:lib_a-isupper.* *libc-psram-workaround.a:lib_a-isblank.* *libc-psram-workaround.a:lib_a-strdup.* *libc-psram-workaround.a:lib_a-strcat.* *libc-psram-workaround.a:lib_a-memcmp.* *libc-psram-workaround.a:lib_a-strspn.* *libc-psram-workaround.a:lib_a-strlcpy.* *libc-psram-workaround.a:lib_a-tzvars.* *libc-psram-workaround.a:lib_a-ctype_.* *libc-psram-workaround.a:creat.* *libc-psram-workaround.a:lib_a-strndup_r.* *libc-psram-workaround.a:lib_a-memchr.* *libc-psram-workaround.a:lib_a-fwalk.* *libc-psram-workaround.a:lib_a-strcasestr.* *libc-psram-workaround.a:lib_a-strcoll.* *libc-psram-workaround.a:lib_a-refill.* *libc-psram-workaround.a:lib_a-asctime_r.* *libc-psram-workaround.a:lib_a-sf_nan.* *libc-psram-workaround.a:lib_a-asctime.* *libc-psram-workaround.a:lib_a-wcrtomb.* *libc-psram-workaround.a:lib_a-envlock.* *libc-psram-workaround.a:lib_a-fvwrite.* *libc-psram-workaround.a:lib_a-srand.* *libc-psram-workaround.a:lib_a-gmtime_r.* *libc-psram-workaround.a:lib_a-lcltime_r.* *libc-psram-workaround.a:lib_a-ldiv.* *libc-psram-workaround.a:lib_a-strlen.* *libc-psram-workaround.a:lib_a-s_fpclassify.* *libc-psram-workaround.a:lib_a-sccl.* *libc-psram-workaround.a:lib_a-memset.* *libc-psram-workaround.a:lib_a-bzero.* *libc-psram-workaround.a:lib_a-strndup.* *libc-psram-workaround.a:lib_a-mktime.* *libc-psram-workaround.a:lib_a-memrchr.* *libc-psram-workaround.a:lib_a-utoa.* *libc-psram-workaround.a:lock.* *libc-psram-workaround.a:lib_a-tzcalc_limits.* *libc-psram-workaround.a:lib_a-labs.* *libc-psram-workaround.a:lib_a-strncat.* *libc-psram-workaround.a:lib_a-wsetup.* *libc-psram-workaround.a:lib_a-strnlen.* *libc-psram-workaround.a:lib_a-toascii.* *libc-psram-workaround.a:lib_a-wctomb_r.* *libc-psram-workaround.a:lib_a-strtok_r.* *libc-psram-workaround.a:lib_a-timelocal.* *libc-psram-workaround.a:lib_a-rand_r.* *libc-psram-workaround.a:lib_a-strstr.* *libc-psram-workaround.a:lib_a-sysopen.* *libc-psram-workaround.a:lib_a-wbuf.* *libc-psram-workaround.a:lib_a-close.* *libc-psram-workaround.a:lib_a-open.* *libc-psram-workaround.a:lib_a-atoi.* *libc-psram-workaround.a:lib_a-isascii.* *libc-psram-workaround.a:lib_a-system.* *libc-psram-workaround.a:lib_a-fputwc.* *libc-psram-workaround.a:lib_a-setjmp.* *libc-psram-workaround.a:lib_a-sbrk.* *libc-psram-workaround.a:lib_a-div.* *libc-psram-workaround.a:lib_a-gmtime.* *libc-psram-workaround.a:lib_a-ctime.* *libc-psram-workaround.a:isatty.* *libc-psram-workaround.a:lib_a-itoa.* *libc-psram-workaround.a:lib_a-strftime.* *libc-psram-workaround.a:lib_a-strncmp.* *libc-psram-workaround.a:lib_a-creat.* *libc-psram-workaround.a:lib_a-strptime.* *libc-psram-workaround.a:lib_a-strchr.* *libc-psram-workaround.a:lib_a-memcpy.* *libc-psram-workaround.a:lib_a-findfp.* *libfreertos.a *libgcov.a *libxtensa-debug-module.a:eri.* *libheap.a:multi_heap.* *libheap.a:multi_heap_poisoning.*) .text.* .wifi0iram .wifi0iram.*) *(.stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*) *(.irom0.text) /* catch stray ICACHE_RODATA_ATTR */ diff --git a/esp32/esp32.rom.libgcc.ld b/esp32/esp32.rom.libgcc.ld new file mode 100644 index 0000000000..51448b3327 --- /dev/null +++ b/esp32/esp32.rom.libgcc.ld @@ -0,0 +1,91 @@ +__absvdi2 = 0x4006387c; +__absvsi2 = 0x40063868; +__adddf3 = 0x40002590; +__addsf3 = 0x400020e8; +__addvdi3 = 0x40002cbc; +__addvsi3 = 0x40002c98; +__ashldi3 = 0x4000c818; +__ashrdi3 = 0x4000c830; +__bswapdi2 = 0x40064b08; +__bswapsi2 = 0x40064ae0; +__clrsbdi2 = 0x40064b7c; +__clrsbsi2 = 0x40064b64; +__clzdi2 = 0x4000ca50; +__clzsi2 = 0x4000c7e8; +__cmpdi2 = 0x40063820; +__ctzdi2 = 0x4000ca64; +__ctzsi2 = 0x4000c7f0; +__divdc3 = 0x400645a4; +__divdf3 = 0x40002954; +__divdi3 = 0x4000ca84; +__divsc3 = 0x4006429c; +__divsf3 = 0x4000234c; +__divsi3 = 0x4000c7b8; +__eqdf2 = 0x400636a8; +__eqsf2 = 0x40063374; +__extendsfdf2 = 0x40002c34; +__ffsdi2 = 0x4000ca2c; +__ffssi2 = 0x4000c804; +__fixdfdi = 0x40002ac4; +__fixdfsi = 0x40002a78; +__fixsfdi = 0x4000244c; +__fixsfsi = 0x4000240c; +__fixunsdfsi = 0x40002b30; +__fixunssfdi = 0x40002504; +__fixunssfsi = 0x400024ac; +__floatdidf = 0x4000c988; +__floatdisf = 0x4000c8c0; +__floatsidf = 0x4000c944; +__floatsisf = 0x4000c870; +__floatundidf = 0x4000c978; +__floatundisf = 0x4000c8b0; +__floatunsidf = 0x4000c938; +__floatunsisf = 0x4000c864; +__gedf2 = 0x40063768; +__gesf2 = 0x4006340c; +__gtdf2 = 0x400636dc; +__gtsf2 = 0x400633a0; +__ledf2 = 0x40063704; +__lesf2 = 0x400633c0; +__lshrdi3 = 0x4000c84c; +__ltdf2 = 0x40063790; +__ltsf2 = 0x4006342c; +__moddi3 = 0x4000cd4c; +__modsi3 = 0x4000c7c0; +__muldc3 = 0x40063c90; +__muldf3 = 0x4006358c; +__muldi3 = 0x4000c9fc; +__mulsc3 = 0x40063944; +__mulsf3 = 0x400632c8; +__mulsi3 = 0x4000c7b0; +__mulvdi3 = 0x40002d78; +__mulvsi3 = 0x40002d60; +__nedf2 = 0x400636a8; +__negdf2 = 0x400634a0; +__negdi2 = 0x4000ca14; +__negsf2 = 0x400020c0; +__negvdi2 = 0x40002e98; +__negvsi2 = 0x40002e78; +__nesf2 = 0x40063374; +__nsau_data = 0x3ff96544; +__paritysi2 = 0x40002f3c; +__popcount_tab = 0x3ff96544; +__popcountdi2 = 0x40002ef8; +__popcountsi2 = 0x40002ed0; +__powidf2 = 0x400638e4; +__powisf2 = 0x4006389c; +__subdf3 = 0x400026e4; +__subsf3 = 0x400021d0; +__subvdi3 = 0x40002d20; +__subvsi3 = 0x40002cf8; +__truncdfsf2 = 0x40002b90; +__ucmpdi2 = 0x40063840; +__udiv_w_sdiv = 0x40064bec; +__udivdi3 = 0x4000cff8; +__udivmoddi4 = 0x40064bf4; +__udivsi3 = 0x4000c7c8; +__umoddi3 = 0x4000d280; +__umodsi3 = 0x4000c7d0; +__umulsidi3 = 0x4000c7d8; +__unorddf2 = 0x400637f4; +__unordsf2 = 0x40063478; diff --git a/esp32/frozen/LTE/sqnsupgrade.py b/esp32/frozen/LTE/sqnsupgrade.py index 80857a4474..2aa6a49f2c 100644 --- a/esp32/frozen/LTE/sqnsupgrade.py +++ b/esp32/frozen/LTE/sqnsupgrade.py @@ -527,7 +527,7 @@ def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_f time.sleep(.5) self.__serial.read(100) print('Going into MIRROR mode... please close this terminal to resume the upgrade via UART') - self.uart_mirror(rgbled) + return self.uart_mirror(rgbled) elif bootrom: if verbose: print('Starting STP') @@ -570,10 +570,10 @@ def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_f time.sleep(.5) self.__serial.read(100) print('Going into MIRROR mode... please close this terminal to resume the upgrade via UART') - self.uart_mirror(rgbled) + return self.uart_mirror(rgbled) else: self.__serial.write(b"AT+STP\n") - response = self.read_rsp(size=6) + response = self.read_rsp(size=2) if not b'OK' in response: print('Failed to start STP mode!') reconnect_uart() @@ -584,7 +584,7 @@ def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_f else: if debug: print('Starting STP mode...') self.__serial.write(b"AT+STP\n") - response = self.read_rsp(size=6) + response = self.read_rsp(size=2) if not b'OK' in response: print('Failed to start STP mode!') reconnect_uart() @@ -871,6 +871,7 @@ def uart_mirror(self, color): time.sleep(.5) pycom.rgbled(color) LTE.modem_upgrade_mode() + return True def success_message(self, port=None, verbose=False, debug=False): print("Your modem has been successfully updated.") diff --git a/esp32/frozen/Pybytes/_pybytes_config.py b/esp32/frozen/Pybytes/_pybytes_config.py index cde071ea63..8d49419c8c 100644 --- a/esp32/frozen/Pybytes/_pybytes_config.py +++ b/esp32/frozen/Pybytes/_pybytes_config.py @@ -129,7 +129,7 @@ def __process_sigfox_registration(self, activation_token): import _urequest as urequest if hasattr(pycom, 'sigfox_info'): - if pycom.sigfox_info()[0] is None or pycom.sigfox_info()[1] is None or pycom.sigfox_info()[2] is None or pycom.sigfox_info()[3] is None: + if not pycom.sigfox_info(): try: jsigfox = None from network import LoRa diff --git a/esp32/get_idf_libs.py b/esp32/get_idf_libs.py old mode 100644 new mode 100755 index 6dae1bc242..c37c78ad26 --- a/esp32/get_idf_libs.py +++ b/esp32/get_idf_libs.py @@ -1,3 +1,5 @@ +#!/usr/bin/python + import os import sys import argparse @@ -6,8 +8,9 @@ def main(): + src_def = os.environ['IDF_PATH']+'/examples/wifi/scan/build' cmd_parser = argparse.ArgumentParser(description='Get the precompiled libs from the IDF') - cmd_parser.add_argument('--idflibs', default=None, help='the path to the idf libraries') + cmd_parser.add_argument('--idflibs', default=src_def, help='the path to the idf libraries (' + src_def + ')') cmd_args = cmd_parser.parse_args() src = cmd_args.idflibs diff --git a/esp32/lib/libapp_update.a b/esp32/lib/libapp_update.a index 459a61bc6b..94394a73e5 100644 Binary files a/esp32/lib/libapp_update.a and b/esp32/lib/libapp_update.a differ diff --git a/esp32/lib/libbootloader_support.a b/esp32/lib/libbootloader_support.a index 97e60ce4ba..79ca81540b 100644 Binary files a/esp32/lib/libbootloader_support.a and b/esp32/lib/libbootloader_support.a differ diff --git a/esp32/lib/libbt.a b/esp32/lib/libbt.a index 76cd4d136f..ca64a29ad8 100644 Binary files a/esp32/lib/libbt.a and b/esp32/lib/libbt.a differ diff --git a/esp32/lib/libcoap.a b/esp32/lib/libcoap.a index 216e7ed683..4a33b6ffd5 100644 Binary files a/esp32/lib/libcoap.a and b/esp32/lib/libcoap.a differ diff --git a/esp32/lib/libcxx.a b/esp32/lib/libcxx.a index 78e4b4e780..10d85b4bcc 100644 Binary files a/esp32/lib/libcxx.a and b/esp32/lib/libcxx.a differ diff --git a/esp32/lib/libdriver.a b/esp32/lib/libdriver.a index 90067f3d2a..321664b292 100644 Binary files a/esp32/lib/libdriver.a and b/esp32/lib/libdriver.a differ diff --git a/esp32/lib/libefuse.a b/esp32/lib/libefuse.a index 33b5ad9d4c..e8f31cd1d3 100644 Binary files a/esp32/lib/libefuse.a and b/esp32/lib/libefuse.a differ diff --git a/esp32/lib/libesp32.a b/esp32/lib/libesp32.a index 77fdbf3bca..f565dd3582 100644 Binary files a/esp32/lib/libesp32.a and b/esp32/lib/libesp32.a differ diff --git a/esp32/lib/libesp_adc_cal.a b/esp32/lib/libesp_adc_cal.a index 14721e2424..33a62acd7b 100644 Binary files a/esp32/lib/libesp_adc_cal.a and b/esp32/lib/libesp_adc_cal.a differ diff --git a/esp32/lib/libesp_ringbuf.a b/esp32/lib/libesp_ringbuf.a index a15816cf08..f668616246 100644 Binary files a/esp32/lib/libesp_ringbuf.a and b/esp32/lib/libesp_ringbuf.a differ diff --git a/esp32/lib/libespcoredump.a b/esp32/lib/libespcoredump.a index ee8e067f09..32cf2d5402 100644 Binary files a/esp32/lib/libespcoredump.a and b/esp32/lib/libespcoredump.a differ diff --git a/esp32/lib/libexpat.a b/esp32/lib/libexpat.a index c9e8c87a2e..084dfb0365 100644 Binary files a/esp32/lib/libexpat.a and b/esp32/lib/libexpat.a differ diff --git a/esp32/lib/libfreertos.a b/esp32/lib/libfreertos.a index 782d964b08..1012fbdef2 100644 Binary files a/esp32/lib/libfreertos.a and b/esp32/lib/libfreertos.a differ diff --git a/esp32/lib/libheap.a b/esp32/lib/libheap.a index fdce0e1419..7ec9091c45 100644 Binary files a/esp32/lib/libheap.a and b/esp32/lib/libheap.a differ diff --git a/esp32/lib/libjsmn.a b/esp32/lib/libjsmn.a index 5855766e6e..70858f09c3 100644 Binary files a/esp32/lib/libjsmn.a and b/esp32/lib/libjsmn.a differ diff --git a/esp32/lib/libjson.a b/esp32/lib/libjson.a index 1410e76d88..93b2e6f797 100644 Binary files a/esp32/lib/libjson.a and b/esp32/lib/libjson.a differ diff --git a/esp32/lib/liblog.a b/esp32/lib/liblog.a index 8ac452e826..22f3ab1f6f 100644 Binary files a/esp32/lib/liblog.a and b/esp32/lib/liblog.a differ diff --git a/esp32/lib/liblwip.a b/esp32/lib/liblwip.a index bb5b120612..feb0a24e47 100644 Binary files a/esp32/lib/liblwip.a and b/esp32/lib/liblwip.a differ diff --git a/esp32/lib/libmbedtls.a b/esp32/lib/libmbedtls.a index 6653884d71..23f89a4b1e 100644 Binary files a/esp32/lib/libmbedtls.a and b/esp32/lib/libmbedtls.a differ diff --git a/esp32/lib/libmdns.a b/esp32/lib/libmdns.a index f76144ca38..e3e492e8b7 100644 Binary files a/esp32/lib/libmdns.a and b/esp32/lib/libmdns.a differ diff --git a/esp32/lib/libmicro-ecc.a b/esp32/lib/libmicro-ecc.a index 79f74067af..710d1e34b0 100644 Binary files a/esp32/lib/libmicro-ecc.a and b/esp32/lib/libmicro-ecc.a differ diff --git a/esp32/lib/libnewlib.a b/esp32/lib/libnewlib.a index d33a81dba6..c118ba894e 100644 Binary files a/esp32/lib/libnewlib.a and b/esp32/lib/libnewlib.a differ diff --git a/esp32/lib/libnghttp.a b/esp32/lib/libnghttp.a index 921be622f3..7e79a2c9ef 100644 Binary files a/esp32/lib/libnghttp.a and b/esp32/lib/libnghttp.a differ diff --git a/esp32/lib/libnvs_flash.a b/esp32/lib/libnvs_flash.a index 972e284757..2aa0d9f61c 100644 Binary files a/esp32/lib/libnvs_flash.a and b/esp32/lib/libnvs_flash.a differ diff --git a/esp32/lib/libopenssl.a b/esp32/lib/libopenssl.a index 4bc1c06152..d843303fc0 100644 Binary files a/esp32/lib/libopenssl.a and b/esp32/lib/libopenssl.a differ diff --git a/esp32/lib/libpthread.a b/esp32/lib/libpthread.a index 8c83b9d0c2..475cfc9272 100644 Binary files a/esp32/lib/libpthread.a and b/esp32/lib/libpthread.a differ diff --git a/esp32/lib/libsdmmc.a b/esp32/lib/libsdmmc.a index 7b033859d2..356fcc7803 100644 Binary files a/esp32/lib/libsdmmc.a and b/esp32/lib/libsdmmc.a differ diff --git a/esp32/lib/libsmartconfig_ack.a b/esp32/lib/libsmartconfig_ack.a index b06df822ef..2541ac8b38 100644 Binary files a/esp32/lib/libsmartconfig_ack.a and b/esp32/lib/libsmartconfig_ack.a differ diff --git a/esp32/lib/libsoc.a b/esp32/lib/libsoc.a index 255749e5e8..e1dd6f1513 100644 Binary files a/esp32/lib/libsoc.a and b/esp32/lib/libsoc.a differ diff --git a/esp32/lib/libspi_flash.a b/esp32/lib/libspi_flash.a index 2257f24746..15f014b0f9 100644 Binary files a/esp32/lib/libspi_flash.a and b/esp32/lib/libspi_flash.a differ diff --git a/esp32/lib/libtcpip_adapter.a b/esp32/lib/libtcpip_adapter.a index bada9c87da..6575ed7676 100644 Binary files a/esp32/lib/libtcpip_adapter.a and b/esp32/lib/libtcpip_adapter.a differ diff --git a/esp32/lib/libvfs.a b/esp32/lib/libvfs.a index 85f5ae7b97..ddf514fafc 100644 Binary files a/esp32/lib/libvfs.a and b/esp32/lib/libvfs.a differ diff --git a/esp32/lib/libwpa_supplicant.a b/esp32/lib/libwpa_supplicant.a index 5831a3e3f5..2bbda5189a 100644 Binary files a/esp32/lib/libwpa_supplicant.a and b/esp32/lib/libwpa_supplicant.a differ diff --git a/esp32/lib/libxtensa-debug-module.a b/esp32/lib/libxtensa-debug-module.a index a8767ed69c..3896557a10 100644 Binary files a/esp32/lib/libxtensa-debug-module.a and b/esp32/lib/libxtensa-debug-module.a differ diff --git a/esp32/mods/modbt.c b/esp32/mods/modbt.c index 0dbd08c4ab..984d289dbb 100644 --- a/esp32/mods/modbt.c +++ b/esp32/mods/modbt.c @@ -80,7 +80,6 @@ #define MOD_BT_GATTS_CLOSE_EVT (0x0400) #define MOD_BT_NVS_NAMESPACE "BT_NVS" #define MOD_BT_HASH_SIZE (20) -#define MOD_BT_PIN_LENGTH (6) /****************************************************************************** DEFINE PRIVATE TYPES @@ -103,6 +102,8 @@ typedef struct { bool advertising; bool controller_active; bool secure; + bool secure_connections; + bool privacy; } bt_obj_t; typedef struct { @@ -255,16 +256,6 @@ static esp_ble_adv_params_t bt_adv_params = { .adv_filter_policy = ADV_FILTER_ALLOW_SCAN_ANY_CON_ANY, }; -static esp_ble_adv_params_t bt_adv_params_sec = { - .adv_int_min = 0x100, - .adv_int_max = 0x100, - .adv_type = ADV_TYPE_IND, - .own_addr_type = BLE_ADDR_TYPE_RANDOM, - .channel_map = ADV_CHNL_ALL, - .adv_filter_policy = ADV_FILTER_ALLOW_SCAN_ANY_CON_ANY, -}; - - static bool mod_bt_allow_resume_deinit; static uint16_t mod_bt_gatts_mtu_restore = 0; static bool mod_bt_is_conn_restore_available; @@ -424,11 +415,7 @@ void bt_resume(bool reconnect) /* See if there was an averstisment active before Sleep */ if(bt_obj.advertising) { - if (!bt_obj.secure){ - esp_ble_gap_start_advertising(&bt_adv_params); - } else { - esp_ble_gap_start_advertising(&bt_adv_params_sec); - } + esp_ble_gap_start_advertising(&bt_adv_params); } } @@ -480,22 +467,6 @@ static void create_hash(uint32_t pin, uint8_t *h_value) mbedtls_sha1_free(&sha1_context); } -static bool is_pin_valid(uint32_t pin) -{ - int digits = 0; - - while(pin != 0) - { - digits++; - pin /= 10; - } - - if (digits != MOD_BT_PIN_LENGTH){ - return false; - } - - return true; -} static bool pin_changed(uint32_t new_pin) { bool ret = false; @@ -534,20 +505,11 @@ static void remove_all_bonded_devices(void) for (int i = 0; i < dev_num; i++) { esp_ble_remove_bond_device(dev_list[i].bd_addr); } - free(dev_list); } -static void set_secure_parameters(uint32_t passKey){ - - if (pin_changed(passKey)) { - remove_all_bonded_devices(); - } - - uint32_t passkey = passKey; - esp_ble_gap_set_security_param(ESP_BLE_SM_SET_STATIC_PASSKEY, &passkey, sizeof(uint32_t)); - - esp_ble_auth_req_t auth_req = ESP_LE_AUTH_REQ_SC_MITM_BOND; +static void set_secure_parameters(bool secure_connections) { + esp_ble_auth_req_t auth_req = secure_connections ? ESP_LE_AUTH_REQ_SC_MITM_BOND : ESP_LE_AUTH_BOND; esp_ble_gap_set_security_param(ESP_BLE_SM_AUTHEN_REQ_MODE, &auth_req, sizeof(uint8_t)); esp_ble_io_cap_t iocap = ESP_IO_CAP_OUT; @@ -558,7 +520,7 @@ static void set_secure_parameters(uint32_t passKey){ uint8_t auth_option = ESP_BLE_ONLY_ACCEPT_SPECIFIED_AUTH_DISABLE; esp_ble_gap_set_security_param(ESP_BLE_SM_ONLY_ACCEPT_SPECIFIED_SEC_AUTH, &auth_option, sizeof(uint8_t)); - + uint8_t init_key = ESP_BLE_ENC_KEY_MASK | ESP_BLE_ID_KEY_MASK; esp_ble_gap_set_security_param(ESP_BLE_SM_SET_INIT_KEY, &init_key, sizeof(uint8_t)); @@ -566,6 +528,22 @@ static void set_secure_parameters(uint32_t passKey){ esp_ble_gap_set_security_param(ESP_BLE_SM_SET_RSP_KEY, &rsp_key, sizeof(uint8_t)); } +static void set_pin(uint32_t new_pin) +{ + if (new_pin > 999999) { + nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "Pin code with 1-6 digit length is allowed only!")); + } + + if (pin_changed(new_pin)) { + remove_all_bonded_devices(); + } + + uint32_t passkey = new_pin; + esp_ble_gap_set_security_param(ESP_BLE_SM_SET_STATIC_PASSKEY, &passkey, sizeof(uint32_t)); + bt_obj.secure = true; + set_secure_parameters(bt_obj.secure_connections); +} + static void close_connection (int32_t conn_id) { for (mp_uint_t i = 0; i < MP_STATE_PORT(btc_conn_list).len; i++) { bt_connection_obj_t *connection_obj = ((bt_connection_obj_t *)(MP_STATE_PORT(btc_conn_list).items[i])); @@ -650,7 +628,7 @@ static void gap_events_handler (esp_gap_ble_cb_event_t event, esp_ble_gap_cb_par } case ESP_GAP_BLE_NC_REQ_EVT: case ESP_GAP_BLE_PASSKEY_NOTIF_EVT: { - printf("BLE paring passkey : %d\n", param->ble_security.key_notif.passkey); + //printf("BLE paring passkey : %d\n", param->ble_security.key_notif.passkey); break; } case ESP_GAP_BLE_SEC_REQ_EVT: { @@ -699,7 +677,7 @@ static void gattc_events_handler(esp_gattc_cb_event_t event, esp_gatt_if_t gattc status = p_data->reg.status; bt_obj.gattc_if = gattc_if; if (bt_obj.secure){ - esp_ble_gap_config_local_privacy(true); + esp_ble_gap_config_local_privacy(bt_obj.privacy); } break; case ESP_GATTC_OPEN_EVT: @@ -874,7 +852,7 @@ static void gatts_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_t gatts_ case ESP_GATTS_REG_EVT: bt_obj.gatts_if = gatts_if; if (bt_obj.secure){ - esp_ble_gap_config_local_privacy(true); + esp_ble_gap_config_local_privacy(bt_obj.privacy); } break; case ESP_GATTS_READ_EVT: { @@ -1007,20 +985,13 @@ static void gatts_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_t gatts_ if (bt_obj.trigger & MOD_BT_GATTS_CONN_EVT) { mp_irq_queue_interrupt_non_ISR(bluetooth_callback_handler, (void *)&bt_obj); } - if (bt_obj.secure){ - esp_ble_set_encryption(p->connect.remote_bda, ESP_BLE_SEC_ENCRYPT_MITM); - } } break; case ESP_GATTS_DISCONNECT_EVT: bt_obj.gatts_conn_id = -1; xEventGroupClearBits(bt_event_group, MOD_BT_GATTS_MTU_EVT); if (bt_obj.advertising) { - if (!bt_obj.secure){ - esp_ble_gap_start_advertising(&bt_adv_params); - } else { - esp_ble_gap_start_advertising(&bt_adv_params_sec); - } + esp_ble_gap_start_advertising(&bt_adv_params); } bt_obj.events |= MOD_BT_GATTS_DISCONN_EVT; xEventGroupSetBits(bt_event_group, MOD_BT_GATTS_DISCONN_EVT); @@ -1072,7 +1043,7 @@ static mp_obj_t bt_init_helper(bt_obj_t *self, const mp_arg_val_t *args) { esp_ble_gatts_app_register(MOD_BT_SERVER_APP_ID); //set MTU - uint16_t mtu = args[5].u_int; + uint16_t mtu = args[6].u_int; if(mtu > BT_MTU_SIZE_MAX) { esp_ble_gatt_set_local_mtu(BT_MTU_SIZE_MAX); @@ -1116,27 +1087,35 @@ static mp_obj_t bt_init_helper(bt_obj_t *self, const mp_arg_val_t *args) { } } - if (args[3].u_bool){ + bt_obj.secure_connections = args[5].u_bool; + + if (args[3].u_obj != MP_OBJ_NULL){ bt_obj.secure = true; - uint32_t passKey = args[4].u_int; - if (!is_pin_valid(passKey)){ - nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "Only 6 digit (0-9) pins are allowed")); - } - set_secure_parameters(passKey); + // modified default advertisement parameters for secure + bt_adv_params.adv_int_min = 0x100; + bt_adv_params.adv_int_max = 0x100; + bt_adv_params.own_addr_type = args[4].u_bool ? BLE_ADDR_TYPE_RANDOM : BLE_ADDR_TYPE_PUBLIC; + + set_pin(mp_obj_get_int(args[3].u_obj)); + bt_obj.privacy = args[4].u_bool; + set_secure_parameters(bt_obj.secure_connections); + } else { + bt_obj.secure = false; } return mp_const_none; } STATIC const mp_arg_t bt_init_args[] = { - { MP_QSTR_id, MP_ARG_INT, {.u_int = 0} }, - { MP_QSTR_mode, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = E_BT_STACK_MODE_BLE} }, - { MP_QSTR_antenna, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} }, - { MP_QSTR_modem_sleep, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} }, - { MP_QSTR_secure, MP_ARG_KW_ONLY | MP_ARG_BOOL, {.u_bool = false} }, - { MP_QSTR_pin, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 123456} }, - { MP_QSTR_mtu, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = BT_MTU_SIZE_MAX} }, + { MP_QSTR_id, MP_ARG_INT, {.u_int = 0} }, + { MP_QSTR_mode, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = E_BT_STACK_MODE_BLE} }, + { MP_QSTR_antenna, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} }, + { MP_QSTR_modem_sleep, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} }, + { MP_QSTR_pin, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} }, + { MP_QSTR_privacy, MP_ARG_KW_ONLY | MP_ARG_BOOL, {.u_bool = true} }, + { MP_QSTR_secure_connections, MP_ARG_KW_ONLY | MP_ARG_BOOL, {.u_bool = true} }, + { MP_QSTR_mtu, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = BT_MTU_SIZE_MAX} }, }; STATIC mp_obj_t bt_make_new(const mp_obj_type_t *type, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *all_args) { @@ -1156,7 +1135,7 @@ STATIC mp_obj_t bt_make_new(const mp_obj_type_t *type, mp_uint_t n_args, mp_uint nlr_raise(mp_obj_new_exception_msg(&mp_type_OSError, mpexception_os_resource_not_avaliable)); } - if (args[4].u_bool) { + if (args[4].u_obj != MP_OBJ_NULL) { if (heap_caps_get_free_size(MALLOC_CAP_SPIRAM) == 0) { nlr_raise(mp_obj_new_exception_msg(&mp_type_MemoryError,"Secure BLE not available for 512K RAM devices")); } @@ -1496,35 +1475,47 @@ static mp_obj_t modbt_connect(mp_obj_t addr) STATIC mp_obj_t bt_set_advertisement_params (mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { static const mp_arg_t allowed_args[] = { - { MP_QSTR_adv_int_min, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0x20} }, - { MP_QSTR_adv_int_max, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0x40} }, - { MP_QSTR_adv_type, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = ADV_TYPE_IND} }, - { MP_QSTR_own_addr_type, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = BLE_ADDR_TYPE_PUBLIC} }, - { MP_QSTR_channel_map, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = ADV_CHNL_ALL} }, - { MP_QSTR_adv_filter_policy, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = ADV_FILTER_ALLOW_SCAN_ANY_CON_ANY} }, + { MP_QSTR_adv_int_min, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} }, + { MP_QSTR_adv_int_max, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} }, + { MP_QSTR_adv_type, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} }, + { MP_QSTR_own_addr_type, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} }, + { MP_QSTR_channel_map, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} }, + { MP_QSTR_adv_filter_policy, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} }, }; // parse args mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)]; mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(args), allowed_args, args); - + // adv_int_min - bt_adv_params.adv_int_min = (uint16_t)args[0].u_int; - + if (args[0].u_obj != MP_OBJ_NULL) { + bt_adv_params.adv_int_min = (uint16_t) mp_obj_get_int(args[0].u_obj); + } + // adv_int_max - bt_adv_params.adv_int_max = (uint16_t)args[1].u_int; + if (args[1].u_obj != MP_OBJ_NULL) { + bt_adv_params.adv_int_max = (uint16_t) mp_obj_get_int(args[1].u_obj); + } // adv_type - bt_adv_params.adv_type = (esp_ble_adv_type_t)args[2].u_int; - + if (args[2].u_obj != MP_OBJ_NULL) { + bt_adv_params.adv_type = (esp_ble_adv_type_t) mp_obj_get_int(args[2].u_obj); + } + // own_addr_type - bt_adv_params.own_addr_type = (esp_ble_addr_type_t)args[3].u_int; - + if (args[3].u_obj != MP_OBJ_NULL) { + bt_adv_params.own_addr_type = (esp_ble_addr_type_t) mp_obj_get_int(args[3].u_obj); + } + // channel_map - bt_adv_params.channel_map = (esp_ble_adv_channel_t)args[4].u_int; - + if (args[4].u_obj != MP_OBJ_NULL) { + bt_adv_params.channel_map = (esp_ble_adv_channel_t) mp_obj_get_int(args[4].u_obj); + } + // adv_filter_policy - bt_adv_params.adv_filter_policy = (esp_ble_adv_filter_t)args[5].u_int; + if (args[5].u_obj != MP_OBJ_NULL) { + bt_adv_params.adv_filter_policy = (esp_ble_adv_filter_t) mp_obj_get_int(args[5].u_obj); + } return mp_const_none; } @@ -1657,15 +1648,18 @@ STATIC mp_obj_t bt_set_advertisement_raw(mp_obj_t self_in, mp_obj_t raw_data) { STATIC MP_DEFINE_CONST_FUN_OBJ_2(bt_set_advertisement_raw_obj, bt_set_advertisement_raw); +STATIC mp_obj_t bt_set_pin(mp_obj_t self_in, mp_obj_t arg) { + set_pin(mp_obj_get_int(arg)); + return mp_const_none; +} +STATIC MP_DEFINE_CONST_FUN_OBJ_2(bt_set_pin_obj, bt_set_pin); + + STATIC mp_obj_t bt_advertise(mp_obj_t self_in, mp_obj_t enable) { if (mp_obj_is_true(enable)) { // some sensible time to wait for the advertisement configuration to complete mp_hal_delay_ms(50); - if (!bt_obj.secure){ - esp_ble_gap_start_advertising(&bt_adv_params); - } else { - esp_ble_gap_start_advertising(&bt_adv_params_sec); - } + esp_ble_gap_start_advertising(&bt_adv_params); bt_obj.advertising = true; } else { esp_ble_gap_stop_advertising(); @@ -2107,6 +2101,7 @@ STATIC const mp_map_elem_t bt_locals_dict_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR_set_advertisement_params),(mp_obj_t)&bt_set_advertisement_params_obj }, { MP_OBJ_NEW_QSTR(MP_QSTR_set_advertisement), (mp_obj_t)&bt_set_advertisement_obj }, { MP_OBJ_NEW_QSTR(MP_QSTR_set_advertisement_raw), (mp_obj_t)&bt_set_advertisement_raw_obj }, + { MP_OBJ_NEW_QSTR(MP_QSTR_set_pin), (mp_obj_t)&bt_set_pin_obj }, { MP_OBJ_NEW_QSTR(MP_QSTR_advertise), (mp_obj_t)&bt_advertise_obj }, { MP_OBJ_NEW_QSTR(MP_QSTR_service), (mp_obj_t)&bt_service_obj }, { MP_OBJ_NEW_QSTR(MP_QSTR_callback), (mp_obj_t)&bt_callback_obj }, @@ -2160,6 +2155,15 @@ STATIC const mp_map_elem_t bt_locals_dict_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR_PROP_AUTH), MP_OBJ_NEW_SMALL_INT(ESP_GATT_CHAR_PROP_BIT_AUTH) }, { MP_OBJ_NEW_QSTR(MP_QSTR_PROP_EXT_PROP), MP_OBJ_NEW_SMALL_INT(ESP_GATT_CHAR_PROP_BIT_EXT_PROP) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_PERM_READ), MP_OBJ_NEW_SMALL_INT(ESP_GATT_PERM_READ) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_PERM_READ_ENCRYPTED), MP_OBJ_NEW_SMALL_INT(ESP_GATT_PERM_READ_ENCRYPTED) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_PERM_READ_ENC_MITM), MP_OBJ_NEW_SMALL_INT(ESP_GATT_PERM_READ_ENC_MITM) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_PERM_WRITE), MP_OBJ_NEW_SMALL_INT(ESP_GATT_PERM_WRITE) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_PERM_WRITE_ENCRYPTED), MP_OBJ_NEW_SMALL_INT(ESP_GATT_PERM_WRITE_ENCRYPTED) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_PERM_WRITE_ENC_MITM), MP_OBJ_NEW_SMALL_INT(ESP_GATT_PERM_WRITE_ENC_MITM) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_PERM_WRITE_SIGNED), MP_OBJ_NEW_SMALL_INT(ESP_GATT_PERM_WRITE_SIGNED) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_PERM_WRITE_SIGNED_MITM), MP_OBJ_NEW_SMALL_INT(ESP_GATT_PERM_WRITE_SIGNED_MITM) }, + // Defined at https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth.descriptor.gatt.client_characteristic_configuration.xml { MP_OBJ_NEW_QSTR(MP_QSTR_CHAR_CONFIG_NOTIFY), MP_OBJ_NEW_SMALL_INT(1 << 0) }, { MP_OBJ_NEW_QSTR(MP_QSTR_CHAR_CONFIG_INDICATE), MP_OBJ_NEW_SMALL_INT(1 << 1) }, diff --git a/esp32/mods/modpycom.c b/esp32/mods/modpycom.c index 312a675877..477abc2e17 100644 --- a/esp32/mods/modpycom.c +++ b/esp32/mods/modpycom.c @@ -850,17 +850,16 @@ STATIC mp_obj_t mod_pycom_sigfox_info (size_t n_args, const mp_obj_t *pos_args, if (args[ARG_id].u_obj == mp_const_none && args[ARG_pac].u_obj == mp_const_none && args[ARG_public_key].u_obj == mp_const_none && args[ARG_private_key].u_obj == mp_const_none) { + // query sigfox info - mp_obj_tuple_t *t = MP_OBJ_TO_PTR(mp_obj_new_tuple(4, NULL)); - - t->items[ARG_id] = is_empty(id, sizeof(id)) ? mp_const_none:mp_obj_new_str((const char*)id, sizeof(id)); - t->items[ARG_pac] = is_empty(pac, sizeof(pac)) ? mp_const_none:mp_obj_new_str((const char*)pac, sizeof(pac)); - t->items[ARG_public_key] = is_empty(public_key, sizeof(public_key)) ? mp_const_none:mp_obj_new_str((const char*)public_key, sizeof(public_key)); - t->items[ARG_private_key] = is_empty(private_key, sizeof(private_key)) ? mp_const_none:mp_obj_new_str((const char*)private_key, sizeof(private_key)); - - return MP_OBJ_FROM_PTR(t); - + if ( !is_empty(id, sizeof(id)) && !is_empty(pac, sizeof(pac)) && !is_empty(public_key, sizeof(public_key)) && !is_empty(private_key, sizeof(private_key)) ){ + // all configs valid + return mp_const_true; + } else { + return mp_const_false; + } } else { + // write sigfox info // temporary array to store even the longest value from id, pac, public_key and private_key uint8_t tmp_array[16]; @@ -892,7 +891,7 @@ STATIC mp_obj_t mod_pycom_sigfox_info (size_t n_args, const mp_obj_t *pos_args, ret_val = config_set_sigfox_id(tmp_array); if (ret_val == false) { - return mp_const_false; + nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "Failed to write id")); } } else { nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "Use force option to overwrite existing id!")); @@ -923,7 +922,7 @@ STATIC mp_obj_t mod_pycom_sigfox_info (size_t n_args, const mp_obj_t *pos_args, ret_val = config_set_sigfox_pac(tmp_array); if (ret_val == false) { - return mp_const_false; + nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "Failed to write pac")); } } else { nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "Use force option to overwrite existing pac!")); @@ -954,7 +953,7 @@ STATIC mp_obj_t mod_pycom_sigfox_info (size_t n_args, const mp_obj_t *pos_args, ret_val = config_set_sigfox_public_key(tmp_array); if (ret_val == false) { - return mp_const_false; + nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "Failed to write public key")); } } else { nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "Use force option to overwrite existing public key!")); @@ -986,7 +985,7 @@ STATIC mp_obj_t mod_pycom_sigfox_info (size_t n_args, const mp_obj_t *pos_args, ret_val = config_set_sigfox_private_key(tmp_array); if (ret_val == false) { - return mp_const_false; + nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "Failed to write private key")); } } else { nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "Use force option to overwrite existing private key!")); @@ -994,7 +993,6 @@ STATIC mp_obj_t mod_pycom_sigfox_info (size_t n_args, const mp_obj_t *pos_args, } return mp_const_true; } - return mp_const_none; } STATIC MP_DEFINE_CONST_FUN_OBJ_KW(mod_pycom_sigfox_info_obj, 0, mod_pycom_sigfox_info); diff --git a/esp32/mods/modussl.c b/esp32/mods/modussl.c index 1af1d6a73a..78227c1039 100644 --- a/esp32/mods/modussl.c +++ b/esp32/mods/modussl.c @@ -41,6 +41,25 @@ /****************************************************************************** DECLARE PRIVATE DATA ******************************************************************************/ +// tiny object for storing ssl sessions +STATIC mp_obj_t ssl_session_free(mp_obj_t self_in) { + mp_obj_ssl_session_t *self = self_in; + mbedtls_ssl_session_free(&self->saved_session); + return mp_const_none; +} +STATIC MP_DEFINE_CONST_FUN_OBJ_1(ssl_session_free_obj, ssl_session_free); + +STATIC const mp_map_elem_t ssl_session_locals_dict_table[] = { + { MP_OBJ_NEW_QSTR(MP_QSTR___del__), (mp_obj_t)&ssl_session_free_obj }, +}; +STATIC MP_DEFINE_CONST_DICT(ssl_session_locals_dict, ssl_session_locals_dict_table); + +static const mp_obj_type_t mod_ssl_session_type = { + { &mp_type_type }, + .name = MP_QSTR_SSLSession, + .locals_dict = (mp_obj_t)&ssl_session_locals_dict, +}; + // ssl sockets inherit from normal socket, so we take its // locals and stream methods STATIC const mp_obj_type_t ssl_socket_type = { @@ -52,7 +71,7 @@ STATIC const mp_obj_type_t ssl_socket_type = { .locals_dict = (mp_obj_t)&socket_locals_dict, }; -static int32_t mod_ssl_setup_socket (mp_obj_ssl_socket_t *ssl_sock, const char *host_name, +static int32_t mod_ssl_setup_socket (mp_obj_ssl_socket_t *ssl_sock, const mbedtls_ssl_session *saved_session, const char *host_name, const char *ca_cert, const char *client_cert, const char *client_key, uint32_t ssl_verify, uint32_t client_or_server) { @@ -120,6 +139,12 @@ static int32_t mod_ssl_setup_socket (mp_obj_ssl_socket_t *ssl_sock, const char * // printf("mbedtls_ssl_setup returned -0x%x\n\n", -ret); return ret; } + if (saved_session != NULL) { + if ((ret = mbedtls_ssl_set_session(&ssl_sock->ssl, saved_session)) != 0) { + // printf("mbedtls_ssl_set_session returned -0x%x\n\n", -ret); + return ret; + } + } if (host_name) { // printf("Setting hostname for TLS session...\n"); @@ -184,6 +209,7 @@ STATIC mp_obj_t mod_ssl_wrap_socket(mp_uint_t n_args, const mp_obj_t *pos_args, { MP_QSTR_ssl_version, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0} }, { MP_QSTR_ca_certs, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} }, { MP_QSTR_server_hostname, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} }, + { MP_QSTR_saved_session, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} }, { MP_QSTR_timeout, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} }, }; @@ -212,6 +238,21 @@ STATIC mp_obj_t mod_ssl_wrap_socket(mp_uint_t n_args, const mp_obj_t *pos_args, goto arg_error; } + // socket type check + if (!mp_obj_is_type(args[0].u_obj, &socket_type)) { + goto arg_error; + } + + // saved_session type check + if (args[8].u_obj != mp_const_none) { + if (!mp_obj_is_type(args[8].u_obj, &mod_ssl_session_type)) { + goto arg_error; + } + } + + // Retrieve previously saved session + const mbedtls_ssl_session *saved_session = (args[8].u_obj == mp_const_none) ? NULL : &((mp_obj_ssl_session_t *)args[8].u_obj)->saved_session; + // create the ssl socket mp_obj_ssl_socket_t *ssl_sock = m_new_obj_with_finaliser(mp_obj_ssl_socket_t); // ssl sockets inherit all properties from the original socket @@ -220,13 +261,13 @@ STATIC mp_obj_t mod_ssl_wrap_socket(mp_uint_t n_args, const mp_obj_t *pos_args, ssl_sock->o_sock = args[0].u_obj; // this is needed so that the GC doesnt collect the socket //Read timeout - if(args[8].u_obj == mp_const_none) + if(args[9].u_obj == mp_const_none) { ssl_sock->read_timeout = DEFAULT_SSL_READ_TIMEOUT; } else { - ssl_sock->read_timeout = mp_obj_get_int(args[8].u_obj); + ssl_sock->read_timeout = mp_obj_get_int(args[9].u_obj); } const char *ca_cert = NULL; @@ -253,7 +294,7 @@ STATIC mp_obj_t mod_ssl_wrap_socket(mp_uint_t n_args, const mp_obj_t *pos_args, MP_THREAD_GIL_EXIT(); - _error = mod_ssl_setup_socket(ssl_sock, host_name, ca_cert, client_cert, client_key, + _error = mod_ssl_setup_socket(ssl_sock, saved_session, host_name, ca_cert, client_cert, client_key, verify_type, server_side ? MBEDTLS_SSL_IS_SERVER : MBEDTLS_SSL_IS_CLIENT); MP_THREAD_GIL_ENTER(); @@ -269,9 +310,42 @@ STATIC mp_obj_t mod_ssl_wrap_socket(mp_uint_t n_args, const mp_obj_t *pos_args, } STATIC MP_DEFINE_CONST_FUN_OBJ_KW(mod_ssl_wrap_socket_obj, 0, mod_ssl_wrap_socket); +STATIC mp_obj_t mod_ssl_save_session(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { + STATIC const mp_arg_t allowed_args[] = { + { MP_QSTR_ssl_sock, MP_ARG_REQUIRED | MP_ARG_OBJ, }, + }; + + int32_t _error; + + // parse arguments + mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)]; + mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args); + + mp_obj_ssl_socket_t *ssl_sock = args[0].u_obj; + + // Create the SSL session obj + mp_obj_ssl_session_t *ssl_session = m_new_obj_with_finaliser(mp_obj_ssl_session_t); + ssl_session->base.type = &mod_ssl_session_type; + memset(&ssl_session->saved_session, 0, sizeof(mbedtls_ssl_session)); + + MP_THREAD_GIL_EXIT(); + + _error = mbedtls_ssl_get_session(&ssl_sock->ssl, &ssl_session->saved_session); + + MP_THREAD_GIL_ENTER(); + + if (_error) { + mp_raise_OSError(_error); + } + + return ssl_session; +} +STATIC MP_DEFINE_CONST_FUN_OBJ_KW(mod_ssl_save_session_obj, 0, mod_ssl_save_session); + STATIC const mp_map_elem_t mp_module_ussl_globals_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_ussl) }, { MP_OBJ_NEW_QSTR(MP_QSTR_wrap_socket), (mp_obj_t)&mod_ssl_wrap_socket_obj }, + { MP_OBJ_NEW_QSTR(MP_QSTR_save_session), (mp_obj_t)&mod_ssl_save_session_obj }, // class exceptions { MP_OBJ_NEW_QSTR(MP_QSTR_SSLError), (mp_obj_t)&mp_type_OSError }, @@ -295,4 +369,3 @@ const mp_obj_module_t mp_module_ussl = { .base = { &mp_type_module }, .globals = (mp_obj_dict_t*)&mp_module_ussl_globals, }; - diff --git a/esp32/mods/modussl.h b/esp32/mods/modussl.h index 0422e97c5b..9784311eb4 100644 --- a/esp32/mods/modussl.h +++ b/esp32/mods/modussl.h @@ -45,4 +45,9 @@ typedef struct _mp_obj_ssl_socket_t { uint8_t read_timeout; } mp_obj_ssl_socket_t; +typedef struct _mp_obj_ssl_session_t { + mp_obj_base_t base; + mbedtls_ssl_session saved_session; +} mp_obj_ssl_session_t; + #endif /* MODUSSL_H_ */ diff --git a/esp32/pycom_version.h b/esp32/pycom_version.h index 197328186a..11e7bc4182 100644 --- a/esp32/pycom_version.h +++ b/esp32/pycom_version.h @@ -10,7 +10,7 @@ #ifndef VERSION_H_ #define VERSION_H_ -#define SW_VERSION_NUMBER "1.20.2.rc3" +#define SW_VERSION_NUMBER "1.20.2.rc6" #define LORAWAN_VERSION_NUMBER "1.0.2" diff --git a/esp32/sigfox/README b/esp32/sigfox/README index 6b2cc122ba..1da6e7dbd6 100644 --- a/esp32/sigfox/README +++ b/esp32/sigfox/README @@ -6,7 +6,7 @@ There are three prebuilt libraries for SIPY, LOPY4, and FIPY. git clone -b sigfox git@github.com:pycom/pyupython.git src cd src -git checkout ba89a617475d0e4f57bb135f395b9ecf48eaa3b0 +git checkout ba89a617 cd ../.. make BOARD=LOPY4 TARGET=sigfox make BOARD=FIPY TARGET=sigfox diff --git a/esp32/sigfox/modsigfox_FIPY.a b/esp32/sigfox/modsigfox_FIPY.a index dbe87115c9..d579f9a157 100644 Binary files a/esp32/sigfox/modsigfox_FIPY.a and b/esp32/sigfox/modsigfox_FIPY.a differ diff --git a/esp32/sigfox/modsigfox_LOPY4.a b/esp32/sigfox/modsigfox_LOPY4.a index 5dc016b666..34c56ab98e 100644 Binary files a/esp32/sigfox/modsigfox_LOPY4.a and b/esp32/sigfox/modsigfox_LOPY4.a differ diff --git a/esp32/sigfox/modsigfox_SIPY.a b/esp32/sigfox/modsigfox_SIPY.a index cad1fe2702..948e803688 100644 Binary files a/esp32/sigfox/modsigfox_SIPY.a and b/esp32/sigfox/modsigfox_SIPY.a differ diff --git a/esp32/tools/fw_updater/updater.py b/esp32/tools/fw_updater/updater.py index aded82e35f..e9bda31ce7 100755 --- a/esp32/tools/fw_updater/updater.py +++ b/esp32/tools/fw_updater/updater.py @@ -43,7 +43,7 @@ FAST_BAUD_RATE = 921600 MAXPICREAD_BAUD_RATE = 230400 -LORA_REGIONS = ["EU868", "US915", "AS923", "AU915"] +LORA_REGIONS = ["EU868", "US915", "AS923", "AU915", "IN865"] PIC_BOARDS = ["04D8:F013", "04D8:F012", "04D8:EF98", "04D8:EF38"] @@ -678,6 +678,55 @@ def set_wifi_config(self, config_block, wifi_ssid=None, wifi_pwd=None, wifi_on_b +config_block[152:] return self.set_pybytes_config(new_config_block, force_update=True) + def set_lte_config(self, config_block, carrier=None, apn=None, lte_type=None, cid=None, band=None, reset=None): + config_block = config_block.ljust(int(PARTITIONS.get('config')[1], 16), b'\x00') + + if carrier is not None: + cb_carrier = str(carrier[0:128]).ljust(129, b'\x00') + print(cb_carrier) + else: + cb_carrier = config_block[634:763] + + if apn is not None: + cb_apn = str(apn[0:128]).ljust(129, b'\x00') + else: + cb_apn = config_block[763:892] + + if lte_type is not None: + cb_lte_type = str(lte_type[0:16]).ljust(17, b'\x00') + else: + cb_lte_type = config_block[892:909] + + if cid is not None: + cb_cid = struct.pack('>B', int(cid)) + else: + cb_cid = config_block[909] + + if band is not None: + cb_band = struct.pack('>B', int(band)) + else: + cb_band = config_block[910] + + if reset is not None: + cb_reset = struct.pack('>B', int(reset=='True')) + else: + cb_reset = config_block[911] + print(cb_reset) + + new_config_block = config_block[0:634] \ + +cb_carrier \ + +cb_apn \ + +cb_lte_type \ + +cb_cid \ + +cb_band \ + +cb_reset \ + +config_block[912:] + return self.set_pybytes_config(new_config_block, force_update=True) + + + + + def set_pycom_config(self, config_block, boot_fs_type=None): print_debug('This is set_pycom_config with boot_fs_type={} [{}]'.format(boot_fs_type, type(boot_fs_type))) config_block = config_block.ljust(int(PARTITIONS.get('config')[1], 16), b'\x00') @@ -702,10 +751,11 @@ def set_pycom_config(self, config_block, boot_fs_type=None): return self.set_pybytes_config(new_config_block, force_update=True) def print_cb(self, config_block): - for x in range(0, 20): - print(binascii.hexlify(config_block[x * 32:x * 32 + 32])) + if DEBUG: + for x in range(0, 30): + print(binascii.hexlify(config_block[x * 32:x * 32 + 32])) - def set_pybytes_config(self, config_block, userid=None, device_token=None, mqttServiceAddress=None, network_preferences=None, extra_preferences=None, force_update=None): + def set_pybytes_config(self, config_block, userid=None, device_token=None, mqttServiceAddress=None, network_preferences=None, extra_preferences=None, force_update=None, auto_start=None): config_block = config_block.ljust(int(PARTITIONS.get('config')[1], 16), b'\x00') if device_token is not None: token = str(device_token)[0:39].ljust(40, b'\x00') @@ -740,6 +790,14 @@ def set_pybytes_config(self, config_block, userid=None, device_token=None, mqttS else: fu = config_block[497] + if auto_start is not None: + if auto_start: + asf = b'\x01' + else: + asf = b'\x00' + else: + asf = config_block[498] + new_config_block = config_block[0:162] \ +token \ +address \ @@ -747,7 +805,8 @@ def set_pybytes_config(self, config_block, userid=None, device_token=None, mqttS +nwp \ +ep \ +fu \ - +config_block[498:] + +asf \ + +config_block[499:] # self.print_cb(new_config_block) return new_config_block @@ -918,6 +977,13 @@ def process_arguments(): cmd_parser_pybytes.add_argument('--uid', default=None, help='Set userId') cmd_parser_pybytes.add_argument('--nwprefs', default=None, help='Set network preferences') cmd_parser_pybytes.add_argument('--extraprefs', default=None, help='Set extra preferences') + cmd_parser_pybytes.add_argument('--carrier', default=None, help='Set LTE carrier') + cmd_parser_pybytes.add_argument('--apn', default=None, help='Set LTE apn') + cmd_parser_pybytes.add_argument('--type', default=None, help='Set LTE type') + cmd_parser_pybytes.add_argument('--cid', default=None, help='Set LTE cid') + cmd_parser_pybytes.add_argument('--band', default=None, help='Set LTE band') + cmd_parser_pybytes.add_argument('--lte_reset', default=None, type=str2bool, nargs='?', const=True, help='Set LTE reset') + cmd_parser_pybytes.add_argument('--auto_start', default=None, type=str2bool, nargs='?', const=True, help='Set Pybytes auto_start') cmd_parser_cb = subparsers.add_parser('cb', help='Read/Write config block') cmd_parser_cb.add_argument('-f', '--file', default=None, help='name of the backup file (default: .cb)') @@ -1389,8 +1455,16 @@ def progress_fs(msg): or (hasattr(args, "mqtt") and args.mqtt is not None) \ or (hasattr(args, "uid") and args.uid is not None) \ or (hasattr(args, "nwprefs") and args.nwprefs is not None) \ + or (hasattr(args, "auto_start") and args.auto_start is not None) \ + or (hasattr(args, "carrier") and args.carrier is not None) \ + or (hasattr(args, "apn") and args.apn is not None) \ + or (hasattr(args, "type") and args.type is not None) \ + or (hasattr(args, "cid") and args.cid is not None) \ + or (hasattr(args, "band") and args.band is not None) \ + or (hasattr(args, "lte_reset") and args.lte_reset is not None) \ or (hasattr(args, "extraprefs") and args.extraprefs is not None): - new_config_block = nPy.set_pybytes_config(config_block, args.uid, args.token, args.mqtt, args.nwprefs, args.extraprefs, True) + new_config_block = nPy.set_pybytes_config(config_block, args.uid, args.token, args.mqtt, args.nwprefs, args.extraprefs, True, args.auto_start) + new_config_block = nPy.set_lte_config(new_config_block, args.carrier, args.apn, args.type, args.cid, args.band, args.reset) nPy.write(int(PARTITIONS.get('config')[0], 16), new_config_block) sys.stdout = old_stdout else: diff --git a/esp32/tools/mpy-build-check.sh b/esp32/tools/mpy-build-check.sh index 507822910d..5556936d2d 100644 --- a/esp32/tools/mpy-build-check.sh +++ b/esp32/tools/mpy-build-check.sh @@ -1,4 +1,7 @@ #!/bin/bash +# Check whether we should rebuild the frozen Micro Python code + +set -e BOARD="$1" RELEASE_TYP="$2" @@ -7,49 +10,50 @@ PY_PATH="./frozen" PY_DIRS="$(ls ${PY_PATH})" OS="$(uname)" if [ ${VARIANT} != "BASE" ] ; then - BUILD_DIR="build-${VARIANT}" + BUILD_DIR="build-${VARIANT}/${BOARD}/${RELEASE_TYP}" else - BUILD_DIR="build" + BUILD_DIR="build/${BOARD}/${RELEASE_TYP}" fi -#Script Has to be called from esp32 Dir +# Script has to be called from esp32 dir if ! [ $0 = "tools/mpy-build-check.sh" ]; then echo "Need to run as tools/mpy-build-check.sh!" >&2 exit 1 fi -#Check Board Type +# Check board type if [ "${BOARD}" != "WIPY" -a "${BOARD}" != "SIPY" -a "${BOARD}" != "LOPY" -a "${BOARD}" != "LOPY4" -a "${BOARD}" != "GPY" -a "${BOARD}" != "FIPY" ] ; then echo "Invalid Board name for MPY build!" >&2 exit 1 fi -BUILD_TIMESTAMP=./"${BUILD_DIR}"/${BOARD}"/"${RELEASE_TYP}"/"mpy_last_build_timestamp.TS - -#If Last mpy Build Timestamp Not avialable create it -if [ ! -d ${BUILD_DIR}/${BOARD}/${RELEASE_TYP} ] ; then - exit 0 -else - if [ ! -f ${BUILD_TIMESTAMP} ] ; then - $(touch ${BUILD_TIMESTAMP}) - fi -fi -#Get Current Timestamp +# Get current timestamp CURR_TS="$(date +"%s")" -MPY_PATH=./"${BUILD_DIR}"/"${BOARD}"/"${RELEASE_TYP}"/frozen_mpy +BUILD_TIMESTAMP="${BUILD_DIR}/mpy_last_build_timestamp.TS" + + +MPY_PATH="${BUILD_DIR}/frozen_mpy" if ! [ -d ${MPY_PATH} ] ; then - #Build Directory not created yet - #Update Last Build Timestamp - $(echo ${CURR_TS} > ${BUILD_TIMESTAMP}) + # Build directory does not exist + # Update last build timestamp + mkdir -p ${BUILD_DIR} + echo ${CURR_TS} > ${BUILD_TIMESTAMP} exit 0 fi -LAST_BUILD=$(<${BUILD_TIMESTAMP}) -#Check if any of Frozen Directorys has been updated.. Rebuild out Mpy files +# Get last build timestamp +if [ ! -f ${BUILD_TIMESTAMP} ] ; then + LAST_BUILD=0 +else + LAST_BUILD=$(<${BUILD_TIMESTAMP}) +fi + + +# Remove Mpy build directory if any of the frozen directories have been updated for dir in ${PY_DIRS} do if [[ "${dir}" =~ ^\\.* ]] ; then @@ -65,14 +69,14 @@ do if [[ ${TS} -gt ${LAST_BUILD} ]] ; then echo "Rebuilding frozen Code!" >&2 - #Remove all MPY out files to be rubuild again by Makefile - $(rm -rf ${MPY_PATH}) - #Update Last Build Timestamp - $(echo ${CURR_TS} > ${BUILD_TIMESTAMP}) + # Remove the build directory to trigger a rebuild from the Makefile + rm -rf ${MPY_PATH} + # Update last build timestamp + echo ${CURR_TS} > ${BUILD_TIMESTAMP} exit 0 fi done -#Update Last Build Timestamp -$(echo ${CURR_TS} > ${BUILD_TIMESTAMP}) +# Update last build timestamp +echo ${CURR_TS} > ${BUILD_TIMESTAMP} exit 0 diff --git a/lib/utils/pyexec.c b/lib/utils/pyexec.c index c5fa5ffaec..ea67f5867c 100644 --- a/lib/utils/pyexec.c +++ b/lib/utils/pyexec.c @@ -491,12 +491,13 @@ int pyexec_friendly_repl(void) { } else if (ret == CHAR_CTRL_D) { // exit for a soft reset mp_hal_stdout_tx_str("\r\n"); -#if (VARIANT == PYBYTES) - continue; -#else - vstr_clear(&line); - return PYEXEC_FORCED_EXIT; -#endif + if (config_get_pybytes_autostart()) { + continue; + } + else { + vstr_clear(&line); + return PYEXEC_FORCED_EXIT; + } } else if (ret == CHAR_CTRL_E) { // paste mode mp_hal_stdout_tx_str("\r\npaste mode; Ctrl-C to cancel, Ctrl-D to finish\r\n=== "); diff --git a/tests/thread/mutate_bytearray.py b/tests/thread/mutate_bytearray.py index f3276f1b2d..cbaf7691d0 100644 --- a/tests/thread/mutate_bytearray.py +++ b/tests/thread/mutate_bytearray.py @@ -3,6 +3,7 @@ # MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd import _thread +import time # the shared bytearray ba = bytearray() @@ -34,7 +35,7 @@ def th(n, lo, hi): # busy wait for threads to finish while n_finished < n_thread: - pass + time.sleep(0.01) # check bytearray has correct contents print(len(ba)) @@ -42,4 +43,3 @@ def th(n, lo, hi): for b in ba: count[b] += 1 print(count) - diff --git a/tests/thread/mutate_dict.py b/tests/thread/mutate_dict.py index c57d332d51..a1b308a032 100644 --- a/tests/thread/mutate_dict.py +++ b/tests/thread/mutate_dict.py @@ -3,6 +3,7 @@ # MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd import _thread +import time # the shared dict di = {'a':'A', 'b':'B', 'c':'C', 'd':'D'} @@ -36,7 +37,7 @@ def th(n, lo, hi): # busy wait for threads to finish while n_finished < n_thread: - pass + time.sleep(0.01) # check dict has correct contents print(sorted(di.items())) diff --git a/tests/thread/mutate_instance.py b/tests/thread/mutate_instance.py index a1ae428b54..b35d5299fc 100644 --- a/tests/thread/mutate_instance.py +++ b/tests/thread/mutate_instance.py @@ -3,6 +3,7 @@ # MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd import _thread +import time # the shared user class and instance class User: @@ -35,7 +36,7 @@ def th(n, lo, hi): # busy wait for threads to finish while n_finished < n_thread: - pass + time.sleep(0.01) # check user instance has correct contents print(user.a, user.b, user.c) diff --git a/tests/thread/mutate_list.py b/tests/thread/mutate_list.py index 764a9bd99e..f16d052cfc 100644 --- a/tests/thread/mutate_list.py +++ b/tests/thread/mutate_list.py @@ -3,6 +3,7 @@ # MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd import _thread +import time # the shared list li = list() @@ -37,7 +38,7 @@ def th(n, lo, hi): # busy wait for threads to finish while n_finished < n_thread: - pass + time.sleep(0.01) # check list has correct contents li.sort() diff --git a/tests/thread/mutate_set.py b/tests/thread/mutate_set.py index 5492d86313..cdedbb66cd 100644 --- a/tests/thread/mutate_set.py +++ b/tests/thread/mutate_set.py @@ -3,6 +3,7 @@ # MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd import _thread +import time # the shared set se = set([-1, -2, -3, -4]) @@ -31,7 +32,7 @@ def th(n, lo, hi): # busy wait for threads to finish while n_finished < n_thread: - pass + time.sleep(0.01) # check set has correct contents print(sorted(se)) diff --git a/tests/thread/stress_create.py b/tests/thread/stress_create.py index 2399746cca..cb9423ecc7 100644 --- a/tests/thread/stress_create.py +++ b/tests/thread/stress_create.py @@ -15,7 +15,7 @@ def thread_entry(n): _thread.start_new_thread(thread_entry, (thread_num,)) thread_num += 1 except MemoryError: - pass + time.sleep(0.01) # wait for the last threads to terminate time.sleep(1) diff --git a/tests/thread/stress_recurse.py b/tests/thread/stress_recurse.py index 68367c4dd7..9bccd54820 100644 --- a/tests/thread/stress_recurse.py +++ b/tests/thread/stress_recurse.py @@ -3,6 +3,7 @@ # MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd import _thread +import time def foo(): foo() @@ -21,5 +22,5 @@ def thread_entry(): # busy wait for thread to finish while not finished: - pass + time.sleep(0.01) print('done') diff --git a/tests/thread/thread_exc1.py b/tests/thread/thread_exc1.py index 10fb94b4fb..1c840428a8 100644 --- a/tests/thread/thread_exc1.py +++ b/tests/thread/thread_exc1.py @@ -3,6 +3,7 @@ # MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd import _thread +import time def foo(): raise ValueError @@ -26,5 +27,5 @@ def thread_entry(): # busy wait for threads to finish while n_finished < n_thread: - pass + time.sleep(0.01) print('done') diff --git a/tests/thread/thread_gc1.py b/tests/thread/thread_gc1.py index 8dcbf7e07a..e1aa1c6f16 100644 --- a/tests/thread/thread_gc1.py +++ b/tests/thread/thread_gc1.py @@ -4,6 +4,7 @@ import gc import _thread +import time def thread_entry(n): # allocate a bytearray and fill it @@ -31,4 +32,4 @@ def thread_entry(n): # busy wait for threads to finish while n_finished < n_thread: - pass + time.sleep(0.01) diff --git a/tests/thread/thread_ident1.py b/tests/thread/thread_ident1.py index 217fce73b1..66c6c990a3 100644 --- a/tests/thread/thread_ident1.py +++ b/tests/thread/thread_ident1.py @@ -3,6 +3,7 @@ # MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd import _thread +import time def thread_entry(): tid = _thread.get_ident() @@ -17,5 +18,5 @@ def thread_entry(): _thread.start_new_thread(thread_entry, ()) while not finished: - pass + time.sleep(0.01) print('done') diff --git a/tests/thread/thread_lock3.py b/tests/thread/thread_lock3.py index 607898dad8..0713522a99 100644 --- a/tests/thread/thread_lock3.py +++ b/tests/thread/thread_lock3.py @@ -3,6 +3,7 @@ # MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd import _thread +import time lock = _thread.allocate_lock() n_thread = 10 @@ -24,4 +25,4 @@ def thread_entry(idx): # busy wait for threads to finish while n_finished < n_thread: - pass + time.sleep(0.01) diff --git a/tests/thread/thread_shared1.py b/tests/thread/thread_shared1.py index 13c6651cc4..e81231729f 100644 --- a/tests/thread/thread_shared1.py +++ b/tests/thread/thread_shared1.py @@ -3,6 +3,7 @@ # MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd import _thread +import time def foo(i): pass @@ -27,5 +28,5 @@ def thread_entry(n, tup): # busy wait for threads to finish while n_finished < n_thread: - pass + time.sleep(0.01) print(tup) diff --git a/tests/thread/thread_shared2.py b/tests/thread/thread_shared2.py index e4bfe78022..1d8d97d59f 100644 --- a/tests/thread/thread_shared2.py +++ b/tests/thread/thread_shared2.py @@ -4,6 +4,7 @@ # MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd import _thread +import time def foo(lst, i): lst[i] += 1 @@ -28,5 +29,5 @@ def thread_entry(n, lst, idx): # busy wait for threads to finish while n_finished < n_thread: - pass + time.sleep(0.01) print(lst) diff --git a/tests/thread/thread_stacksize1.py b/tests/thread/thread_stacksize1.py index 62b6e5e40d..bbf1596b4f 100644 --- a/tests/thread/thread_stacksize1.py +++ b/tests/thread/thread_stacksize1.py @@ -4,6 +4,7 @@ import sys import _thread +import time # different implementations have different minimum sizes if sys.implementation.name == 'micropython': @@ -43,5 +44,5 @@ def thread_entry(): # busy wait for threads to finish while n_finished < n_thread: - pass + time.sleep(0.01) print('done')