View Issue Details

IDProjectCategoryView StatusLast Update
0037242FPCCompilerpublic2020-07-01 07:53
ReporterChristo Crause Assigned ToFlorian  
PrioritynormalSeverityminorReproducibilityN/A
Status closedResolutionfixed 
Product Version3.3.1 
Fixed in Version3.3.1 
Summary0037242: Xtensa [patch] ESP8266 support for target freertos
DescriptionAttached please find a patch for enabling esp8266 support for freertos. List of changes:

* Changed linking step so that esp32 and esp8266 SDKs can both be supported. Linker scripts have been copied into t_freertos.pas so that SDK make scripts are not required to compile all the linker fragments together. The only complication remaining is that esp8266 SDK requires an esptool.py which supports output version 3 which is not supported by the esp32 SDK tool yet. This is accommodated by requiring the existing ESP_IDF environmental variable pointing to the esp32 folder (as per usual) and a new ESP8266_IDF variable that points to the esp8266 SDK folder.

* Removed a8 and a15 from the register allocator list to avoid clobbering when in use for stack purposes.

* Provide prologue/epilogue for call0 in insert_init_final_table.

* Added esp8266 unit to rtl/freertos/xtensa. Note that the exitproc is not blocking, it will return to user_init_entry where the startup task will delete itself. Blocking with deep sleep similar to esp32 can cause difficult to reflash scenarios. Alternative could be a busy wait, but there is an OS to keep things going so this seem unnecessary.

* Updated freertos makefile to handle lx6 and lx106 subarch's.

* Fixed indentation for call0 code in cpupara.pas.
TagsNo tags attached.
Fixed in Revision
FPCOldBugId
FPCTarget-
Attached Files

Activities

Christo Crause

2020-06-23 19:48

reporter  

esp8266.patch (175,115 bytes)   
diff --git a/compiler/systems/t_freertos.pas b/compiler/systems/t_freertos.pas
index 4efe4deb79..c6d9e3560a 100644
--- a/compiler/systems/t_freertos.pas
+++ b/compiler/systems/t_freertos.pas
@@ -46,7 +46,8 @@ implementation
           function postprocessexecutable(const fn : string;isdll:boolean):boolean;
        end;
 
-
+       var
+         IDF_PATH: string;
 
 {*****************************************************************************
                                   TlinkerEmbedded
@@ -74,15 +75,21 @@ const
 begin
   with Info do
    begin
+     ExeCmd[1]:='ld -g '+platform_select+' $OPT $DYNLINK $STATIC $GCSECTIONS $STRIP $MAP -L. -o $EXE -T $RES';
      if target_info.system=system_xtensa_freertos then
-       ExeCmd[1]:='ld -g '+platform_select+' $OPT $DYNLINK $STATIC $GCSECTIONS $STRIP $MAP -L. -o $EXE -T $RES '+
-         '-u call_user_start_cpu0 -u ld_include_panic_highint_hdl -u esp_app_desc -u vfs_include_syscalls_impl -u pthread_include_pthread_impl -u pthread_include_pthread_cond_impl -u pthread_include_pthread_local_storage_impl -u newlib_include_locks_impl -u newlib_include_heap_impl -u newlib_include_syscalls_impl -u newlib_include_pthread_impl -u app_main -u uxTopUsedPriority '+
-         '-L $IDF_PATH/components/esp_rom/esp32/ld '+
-         '-T esp32.rom.ld -T esp32.rom.libgcc.ld -T esp32.rom.newlib-data.ld -T esp32.rom.syscalls.ld -T esp32.rom.newlib-funcs.ld '+
-         '-L . -T esp32_out.ld -T esp32.project.ld '+
-         '-L $IDF_PATH/components/esp32/ld -T esp32.peripherals.ld'
-     else
-       ExeCmd[1]:='ld -g '+platform_select+' $OPT $DYNLINK $STATIC $GCSECTIONS $STRIP $MAP -L. -o $EXE -T $RES';
+       if current_settings.controllertype = ct_esp8266 then
+         begin
+           IDF_PATH := 'IDF_PATH8266';
+           ExeCmd[1]:=ExeCmd[1]+
+             '-u call_user_start_cpu -u esp_app_desc -L $IDF_PATH8266/libs -T build-linker-script.ld'
+         end
+       else
+         begin
+           ExeCmd[1]:=ExeCmd[1]+
+             '-u call_user_start_cpu0 -u ld_include_panic_highint_hdl -u esp_app_desc -u vfs_include_syscalls_impl -u pthread_include_pthread_impl -u pthread_include_pthread_cond_impl -u pthread_include_pthread_local_storage_impl -u newlib_include_locks_impl -u newlib_include_heap_impl -u newlib_include_syscalls_impl -u newlib_include_pthread_impl -u app_main -u uxTopUsedPriority '+
+             '-L $IDF_PATH/libs -T build-linker-script.ld';
+           IDF_PATH := 'IDF_PATH';
+         end;
    end;
 end;
 
@@ -922,13 +929,2404 @@ begin
   {$ifdef XTENSA}
   with linkres do
     begin
-      Add('SECTIONS');
-      Add('{');
-      Add('  .data :');
-      Add('  {');
-      Add('    KEEP (*(.fpc .fpc.n_version .fpc.n_links))');
-      Add('  }');
-      Add('}');
+      if current_settings.controllertype = ct_esp32 then
+        begin
+          //Add('SECTIONS');
+          //Add('{');
+          //Add('  .data :');
+          //Add('  {');
+          //Add('    KEEP (*(.fpc .fpc.n_version .fpc.n_links))');
+          //Add('  }');
+          //Add('}');
+          Add('/* esp32_out.ld */');
+          Add('MEMORY');
+          Add('{');
+          Add('  iram0_0_seg (RX) : org = 0x40080000, len = 0x20000');
+          Add('  iram0_2_seg (RX) : org = 0x400D0020, len = 0x330000-0x20');
+          Add('  dram0_0_seg (RW) : org = 0x3FFB0000 + 0x0,');
+          Add('                                     len = 0x2c200 - 0x0');
+          Add('  drom0_0_seg (R) : org = 0x3F400020, len = 0x400000-0x20');
+          Add('  rtc_iram_seg(RWX) : org = 0x400C0000, len = 0x2000');
+          Add('  rtc_data_seg(RW) : org = 0x3ff80000, len = 0x2000 - 0');
+          Add('  rtc_slow_seg(RW) : org = 0x50000000 + 0,');
+          Add('                                     len = 0x1000 - 0');
+          Add('  extern_ram_seg(RWX) : org = 0x3F800000,');
+          Add('                                     len = 0x400000');
+          Add('}');
+          Add('_static_data_end = _bss_end;');
+          Add('_heap_end = 0x40000000 - 0x0;');
+          Add('_data_seg_org = ORIGIN(rtc_data_seg);');
+          Add('REGION_ALIAS("rtc_data_location", rtc_slow_seg );');
+          Add('  REGION_ALIAS("default_code_seg", iram0_2_seg);');
+          Add('  REGION_ALIAS("default_rodata_seg", drom0_0_seg);');
+          Add('/* esp32.project.ld */');
+          Add('ENTRY(call_start_cpu0);');
+          Add('SECTIONS');
+          Add('{');
+          Add('  .rtc.text :');
+          Add('  {');
+          Add('    . = ALIGN(4);');
+          Add('    *(EXCLUDE_FILE(*libsoc.a:uart_hal_iram.*) .rtc.literal EXCLUDE_FILE(*libsoc.a:uart_hal_iram.*) .rtc.text EXCLUDE_FILE(*libsoc.a:uart_hal_iram.*) .rtc.text.*)');
+          Add('    *libsoc.a:uart_hal_iram.*( .rtc.literal  .rtc.text  .rtc.text.*)');
+          Add('    *rtc_wake_stub*.*(.literal .text .literal.* .text.*)');
+          Add('    _rtc_text_end = ABSOLUTE(.);');
+          Add('  } > rtc_iram_seg');
+          Add('  .rtc.dummy :');
+          Add('  {');
+          Add('    _rtc_dummy_start = ABSOLUTE(.);');
+          Add('    _rtc_fast_start = ABSOLUTE(.);');
+          Add('    . = SIZEOF(.rtc.text);');
+          Add('    _rtc_dummy_end = ABSOLUTE(.);');
+          Add('  } > rtc_data_seg');
+          Add('  .rtc.force_fast :');
+          Add('  {');
+          Add('    . = ALIGN(4);');
+          Add('    _rtc_force_fast_start = ABSOLUTE(.);');
+          Add('    *(.rtc.force_fast .rtc.force_fast.*)');
+          Add('    . = ALIGN(4) ;');
+          Add('    _rtc_force_fast_end = ABSOLUTE(.);');
+          Add('  } > rtc_data_seg');
+          Add('  .rtc.data :');
+          Add('  {');
+          Add('    _rtc_data_start = ABSOLUTE(.);');
+          Add('    *(EXCLUDE_FILE(*libsoc.a:uart_hal_iram.*) .rtc.data EXCLUDE_FILE(*libsoc.a:uart_hal_iram.*) .rtc.data.* EXCLUDE_FILE(*libsoc.a:uart_hal_iram.*) .rtc.rodata EXCLUDE_FILE(*libsoc.a:uart_hal_iram.*) .rtc.rodata.*)');
+          Add('    *libsoc.a:uart_hal_iram.*( .rtc.data  .rtc.data.*  .rtc.rodata  .rtc.rodata.*)');
+          Add('    *rtc_wake_stub*.*(.data .rodata .data.* .rodata.* .bss .bss.*)');
+          Add('    _rtc_data_end = ABSOLUTE(.);');
+          Add('  } > rtc_data_location');
+          Add('  .rtc.bss (NOLOAD) :');
+          Add('  {');
+          Add('    _rtc_bss_start = ABSOLUTE(.);');
+          Add('    *rtc_wake_stub*.*(.bss .bss.*)');
+          Add('    *rtc_wake_stub*.*(COMMON)');
+          Add('    *(EXCLUDE_FILE(*libsoc.a:uart_hal_iram.*) .rtc.bss)');
+          Add('    *libsoc.a:uart_hal_iram.*( .rtc.bss)');
+          Add('    _rtc_bss_end = ABSOLUTE(.);');
+          Add('  } > rtc_data_location');
+          Add('  .rtc_noinit (NOLOAD):');
+          Add('  {');
+          Add('    . = ALIGN(4);');
+          Add('    _rtc_noinit_start = ABSOLUTE(.);');
+          Add('    *(.rtc_noinit .rtc_noinit.*)');
+          Add('    . = ALIGN(4) ;');
+          Add('    _rtc_noinit_end = ABSOLUTE(.);');
+          Add('  } > rtc_data_location');
+          Add('  .rtc.force_slow :');
+          Add('  {');
+          Add('    . = ALIGN(4);');
+          Add('    _rtc_force_slow_start = ABSOLUTE(.);');
+          Add('    *(.rtc.force_slow .rtc.force_slow.*)');
+          Add('    . = ALIGN(4) ;');
+          Add('    _rtc_force_slow_end = ABSOLUTE(.);');
+          Add('  } > rtc_slow_seg');
+          Add('  _rtc_slow_length = (ORIGIN(rtc_slow_seg) == ORIGIN(rtc_data_location))');
+          Add('                        ? (_rtc_force_slow_end - _rtc_data_start)');
+          Add('                        : (_rtc_force_slow_end - _rtc_force_slow_start);');
+          Add('  _rtc_fast_length = (ORIGIN(rtc_slow_seg) == ORIGIN(rtc_data_location))');
+          Add('                        ? (_rtc_force_fast_end - _rtc_fast_start)');
+          Add('                        : (_rtc_noinit_end - _rtc_fast_start);');
+          Add('  ASSERT((_rtc_slow_length <= LENGTH(rtc_slow_seg)),');
+          Add('          "RTC_SLOW segment data does not fit.")');
+          Add('  ASSERT((_rtc_fast_length <= LENGTH(rtc_data_seg)),');
+          Add('          "RTC_FAST segment data does not fit.")');
+          Add('  .iram0.vectors :');
+          Add('  {');
+          Add('    _iram_start = ABSOLUTE(.);');
+          Add('    /* Vectors go to IRAM */');
+          Add('    _init_start = ABSOLUTE(.);');
+          Add('    /* Vectors according to builds/RF-2015.2-win32/esp108_v1_2_s5_512int_2/config.html */');
+          Add('    . = 0x0;');
+          Add('    KEEP(*(.WindowVectors.text));');
+          Add('    . = 0x180;');
+          Add('    KEEP(*(.Level2InterruptVector.text));');
+          Add('    . = 0x1c0;');
+          Add('    KEEP(*(.Level3InterruptVector.text));');
+          Add('    . = 0x200;');
+          Add('    KEEP(*(.Level4InterruptVector.text));');
+          Add('    . = 0x240;');
+          Add('    KEEP(*(.Level5InterruptVector.text));');
+          Add('    . = 0x280;');
+          Add('    KEEP(*(.DebugExceptionVector.text));');
+          Add('    . = 0x2c0;');
+          Add('    KEEP(*(.NMIExceptionVector.text));');
+          Add('    . = 0x300;');
+          Add('    KEEP(*(.KernelExceptionVector.text));');
+          Add('    . = 0x340;');
+          Add('    KEEP(*(.UserExceptionVector.text));');
+          Add('    . = 0x3C0;');
+          Add('    KEEP(*(.DoubleExceptionVector.text));');
+          Add('    . = 0x400;');
+          Add('    *(.*Vector.literal)');
+          Add('    *(.UserEnter.literal);');
+          Add('    *(.UserEnter.text);');
+          Add('    . = ALIGN (16);');
+          Add('    *(.entry.text)');
+          Add('    *(.init.literal)');
+          Add('    *(.init)');
+          Add('    _init_end = ABSOLUTE(.);');
+          Add('  } > iram0_0_seg');
+          Add('  .iram0.text :');
+          Add('  {');
+          Add('    _iram_text_start = ABSOLUTE(.);');
+          Add('    *(EXCLUDE_FILE(*libsoc.a:uart_hal_iram.*) .iram1 EXCLUDE_FILE(*libsoc.a:uart_hal_iram.*) .iram1.*)');
+          Add('    *libsoc.a:rtc_init.*( .literal  .literal.*  .text  .text.*)');
+          Add('    *libsoc.a:rtc_time.*( .literal  .literal.*  .text  .text.*)');
+          Add('    *libsoc.a:ledc_hal_iram.*( .literal  .literal.*  .text  .text.*)');
+          Add('    *libsoc.a:rtc_wdt.*( .literal  .literal.*  .text  .text.*)');
+          Add('    *libsoc.a:spi_flash_hal_gpspi.*( .literal  .literal.*  .text  .text.*)');
+          Add('    *libsoc.a:spi_slave_hal_iram.*( .literal  .literal.*  .text  .text.*)');
+          Add('    *libsoc.a:lldesc.*( .literal  .literal.*  .text  .text.*)');
+          Add('    *libsoc.a:rtc_periph.*( .literal  .literal.*  .text  .text.*)');
+          Add('    *libsoc.a:rtc_pm.*( .literal  .literal.*  .text  .text.*)');
+          Add('    *libsoc.a:rtc_clk_init.*( .literal  .literal.*  .text  .text.*)');
+          Add('    *libsoc.a:uart_hal_iram.*( .iram1  .iram1.*)');
+          Add('    *libsoc.a:spi_hal_iram.*( .literal  .literal.*  .text  .text.*)');
+          Add('    *libsoc.a:rtc_sleep.*( .literal  .literal.*  .text  .text.*)');
+          Add('    *libsoc.a:spi_flash_hal_iram.*( .literal  .literal.*  .text  .text.*)');
+          Add('    *libsoc.a:cpu_util.*( .literal  .literal.*  .text  .text.*)');
+          Add('    *libsoc.a:rtc_clk.*( .literal  .literal.*  .text  .text.*)');
+          Add('    *libsoc.a:i2c_hal_iram.*( .literal  .literal.*  .text  .text.*)');
+          Add('    *libgcc.a:_divsf3.*( .literal  .literal.*  .text  .text.*)');
+          Add('    *libgcc.a:lib2funcs.*( .literal  .literal.*  .text  .text.*)');
+          Add('    *libxtensa.a:eri.*( .literal  .literal.*  .text  .text.*)');
+          Add('    *libspi_flash.a:spi_flash_rom_patch.*( .literal  .literal.*  .text  .text.*)');
+          Add('    *libspi_flash.a:spi_flash_chip_issi.*( .literal  .literal.*  .text  .text.*)');
+          Add('    *libspi_flash.a:spi_flash_chip_gd.*( .literal  .literal.*  .text  .text.*)');
+          Add('    *libspi_flash.a:spi_flash_chip_generic.*( .literal  .literal.*  .text  .text.*)');
+          Add('    *libspi_flash.a:memspi_host_driver.*( .literal  .literal.*  .text  .text.*)');
+          Add('    *libesp32.a:panic.*( .literal  .literal.*  .text  .text.*)');
+          Add('    *libnewlib.a:heap.*( .literal  .literal.*  .text  .text.*)');
+          Add('    *libhal.a:( .literal  .literal.*  .text  .text.*)');
+          Add('    *libesp_ringbuf.a:( .literal  .literal.*  .text  .text.*)');
+          Add('    *libfreertos.a:( .literal  .literal.*  .text  .text.*)');
+          Add('    *libgcov.a:( .literal  .literal.*  .text  .text.*)');
+          Add('    *librtc.a:( .literal  .literal.*  .text  .text.*)');
+          Add('    *libheap.a:multi_heap_poisoning.*( .literal  .literal.*  .text  .text.*)');
+          Add('    *libheap.a:multi_heap.*( .literal  .literal.*  .text  .text.*)');
+          Add('    _iram_text_end = ABSOLUTE(.);');
+          Add('  } > iram0_0_seg');
+          Add('  .dram0.data :');
+          Add('  {');
+          Add('    _data_start = ABSOLUTE(.);');
+          Add('    _bt_data_start = ABSOLUTE(.);');
+          Add('    *libbt.a:(.data .data.*)');
+          Add('    . = ALIGN (4);');
+          Add('    _bt_data_end = ABSOLUTE(.);');
+          Add('    _btdm_data_start = ABSOLUTE(.);');
+          Add('    *libbtdm_app.a:(.data .data.*)');
+          Add('    . = ALIGN (4);');
+          Add('    _btdm_data_end = ABSOLUTE(.);');
+          Add('    _nimble_data_start = ABSOLUTE(.);');
+          Add('    *libnimble.a:(.data .data.*)');
+          Add('    . = ALIGN (4);');
+          Add('    _nimble_data_end = ABSOLUTE(.);');
+          Add('    KEEP (*(.fpc .fpc.n_version .fpc.n_links))');
+          Add('    *(.gnu.linkonce.d.*)');
+          Add('    *(.data1)');
+          Add('    *(.sdata)');
+          Add('    *(.sdata.*)');
+          Add('    *(.gnu.linkonce.s.*)');
+          Add('    *(.sdata2)');
+          Add('    *(.sdata2.*)');
+          Add('    *(.gnu.linkonce.s2.*)');
+          Add('    *(.jcr)');
+          Add('    *(EXCLUDE_FILE(*libsoc.a:uart_hal_iram.*) .data EXCLUDE_FILE(*libsoc.a:uart_hal_iram.*) .data.* EXCLUDE_FILE(*libsoc.a:uart_hal_iram.*) .dram1 EXCLUDE_FILE(*libsoc.a:uart_hal_iram.*) .dram1.*)');
+          Add('    *libsoc.a:spi_flash_hal_gpspi.*( .rodata  .rodata.*)');
+          Add('    *libsoc.a:uart_hal_iram.*( .data  .data.*  .dram1  .dram1.*)');
+          Add('    *libsoc.a:spi_flash_hal_iram.*( .rodata  .rodata.*)');
+          Add('    *libsoc.a:rtc_clk.*( .rodata  .rodata.*)');
+          Add('    *libsoc.a:i2c_hal_iram.*( .rodata  .rodata.*)');
+          Add('    *libgcc.a:_divsf3.*( .rodata  .rodata.*)');
+          Add('    *libspi_flash.a:spi_flash_chip_issi.*( .rodata  .rodata.*)');
+          Add('    *libspi_flash.a:spi_flash_chip_gd.*( .rodata  .rodata.*)');
+          Add('    *libspi_flash.a:spi_flash_chip_generic.*( .rodata  .rodata.*)');
+          Add('    *libspi_flash.a:memspi_host_driver.*( .rodata  .rodata.*)');
+          Add('    *libphy.a:( .rodata  .rodata.*)');
+          Add('    *libesp32.a:panic.*( .rodata  .rodata.*)');
+          Add('    *libnewlib.a:heap.*( .rodata  .rodata.*)');
+          Add('    *libgcov.a:( .rodata  .rodata.*)');
+          Add('    *libheap.a:multi_heap_poisoning.*( .rodata  .rodata.*)');
+          Add('    *libheap.a:multi_heap.*( .rodata  .rodata.*)');
+          Add('    _data_end = ABSOLUTE(.);');
+          Add('    . = ALIGN(4);');
+          Add('  } > dram0_0_seg');
+          Add('  .noinit (NOLOAD):');
+          Add('  {');
+          Add('    . = ALIGN(4);');
+          Add('    _noinit_start = ABSOLUTE(.);');
+          Add('    *(.noinit .noinit.*)');
+          Add('    . = ALIGN(4) ;');
+          Add('    _noinit_end = ABSOLUTE(.);');
+          Add('  } > dram0_0_seg');
+          Add('  .dram0.bss (NOLOAD) :');
+          Add('  {');
+          Add('    . = ALIGN (8);');
+          Add('    _bss_start = ABSOLUTE(.);');
+          Add('    *(.ext_ram.bss*)');
+          Add('    _bt_bss_start = ABSOLUTE(.);');
+          Add('    *libbt.a:(.bss .bss.* COMMON)');
+          Add('    . = ALIGN (4);');
+          Add('    _bt_bss_end = ABSOLUTE(.);');
+          Add('    _btdm_bss_start = ABSOLUTE(.);');
+          Add('    *libbtdm_app.a:(.bss .bss.* COMMON)');
+          Add('    . = ALIGN (4);');
+          Add('    _btdm_bss_end = ABSOLUTE(.);');
+          Add('    _nimble_bss_start = ABSOLUTE(.);');
+          Add('    *libnimble.a:(.bss .bss.* COMMON)');
+          Add('    . = ALIGN (4);');
+          Add('    _nimble_bss_end = ABSOLUTE(.);');
+          Add('    *(EXCLUDE_FILE(*libsoc.a:uart_hal_iram.*) .bss EXCLUDE_FILE(*libsoc.a:uart_hal_iram.*) .bss.* EXCLUDE_FILE(*libsoc.a:uart_hal_iram.*) COMMON)');
+          Add('    *libsoc.a:uart_hal_iram.*( .bss  .bss.*  COMMON)');
+          Add('    *(.dynsbss)');
+          Add('    *(.sbss)');
+          Add('    *(.sbss.*)');
+          Add('    *(.gnu.linkonce.sb.*)');
+          Add('    *(.scommon)');
+          Add('    *(.sbss2)');
+          Add('    *(.sbss2.*)');
+          Add('    *(.gnu.linkonce.sb2.*)');
+          Add('    *(.dynbss)');
+          Add('    *(.share.mem)');
+          Add('    *(.gnu.linkonce.b.*)');
+          Add('    . = ALIGN (8);');
+          Add('    _bss_end = ABSOLUTE(.);');
+          Add('  } > dram0_0_seg');
+          Add('  ASSERT(((_bss_end - ORIGIN(dram0_0_seg)) <= LENGTH(dram0_0_seg)),');
+          Add('          "DRAM segment data does not fit.")');
+          Add('  .flash.rodata :');
+          Add('  {');
+          Add('    _rodata_start = ABSOLUTE(.);');
+          Add('    *(.rodata_desc .rodata_desc.*)               /* Should be the first.  App version info.        DO NOT PUT ANYTHING BEFORE IT! */');
+          Add('    *(.rodata_custom_desc .rodata_custom_desc.*) /* Should be the second. Custom app version info. DO NOT PUT ANYTHING BEFORE IT! */');
+          Add('    *(EXCLUDE_FILE(*libsoc.a:i2c_hal_iram.* *libsoc.a:rtc_clk.* *libsoc.a:spi_flash_hal_iram.* *libsoc.a:uart_hal_iram.* *libsoc.a:spi_flash_hal_gpspi.* *libgcc.a:_divsf3.* *libspi_flash.a:memspi_host_driver.* *libspi_flash.a:spi_flash_chip_generic.* *libspi_flash.a:spi_flash_chip_gd.* *libspi_flash.a:spi_flash_chip_issi.* *libphy.a *libesp32.a:panic.* *libnewlib.a:heap.* *libgcov.a *libheap.a:multi_heap.* *libheap.a:multi_heap_poisoning.*) .rodata EXCLUDE_FILE(*libsoc.a:i2c_hal_iram.* *libsoc.a:rtc_clk.* *libsoc.a:spi_flash_hal_iram.* *libsoc.a:uart_hal_iram.* *libsoc.a:spi_flash_hal_gpspi.* *libgcc.a:_divsf3.* *libspi_flash.a:memspi_host_driver.* *libspi_flash.a:spi_flash_chip_generic.* *libspi_flash.a:spi_flash_chip_gd.* *libspi_flash.a:spi_flash_chip_issi.* *libphy.a *libesp32.a:panic.* *libnewlib.a:heap.* *libgcov.a *libheap.a:multi_heap.* *libheap.a:multi_heap_poisoning.*) .rodata.*)');
+          Add('    *libsoc.a:uart_hal_iram.*( .rodata  .rodata.*)');
+          Add('    *(.irom1.text) /* catch stray ICACHE_RODATA_ATTR */');
+          Add('    *(.gnu.linkonce.r.*)');
+          Add('    *(.rodata1)');
+          Add('    __XT_EXCEPTION_TABLE_ = ABSOLUTE(.);');
+          Add('    *(.xt_except_table)');
+          Add('    *(.gcc_except_table .gcc_except_table.*)');
+          Add('    *(.gnu.linkonce.e.*)');
+          Add('    *(.gnu.version_r)');
+          Add('    . = (. + 3) & ~ 3;');
+          Add('    __eh_frame = ABSOLUTE(.);');
+          Add('    KEEP(*(.eh_frame))');
+          Add('    . = (. + 7) & ~ 3;');
+          Add('    __init_array_start = ABSOLUTE(.);');
+          Add('    KEEP (*(EXCLUDE_FILE (*crtend.* *crtbegin.*) .ctors .ctors.*))');
+          Add('    __init_array_end = ABSOLUTE(.);');
+          Add('    KEEP (*crtbegin.*(.dtors))');
+          Add('    KEEP (*(EXCLUDE_FILE (*crtend.*) .dtors))');
+          Add('    KEEP (*(SORT(.dtors.*)))');
+          Add('    KEEP (*(.dtors))');
+          Add('    __XT_EXCEPTION_DESCS_ = ABSOLUTE(.);');
+          Add('    *(.xt_except_desc)');
+          Add('    *(.gnu.linkonce.h.*)');
+          Add('    __XT_EXCEPTION_DESCS_END__ = ABSOLUTE(.);');
+          Add('    *(.xt_except_desc_end)');
+          Add('    *(.dynamic)');
+          Add('    *(.gnu.version_d)');
+          Add('    soc_reserved_memory_region_start = ABSOLUTE(.);');
+          Add('    KEEP (*(.reserved_memory_address))');
+          Add('    soc_reserved_memory_region_end = ABSOLUTE(.);');
+          Add('    _rodata_end = ABSOLUTE(.);');
+          Add('    _lit4_start = ABSOLUTE(.);');
+          Add('    *(*.lit4)');
+          Add('    *(.lit4.*)');
+          Add('    *(.gnu.linkonce.lit4.*)');
+          Add('    _lit4_end = ABSOLUTE(.);');
+          Add('    . = ALIGN(4);');
+          Add('    _thread_local_start = ABSOLUTE(.);');
+          Add('    *(.tdata)');
+          Add('    *(.tdata.*)');
+          Add('    *(.tbss)');
+          Add('    *(.tbss.*)');
+          Add('    _thread_local_end = ABSOLUTE(.);');
+          Add('    . = ALIGN(4);');
+          Add('  } >default_rodata_seg');
+          Add('  .flash.text :');
+          Add('  {');
+          Add('    _stext = .;');
+          Add('    _text_start = ABSOLUTE(.);');
+          Add('    *(EXCLUDE_FILE(*libsoc.a:i2c_hal_iram.* *libsoc.a:rtc_clk.* *libsoc.a:cpu_util.* *libsoc.a:spi_flash_hal_iram.* *libsoc.a:rtc_sleep.* *libsoc.a:spi_hal_iram.* *libsoc.a:uart_hal_iram.* *libsoc.a:rtc_clk_init.* *libsoc.a:rtc_pm.* *libsoc.a:rtc_periph.* *libsoc.a:lldesc.* *libsoc.a:spi_slave_hal_iram.* *libsoc.a:spi_flash_hal_gpspi.* *libsoc.a:rtc_wdt.* *libsoc.a:ledc_hal_iram.* *libsoc.a:rtc_time.* *libsoc.a:rtc_init.* *libgcc.a:lib2funcs.* *libgcc.a:_divsf3.* *libxtensa.a:eri.* *libspi_flash.a:memspi_host_driver.* *libspi_flash.a:spi_flash_chip_generic.* *libspi_flash.a:spi_flash_chip_gd.* *libspi_flash.a:spi_flash_chip_issi.* *libspi_flash.a:spi_flash_rom_patch.* *libesp32.a:panic.* *libnewlib.a:heap.* *libhal.a *libesp_ringbuf.a *libfreertos.a *libgcov.a *librtc.a *libheap.a:multi_heap.* *libheap.a:multi_heap_poisoning.*) .literal EXCLUDE_FILE(*libsoc.a:i2c_hal_iram.* *libsoc.a:rtc_clk.* *libsoc.a:cpu_util.* *libsoc.a:spi_flash_hal_iram.* *libsoc.a:rtc_sleep.* *libsoc.a:spi_hal_iram.* *libsoc.a:uart_hal_iram.* *libsoc.a:rtc_clk_init.* *libsoc.a:rtc_pm.* *libsoc.a:rtc_periph.* *libsoc.a:lldesc.* *libsoc.a:spi_slave_hal_iram.* *libsoc.a:spi_flash_hal_gpspi.* *libsoc.a:rtc_wdt.* *libsoc.a:ledc_hal_iram.* *libsoc.a:rtc_time.* *libsoc.a:rtc_init.* *libgcc.a:lib2funcs.* *libgcc.a:_divsf3.* *libxtensa.a:eri.* *libspi_flash.a:memspi_host_driver.* *libspi_flash.a:spi_flash_chip_generic.* *libspi_flash.a:spi_flash_chip_gd.* *libspi_flash.a:spi_flash_chip_issi.* *libspi_flash.a:spi_flash_rom_patch.* *libesp32.a:panic.* *libnewlib.a:heap.* *libhal.a *libesp_ringbuf.a *libfreertos.a *libgcov.a *librtc.a *libheap.a:multi_heap.* *libheap.a:multi_heap_poisoning.*) .literal.* EXCLUDE_FILE(*libsoc.a:i2c_hal_iram.* *libsoc.a:rtc_clk.* *libsoc.a:cpu_util.* *libsoc.a:spi_flash_hal_iram.* *libsoc.a:rtc_sleep.* *libsoc.a:spi_hal_iram.* *libsoc.a:uart_hal_iram.* *libsoc.a:rtc_clk_init.* *libsoc.a:rtc_pm.* *libsoc.a:rtc_periph.* *libsoc.a:lldesc.* *libsoc.a:spi_slave_hal_iram.* *libsoc.a:spi_flash_hal_gpspi.* *libsoc.a:rtc_wdt.* *libsoc.a:ledc_hal_iram.* *libsoc.a:rtc_time.* *libsoc.a:rtc_init.* *libgcc.a:lib2funcs.* *libgcc.a:_divsf3.* *libxtensa.a:eri.* *libspi_flash.a:memspi_host_driver.* *libspi_flash.a:spi_flash_chip_generic.* *libspi_flash.a:spi_flash_chip_gd.* *libspi_flash.a:spi_flash_chip_issi.* *libspi_flash.a:spi_flash_rom_patch.* *libesp32.a:panic.* *libnewlib.a:heap.* *libhal.a *libesp_ringbuf.a *libfreertos.a *libgcov.a *librtc.a *libheap.a:multi_heap.* *libheap.a:multi_heap_poisoning.*) .text EXCLUDE_FILE(*libsoc.a:i2c_hal_iram.* *libsoc.a:rtc_clk.* *libsoc.a:cpu_util.* *libsoc.a:spi_flash_hal_iram.* *libsoc.a:rtc_sleep.* *libsoc.a:spi_hal_iram.* *libsoc.a:uart_hal_iram.* *libsoc.a:rtc_clk_init.* *libsoc.a:rtc_pm.* *libsoc.a:rtc_periph.* *libsoc.a:lldesc.* *libsoc.a:spi_slave_hal_iram.* *libsoc.a:spi_flash_hal_gpspi.* *libsoc.a:rtc_wdt.* *libsoc.a:ledc_hal_iram.* *libsoc.a:rtc_time.* *libsoc.a:rtc_init.* *libgcc.a:lib2funcs.* *libgcc.a:_divsf3.* *libxtensa.a:eri.* *libspi_flash.a:memspi_host_driver.* *libspi_flash.a:spi_flash_chip_generic.* *libspi_flash.a:spi_flash_chip_gd.* *libspi_flash.a:spi_flash_chip_issi.* *libspi_flash.a:spi_flash_rom_patch.* *libesp32.a:panic.* *libnewlib.a:heap.* *libhal.a *libesp_ringbuf.a *libfreertos.a *libgcov.a *librtc.a *libheap.a:multi_heap.* *libheap.a:multi_heap_poisoning.*) .text.* EXCLUDE_FILE(*libsoc.a:uart_hal_iram.*) .wifi0iram EXCLUDE_FILE(*libsoc.a:uart_hal_iram.*) .wifi0iram.* EXCLUDE_FILE(*libsoc.a:uart_hal_iram.*) .wifirxiram EXCLUDE_FILE(*libsoc.a:uart_hal_iram.*) .wifirxiram.*)');
+          Add('    *libsoc.a:uart_hal_iram.*( .literal  .literal.*  .text  .text.*  .wifi0iram  .wifi0iram.*  .wifirxiram  .wifirxiram.*)');
+          Add('    *(.stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)');
+          Add('    *(.irom0.text) /* catch stray ICACHE_RODATA_ATTR */');
+          Add('    *(.fini.literal)');
+          Add('    *(.fini)');
+          Add('    *(.gnu.version)');
+          Add('    _text_end = ABSOLUTE(.);');
+          Add('    _etext = .;');
+          Add('    _flash_cache_start = ABSOLUTE(0);');
+          Add('  } >default_code_seg');
+          Add('  .iram0.text_end (NOLOAD) :');
+          Add('  {');
+          Add('    . = ALIGN (4);');
+          Add('    _iram_end = ABSOLUTE(.);');
+          Add('  } > iram0_0_seg');
+          Add('  .dram0.heap_start (NOLOAD) :');
+          Add('  {');
+          Add('    . = ALIGN (8);');
+          Add('    _heap_start = ABSOLUTE(.);');
+          Add('  } > dram0_0_seg');
+          Add('}');
+          Add('ASSERT(((_iram_text_end - ORIGIN(iram0_0_seg)) <= LENGTH(iram0_0_seg)),');
+          Add('          "IRAM0 segment data does not fit.")');
+          Add('ASSERT(((_heap_start - ORIGIN(dram0_0_seg)) <= LENGTH(dram0_0_seg)),');
+          Add('          "DRAM segment data does not fit.")');
+          Add('/*  esp32.rom.ld */');
+          Add('PROVIDE ( Add2SelfBigHex256 = 0x40015b7c );');
+          Add('PROVIDE ( AddBigHex256 = 0x40015b28 );');
+          Add('PROVIDE ( AddBigHexModP256 = 0x40015c98 );');
+          Add('PROVIDE ( AddP256 = 0x40015c74 );');
+          Add('PROVIDE ( AddPdiv2_256 = 0x40015ce0 );');
+          Add('PROVIDE ( app_gpio_arg = 0x3ffe003c );');
+          Add('PROVIDE ( app_gpio_handler = 0x3ffe0040 );');
+          Add('PROVIDE ( BasePoint_x_256 = 0x3ff97488 );');
+          Add('PROVIDE ( BasePoint_y_256 = 0x3ff97468 );');
+          Add('PROVIDE ( bigHexInversion256 = 0x400168f0 );');
+          Add('PROVIDE ( bigHexP256 = 0x3ff973bc );');
+          Add('PROVIDE ( btdm_r_ble_bt_handler_tab_p_get = 0x40019b0c );');
+          Add('PROVIDE ( btdm_r_btdm_option_data_p_get = 0x40010004 );');
+          Add('PROVIDE ( btdm_r_btdm_rom_version_get = 0x40010078 );');
+          Add('PROVIDE ( btdm_r_data_init = 0x4001002c );');
+          Add('PROVIDE ( btdm_r_import_rf_phy_func_p_get = 0x40054298 );');
+          Add('PROVIDE ( btdm_r_ip_func_p_get = 0x40019af0 );');
+          Add('PROVIDE ( btdm_r_ip_func_p_set = 0x40019afc );');
+          Add('PROVIDE ( btdm_r_modules_func_p_get = 0x4005427c );');
+          Add('PROVIDE ( btdm_r_modules_func_p_set = 0x40054270 );');
+          Add('PROVIDE ( btdm_r_plf_func_p_set = 0x40054288 );');
+          Add('PROVIDE ( bt_util_buf_env = 0x3ffb8bd4 );');
+          Add('PROVIDE ( cache_flash_mmu_set_rom = 0x400095e0 );');
+          Add('PROVIDE ( Cache_Flush_rom = 0x40009a14 );');
+          Add('PROVIDE ( Cache_Read_Disable_rom = 0x40009ab8 );');
+          Add('PROVIDE ( Cache_Read_Enable_rom = 0x40009a84 );');
+          Add('PROVIDE ( Cache_Read_Init_rom = 0x40009950 );');
+          Add('PROVIDE ( cache_sram_mmu_set_rom = 0x400097f4 );');
+          Add('PROVIDE ( calc_rtc_memory_crc = 0x40008170 );');
+          Add('PROVIDE ( __clear_cache = 0x40063860 );');
+          Add('PROVIDE ( co_default_bdaddr = 0x3ffae704 );');
+          Add('PROVIDE ( co_null_bdaddr = 0x3ffb80e0 );');
+          Add('PROVIDE ( co_sca2ppm = 0x3ff971e8 );');
+          Add('PROVIDE ( crc16_be = 0x4005d09c );');
+          Add('PROVIDE ( crc16_le = 0x4005d05c );');
+          Add('PROVIDE ( crc32_be = 0x4005d024 );');
+          Add('PROVIDE ( crc32_le = 0x4005cfec );');
+          Add('PROVIDE ( crc8_be = 0x4005d114 );');
+          Add('PROVIDE ( crc8_le = 0x4005d0e0 );');
+          Add('PROVIDE ( _data_end_rom = 0x4000d5c8 );');
+          Add('PROVIDE ( _data_end_btdm_rom = 0x4000d4f8 );');
+          Add('PROVIDE ( _data_start_rom = 0x4000d4f8 );');
+          Add('PROVIDE ( _data_start_btdm_rom = 0x4000d4f4 );');
+          Add('PROVIDE ( _data_start_btdm = 0x3ffae6e0);');
+          Add('PROVIDE ( _data_end_btdm = 0x3ffaff10);');
+          Add('PROVIDE ( _bss_start_btdm = 0x3ffb8000);');
+          Add('PROVIDE ( _bss_end_btdm = 0x3ffbff70);');
+          Add('PROVIDE ( dbg_default_handler = 0x3ff97218 );');
+          Add('PROVIDE ( dbg_default_state = 0x3ff97220 );');
+          Add('PROVIDE ( dbg_state = 0x3ffb8d5d );');
+          Add('PROVIDE ( DebugE256PublicKey_x = 0x3ff97428 );');
+          Add('PROVIDE ( DebugE256PublicKey_y = 0x3ff97408 );');
+          Add('PROVIDE ( DebugE256SecretKey = 0x3ff973e8 );');
+          Add('PROVIDE ( debug_timer = 0x3ffe042c );');
+          Add('PROVIDE ( debug_timerfn = 0x3ffe0430 );');
+          Add('PROVIDE ( dh_group14_generator = 0x3ff9ac60 );');
+          Add('PROVIDE ( dh_group14_prime = 0x3ff9ab60 );');
+          Add('PROVIDE ( dh_group15_generator = 0x3ff9ab5f );');
+          Add('PROVIDE ( dh_group15_prime = 0x3ff9a9df );');
+          Add('PROVIDE ( dh_group16_generator = 0x3ff9a9de );');
+          Add('PROVIDE ( dh_group16_prime = 0x3ff9a7de );');
+          Add('PROVIDE ( dh_group17_generator = 0x3ff9a7dd );');
+          Add('PROVIDE ( dh_group17_prime = 0x3ff9a4dd );');
+          Add('PROVIDE ( dh_group18_generator = 0x3ff9a4dc );');
+          Add('PROVIDE ( dh_group18_prime = 0x3ff9a0dc );');
+          Add('PROVIDE ( dh_group1_generator = 0x3ff9ae03 );');
+          Add('PROVIDE ( dh_group1_prime = 0x3ff9ada3 );');
+          Add('PROVIDE ( dh_group2_generator = 0x3ff9ada2 );');
+          Add('PROVIDE ( dh_group2_prime = 0x3ff9ad22 );');
+          Add('PROVIDE ( dh_group5_generator = 0x3ff9ad21 );');
+          Add('PROVIDE ( dh_group5_prime = 0x3ff9ac61 );');
+          Add('PROVIDE ( g_rom_spiflash_dummy_len_plus = 0x3ffae290 );');
+          Add('PROVIDE ( ecc_env = 0x3ffb8d60 );');
+          Add('PROVIDE ( ecc_Jacobian_InfinityPoint256 = 0x3ff972e8 );');
+          Add('PROVIDE ( em_buf_env = 0x3ffb8d74 );');
+          Add('PROVIDE ( esp_crc8 = 0x4005d144 );');
+          Add('PROVIDE ( _etext = 0x4000d66c );');
+          Add('PROVIDE ( ets_readySet_ = 0x3ffe01f0 );');
+          Add('PROVIDE ( ets_startup_callback = 0x3ffe0404 );');
+          Add('PROVIDE ( rwip_coex_cfg = 0x3ff9914c );');
+          Add('PROVIDE ( rwip_priority = 0x3ff99159 );');
+          Add('PROVIDE ( exc_cause_table = 0x3ff991d0 );');
+          Add('PROVIDE ( GF_Jacobian_Point_Addition256 = 0x400163a4 );');
+          Add('PROVIDE ( GF_Jacobian_Point_Double256 = 0x40016260 );');
+          Add('PROVIDE ( GF_Point_Jacobian_To_Affine256 = 0x40016b0c );');
+          Add('PROVIDE ( g_phyFuns_instance = 0x3ffae0c4 );');
+          Add('PROVIDE ( g_rom_flashchip = 0x3ffae270 );');
+          Add('PROVIDE ( gTxMsg = 0x3ffe0050 );');
+          Add('PROVIDE ( hci_cmd_desc_root_tab = 0x3ff976d4 );');
+          Add('PROVIDE ( hci_cmd_desc_tab_ctrl_bb = 0x3ff97b70 );');
+          Add('PROVIDE ( hci_cmd_desc_tab_info_par = 0x3ff97b1c );');
+          Add('PROVIDE ( hci_cmd_desc_tab_le = 0x3ff97870 );');
+          Add('PROVIDE ( hci_cmd_desc_tab_lk_ctrl = 0x3ff97fc0 );');
+          Add('PROVIDE ( hci_cmd_desc_tab_lk_pol = 0x3ff97f3c );');
+          Add('PROVIDE ( hci_cmd_desc_tab_stat_par = 0x3ff97ac8 );');
+          Add('PROVIDE ( hci_cmd_desc_tab_testing = 0x3ff97a98 );');
+          Add('PROVIDE ( hci_cmd_desc_tab_vs = 0x3ff97714 );');
+          Add('PROVIDE ( hci_command_handler = 0x4004c928 );');
+          Add('PROVIDE ( hci_env = 0x3ffb9350 );');
+          Add('PROVIDE ( rwip_env = 0x3ffb8bcc );');
+          Add('PROVIDE ( hci_evt_dbg_desc_tab = 0x3ff9750c );');
+          Add('PROVIDE ( hci_evt_desc_tab = 0x3ff9751c );');
+          Add('PROVIDE ( hci_evt_le_desc_tab = 0x3ff974b4 );');
+          Add('PROVIDE ( hci_fc_env = 0x3ffb9340 );');
+          Add('PROVIDE ( jd_decomp = 0x400613e8 );');
+          Add('PROVIDE ( jd_prepare = 0x40060fa8 );');
+          Add('PROVIDE ( ke_env = 0x3ffb93cc );');
+          Add('PROVIDE ( lb_default_handler = 0x3ff982b8 );');
+          Add('PROVIDE ( lb_default_state_tab_p_get = 0x4001c198 );');
+          Add('PROVIDE ( lb_env = 0x3ffb9424 );');
+          Add('PROVIDE ( lb_hci_cmd_handler_tab_p_get = 0x4001c18c );');
+          Add('PROVIDE ( lb_state = 0x3ffb94e8 );');
+          Add('PROVIDE ( lc_default_handler = 0x3ff98648 );');
+          Add('PROVIDE ( lc_default_state_tab_p_get = 0x4002f494 );');
+          Add('PROVIDE ( lc_env = 0x3ffb94ec );');
+          Add('PROVIDE ( lc_hci_cmd_handler_tab_p_get = 0x4002f488 );');
+          Add('PROVIDE ( lc_state = 0x3ffb9508 );');
+          Add('PROVIDE ( ld_acl_br_sizes = 0x3ff98a2a );');
+          Add('PROVIDE ( ld_acl_br_types = 0x3ff98a36 );');
+          Add('PROVIDE ( ld_acl_edr_sizes = 0x3ff98a14 );');
+          Add('PROVIDE ( ld_acl_edr_types = 0x3ff98a22 );');
+          Add('PROVIDE ( ld_env = 0x3ffb9510 );');
+          Add('PROVIDE ( ld_pcm_settings_dft = 0x3ff98a0c );');
+          Add('PROVIDE ( ld_sched_params = 0x3ffb96c0 );');
+          Add('PROVIDE ( ld_sync_train_channels = 0x3ff98a3c );');
+          Add('PROVIDE ( llc_default_handler = 0x3ff98b3c );');
+          Add('PROVIDE ( llc_default_state_tab_p_get = 0x40046058 );');
+          Add('PROVIDE ( llc_env = 0x3ffb96d0 );');
+          Add('PROVIDE ( llc_hci_acl_data_tx_handler = 0x40042398 );');
+          Add('PROVIDE ( llc_hci_cmd_handler_tab_p_get = 0x40042358 );');
+          Add('PROVIDE ( llc_hci_command_handler = 0x40042360 );');
+          Add('PROVIDE ( llcp_pdu_handler_tab_p_get = 0x40043f64 );');
+          Add('PROVIDE ( llc_state = 0x3ffb96f8 );');
+          Add('PROVIDE ( lldesc_build_chain = 0x4000a850 );');
+          Add('PROVIDE ( lldesc_num2link = 0x4000a948 );');
+          Add('PROVIDE ( lldesc_set_owner = 0x4000a974 );');
+          Add('PROVIDE ( lld_evt_deferred_elt_push = 0x400466b4 );');
+          Add('PROVIDE ( lld_evt_deferred_elt_pop = 0x400466dc );');
+          Add('PROVIDE ( lld_evt_winsize_change = 0x40046730 );');
+          Add('PROVIDE ( lld_evt_rxwin_compute = 0x400467c8 );');
+          Add('PROVIDE ( lld_evt_slave_time_compute = 0x40046818 );');
+          Add('PROVIDE ( lld_evt_env = 0x3ffb9704 );');
+          Add('PROVIDE ( lld_evt_elt_wait_get = 0x400468e4 );');
+          Add('PROVIDE ( lld_evt_get_next_free_slot = 0x4004692c );');
+          Add('PROVIDE ( lld_pdu_adv_pk_desc_tab = 0x3ff98c70 );');
+          Add('PROVIDE ( lld_pdu_llcp_pk_desc_tab = 0x3ff98b68 );');
+          Add('PROVIDE ( lld_pdu_tx_flush_list = 0x4004a760 );');
+          Add('PROVIDE ( lld_pdu_pack = 0x4004ab14 );');
+          Add('PROVIDE ( LLM_AA_CT1 = 0x3ff98d8a );');
+          Add('PROVIDE ( LLM_AA_CT2 = 0x3ff98d88 );');
+          Add('PROVIDE ( llm_default_handler = 0x3ff98d80 );');
+          Add('PROVIDE ( llm_default_state_tab_p_get = 0x4004e718 );');
+          Add('PROVIDE ( llm_hci_cmd_handler_tab_p_get = 0x4004c920 );');
+          Add('PROVIDE ( llm_le_env = 0x3ffb976c );');
+          Add('PROVIDE ( llm_local_cmds = 0x3ff98d38 );');
+          Add('PROVIDE ( llm_local_data_len_values = 0x3ff98d1c );');
+          Add('PROVIDE ( llm_local_le_feats = 0x3ff98d30 );');
+          Add('PROVIDE ( llm_local_le_states = 0x3ff98d28 );');
+          Add('PROVIDE ( llm_state = 0x3ffb985c );');
+          Add('PROVIDE ( lm_default_handler = 0x3ff990e0 );');
+          Add('PROVIDE ( lm_default_state_tab_p_get = 0x40054268 );');
+          Add('PROVIDE ( lm_env = 0x3ffb9860 );');
+          Add('PROVIDE ( lm_hci_cmd_handler_tab_p_get = 0x4005425c );');
+          Add('PROVIDE ( lm_local_supp_feats = 0x3ff990ee );');
+          Add('PROVIDE ( lm_n_page_tab = 0x3ff990e8 );');
+          Add('PROVIDE ( lmp_desc_tab = 0x3ff96e6c );');
+          Add('PROVIDE ( lmp_ext_desc_tab = 0x3ff96d9c );');
+          Add('PROVIDE ( lm_state = 0x3ffb9a1c );');
+          Add('PROVIDE ( maxSecretKey_256 = 0x3ff97448 );');
+          Add('PROVIDE ( mmu_init = 0x400095a4 );');
+          Add('PROVIDE ( MultiplyBigHexByUint32_256 = 0x40016214 );');
+          Add('PROVIDE ( MultiplyBigHexModP256 = 0x400160b8 );');
+          Add('PROVIDE ( MultiplyByU32ModP256 = 0x40015fdc );');
+          Add('PROVIDE ( multofup = 0x4000ab8c );');
+          Add('PROVIDE ( mz_adler32 = 0x4005edbc );');
+          Add('PROVIDE ( mz_crc32 = 0x4005ee88 );');
+          Add('PROVIDE ( mz_free = 0x4005eed4 );');
+          Add('PROVIDE ( notEqual256 = 0x40015b04 );');
+          Add('PROVIDE ( one_bits = 0x3ff971f8 );');
+          Add('PROVIDE ( phy_get_romfuncs = 0x40004100 );');
+          Add('PROVIDE ( _Pri_4_HandlerAddress = 0x3ffe0648 );');
+          Add('PROVIDE ( _Pri_5_HandlerAddress = 0x3ffe064c );');
+          Add('PROVIDE ( r_btdm_option_data = 0x3ffae6e0 );');
+          Add('PROVIDE ( r_bt_util_buf_acl_rx_alloc = 0x40010218 );');
+          Add('PROVIDE ( r_bt_util_buf_acl_rx_free = 0x40010234 );');
+          Add('PROVIDE ( r_bt_util_buf_acl_tx_alloc = 0x40010268 );');
+          Add('PROVIDE ( r_bt_util_buf_acl_tx_free = 0x40010280 );');
+          Add('PROVIDE ( r_bt_util_buf_init = 0x400100e4 );');
+          Add('PROVIDE ( r_bt_util_buf_lmp_tx_alloc = 0x400101d0 );');
+          Add('PROVIDE ( r_bt_util_buf_lmp_tx_free = 0x400101ec );');
+          Add('PROVIDE ( r_bt_util_buf_sync_clear = 0x400103c8 );');
+          Add('PROVIDE ( r_bt_util_buf_sync_init = 0x400102c4 );');
+          Add('PROVIDE ( r_bt_util_buf_sync_rx_alloc = 0x40010468 );');
+          Add('PROVIDE ( r_bt_util_buf_sync_rx_free = 0x4001049c );');
+          Add('PROVIDE ( r_bt_util_buf_sync_tx_alloc = 0x400103ec );');
+          Add('PROVIDE ( r_bt_util_buf_sync_tx_free = 0x40010428 );');
+          Add('PROVIDE ( r_co_bdaddr_compare = 0x40014324 );');
+          Add('PROVIDE ( r_co_bytes_to_string = 0x400142e4 );');
+          Add('PROVIDE ( r_co_list_check_size_available = 0x400142c4 );');
+          Add('PROVIDE ( r_co_list_extract = 0x4001404c );');
+          Add('PROVIDE ( r_co_list_extract_after = 0x40014118 );');
+          Add('PROVIDE ( r_co_list_find = 0x4001419c );');
+          Add('PROVIDE ( r_co_list_init = 0x40013f14 );');
+          Add('PROVIDE ( r_co_list_insert_after = 0x40014254 );');
+          Add('PROVIDE ( r_co_list_insert_before = 0x40014200 );');
+          Add('PROVIDE ( r_co_list_merge = 0x400141bc );');
+          Add('PROVIDE ( r_co_list_pool_init = 0x40013f30 );');
+          Add('PROVIDE ( r_co_list_pop_front = 0x40014028 );');
+          Add('PROVIDE ( r_co_list_push_back = 0x40013fb8 );');
+          Add('PROVIDE ( r_co_list_push_front = 0x40013ff4 );');
+          Add('PROVIDE ( r_co_list_size = 0x400142ac );');
+          Add('PROVIDE ( r_co_nb_good_channels = 0x40014360 );');
+          Add('PROVIDE ( r_co_slot_to_duration = 0x40014348 );');
+          Add('PROVIDE ( r_dbg_init = 0x40014394 );');
+          Add('PROVIDE ( r_dbg_platform_reset_complete = 0x400143d0 );');
+          Add('PROVIDE ( r_dbg_swdiag_init = 0x40014470 );');
+          Add('PROVIDE ( r_dbg_swdiag_read = 0x400144a4 );');
+          Add('PROVIDE ( r_dbg_swdiag_write = 0x400144d0 );');
+          Add('PROVIDE ( r_E1 = 0x400108e8 );');
+          Add('PROVIDE ( r_E21 = 0x40010968 );');
+          Add('PROVIDE ( r_E22 = 0x400109b4 );');
+          Add('PROVIDE ( r_E3 = 0x40010a58 );');
+          Add('PROVIDE ( lm_n192_mod_mul = 0x40011dc0 );');
+          Add('PROVIDE ( lm_n192_mod_add = 0x40011e9c );');
+          Add('PROVIDE ( lm_n192_mod_sub = 0x40011eec );');
+          Add('PROVIDE ( r_ea_alarm_clear = 0x40015ab4 );');
+          Add('PROVIDE ( r_ea_alarm_set = 0x40015a10 );');
+          Add('PROVIDE ( r_ea_elt_cancel = 0x400150d0 );');
+          Add('PROVIDE ( r_ea_elt_create = 0x40015264 );');
+          Add('PROVIDE ( r_ea_elt_insert = 0x400152a8 );');
+          Add('PROVIDE ( r_ea_elt_remove = 0x400154f0 );');
+          Add('PROVIDE ( r_ea_finetimer_isr = 0x400155d4 );');
+          Add('PROVIDE ( r_ea_init = 0x40015228 );');
+          Add('PROVIDE ( r_ea_interval_create = 0x4001555c );');
+          Add('PROVIDE ( r_ea_interval_delete = 0x400155a8 );');
+          Add('PROVIDE ( r_ea_interval_duration_req = 0x4001597c );');
+          Add('PROVIDE ( r_ea_interval_insert = 0x4001557c );');
+          Add('PROVIDE ( r_ea_interval_remove = 0x40015590 );');
+          Add('PROVIDE ( ea_conflict_check = 0x40014e9c );');
+          Add('PROVIDE ( ea_prog_timer = 0x40014f88 );');
+          Add('PROVIDE ( r_ea_offset_req = 0x40015748 );');
+          Add('PROVIDE ( r_ea_sleep_check = 0x40015928 );');
+          Add('PROVIDE ( r_ea_sw_isr = 0x40015724 );');
+          Add('PROVIDE ( r_ea_time_get_halfslot_rounded = 0x40015894 );');
+          Add('PROVIDE ( r_ea_time_get_slot_rounded = 0x400158d4 );');
+          Add('PROVIDE ( r_ecc_abort_key256_generation = 0x40017070 );');
+          Add('PROVIDE ( r_ecc_generate_key256 = 0x40016e00 );');
+          Add('PROVIDE ( r_ecc_gen_new_public_key = 0x400170c0 );');
+          Add('PROVIDE ( r_ecc_gen_new_secret_key = 0x400170e4 );');
+          Add('PROVIDE ( r_ecc_get_debug_Keys = 0x40017224 );');
+          Add('PROVIDE ( r_ecc_init = 0x40016dbc );');
+          Add('PROVIDE ( ecc_point_multiplication_uint8_256 = 0x40016804);');
+          Add('PROVIDE ( RecvBuff = 0x3ffe009c );');
+          Add('PROVIDE ( r_em_buf_init = 0x4001729c );');
+          Add('PROVIDE ( r_em_buf_rx_buff_addr_get = 0x400173e8 );');
+          Add('PROVIDE ( r_em_buf_rx_free = 0x400173c4 );');
+          Add('PROVIDE ( r_em_buf_tx_buff_addr_get = 0x40017404 );');
+          Add('PROVIDE ( r_em_buf_tx_free = 0x4001741c );');
+          Add('PROVIDE ( r_F1_256 = 0x400133e4 );');
+          Add('PROVIDE ( r_F2_256 = 0x40013568 );');
+          Add('PROVIDE ( r_F3_256 = 0x40013664 );');
+          Add('PROVIDE ( RFPLL_ICP_TABLE = 0x3ffb8b7c );');
+          Add('PROVIDE ( r_G_256 = 0x40013470 );');
+          Add('PROVIDE ( r_H3 = 0x40013760 );');
+          Add('PROVIDE ( r_H4 = 0x40013830 );');
+          Add('PROVIDE ( r_h4tl_init = 0x40017878 );');
+          Add('PROVIDE ( r_h4tl_start = 0x40017924 );');
+          Add('PROVIDE ( r_h4tl_stop = 0x40017934 );');
+          Add('PROVIDE ( r_h4tl_write = 0x400178d0 );');
+          Add('PROVIDE ( r_H5 = 0x400138dc );');
+          Add('PROVIDE ( r_hashConcat = 0x40013a38 );');
+          Add('PROVIDE ( r_hci_acl_tx_data_alloc = 0x4001951c );');
+          Add('PROVIDE ( r_hci_acl_tx_data_received = 0x40019654 );');
+          Add('PROVIDE ( r_hci_bt_acl_bdaddr_register = 0x40018900 );');
+          Add('PROVIDE ( r_hci_bt_acl_bdaddr_unregister = 0x400189ac );');
+          Add('PROVIDE ( r_hci_bt_acl_conhdl_register = 0x4001895c );');
+          Add('PROVIDE ( r_hci_cmd_get_max_param_size = 0x400192d0 );');
+          Add('PROVIDE ( r_hci_cmd_received = 0x400192f8 );');
+          Add('PROVIDE ( r_hci_evt_filter_add = 0x40018a64 );');
+          Add('PROVIDE ( r_hci_evt_mask_set = 0x400189e4 );');
+          Add('PROVIDE ( r_hci_fc_acl_buf_size_set = 0x40017988 );');
+          Add('PROVIDE ( r_hci_fc_acl_en = 0x400179d8 );');
+          Add('PROVIDE ( r_hci_fc_acl_packet_sent = 0x40017a3c );');
+          Add('PROVIDE ( r_hci_fc_check_host_available_nb_acl_packets = 0x40017aa4 );');
+          Add('PROVIDE ( r_hci_fc_check_host_available_nb_sync_packets = 0x40017ac8 );');
+          Add('PROVIDE ( r_hci_fc_host_nb_acl_pkts_complete = 0x40017a6c );');
+          Add('PROVIDE ( r_hci_fc_host_nb_sync_pkts_complete = 0x40017a88 );');
+          Add('PROVIDE ( r_hci_fc_init = 0x40017974 );');
+          Add('PROVIDE ( r_hci_fc_sync_buf_size_set = 0x400179b0 );');
+          Add('PROVIDE ( r_hci_fc_sync_en = 0x40017a30 );');
+          Add('PROVIDE ( r_hci_fc_sync_packet_sent = 0x40017a54 );');
+          Add('PROVIDE ( r_hci_init = 0x40018538 );');
+          Add('PROVIDE ( r_hci_look_for_cmd_desc = 0x40018454 );');
+          Add('PROVIDE ( r_hci_look_for_dbg_evt_desc = 0x400184c4 );');
+          Add('PROVIDE ( r_hci_look_for_evt_desc = 0x400184a0 );');
+          Add('PROVIDE ( r_hci_look_for_le_evt_desc = 0x400184e0 );');
+          Add('PROVIDE ( r_hci_reset = 0x4001856c );');
+          Add('PROVIDE ( r_hci_send_2_host = 0x400185bc );');
+          Add('PROVIDE ( r_hci_sync_tx_data_alloc = 0x40019754 );');
+          Add('PROVIDE ( r_hci_sync_tx_data_received = 0x400197c0 );');
+          Add('PROVIDE ( r_hci_tl_init = 0x40019290 );');
+          Add('PROVIDE ( r_hci_tl_send = 0x40019228 );');
+          Add('PROVIDE ( r_hci_util_pack = 0x40019874 );');
+          Add('PROVIDE ( r_hci_util_unpack = 0x40019998 );');
+          Add('PROVIDE ( r_hci_voice_settings_get = 0x40018bdc );');
+          Add('PROVIDE ( r_hci_voice_settings_set = 0x40018be8 );');
+          Add('PROVIDE ( r_HMAC = 0x40013968 );');
+          Add('PROVIDE ( r_import_rf_phy_func = 0x3ffb8354 );');
+          Add('PROVIDE ( r_import_rf_phy_func_p = 0x3ffafd64 );');
+          Add('PROVIDE ( r_ip_funcs = 0x3ffae710 );');
+          Add('PROVIDE ( r_ip_funcs_p = 0x3ffae70c );');
+          Add('PROVIDE ( r_ke_check_malloc = 0x40019de0 );');
+          Add('PROVIDE ( r_ke_event_callback_set = 0x40019ba8 );');
+          Add('PROVIDE ( r_ke_event_clear = 0x40019c2c );');
+          Add('PROVIDE ( r_ke_event_flush = 0x40019ccc );');
+          Add('PROVIDE ( r_ke_event_get = 0x40019c78 );');
+          Add('PROVIDE ( r_ke_event_get_all = 0x40019cc0 );');
+          Add('PROVIDE ( r_ke_event_init = 0x40019b90 );');
+          Add('PROVIDE ( r_ke_event_schedule = 0x40019cdc );');
+          Add('PROVIDE ( r_ke_event_set = 0x40019be0 );');
+          Add('PROVIDE ( r_ke_flush = 0x4001a374 );');
+          Add('PROVIDE ( r_ke_free = 0x4001a014 );');
+          Add('PROVIDE ( r_ke_get_max_mem_usage = 0x4001a1c8 );');
+          Add('PROVIDE ( r_ke_get_mem_usage = 0x4001a1a0 );');
+          Add('PROVIDE ( r_ke_init = 0x4001a318 );');
+          Add('PROVIDE ( r_ke_is_free = 0x4001a184 );');
+          Add('PROVIDE ( r_ke_malloc = 0x40019eb4 );');
+          Add('PROVIDE ( r_ke_mem_init = 0x40019d3c );');
+          Add('PROVIDE ( r_ke_mem_is_empty = 0x40019d8c );');
+          Add('PROVIDE ( r_ke_msg_alloc = 0x4001a1e0 );');
+          Add('PROVIDE ( r_ke_msg_dest_id_get = 0x4001a2e0 );');
+          Add('PROVIDE ( r_ke_msg_discard = 0x4001a850 );');
+          Add('PROVIDE ( r_ke_msg_forward = 0x4001a290 );');
+          Add('PROVIDE ( r_ke_msg_forward_new_id = 0x4001a2ac );');
+          Add('PROVIDE ( r_ke_msg_free = 0x4001a2cc );');
+          Add('PROVIDE ( r_ke_msg_in_queue = 0x4001a2f8 );');
+          Add('PROVIDE ( r_ke_msg_save = 0x4001a858 );');
+          Add('PROVIDE ( r_ke_msg_send = 0x4001a234 );');
+          Add('PROVIDE ( r_ke_msg_send_basic = 0x4001a26c );');
+          Add('PROVIDE ( r_ke_msg_src_id_get = 0x4001a2ec );');
+          Add('PROVIDE ( r_ke_queue_extract = 0x40055fd0 );');
+          Add('PROVIDE ( r_ke_queue_insert = 0x40056020 );');
+          Add('PROVIDE ( r_ke_sleep_check = 0x4001a3d8 );');
+          Add('PROVIDE ( r_ke_state_get = 0x4001a7d8 );');
+          Add('PROVIDE ( r_ke_state_set = 0x4001a6fc );');
+          Add('PROVIDE ( r_ke_stats_get = 0x4001a3f0 );');
+          Add('PROVIDE ( r_ke_task_check = 0x4001a8a4 );');
+          Add('PROVIDE ( r_ke_task_create = 0x4001a674 );');
+          Add('PROVIDE ( r_ke_task_delete = 0x4001a6c0 );');
+          Add('PROVIDE ( r_ke_task_init = 0x4001a650 );');
+          Add('PROVIDE ( r_ke_task_msg_flush = 0x4001a860 );');
+          Add('PROVIDE ( r_ke_timer_active = 0x4001ac08 );');
+          Add('PROVIDE ( r_ke_timer_adjust_all = 0x4001ac30 );');
+          Add('PROVIDE ( r_ke_timer_clear = 0x4001ab90 );');
+          Add('PROVIDE ( r_ke_timer_init = 0x4001aa9c );');
+          Add('PROVIDE ( r_ke_timer_set = 0x4001aac0 );');
+          Add('PROVIDE ( r_ke_timer_sleep_check = 0x4001ac50 );');
+          Add('PROVIDE ( r_KPrimC = 0x40010ad4 );');
+          Add('PROVIDE ( r_lb_clk_adj_activate = 0x4001ae70 );');
+          Add('PROVIDE ( r_lb_clk_adj_id_get = 0x4001af14 );');
+          Add('PROVIDE ( r_lb_clk_adj_period_update = 0x4001af20 );');
+          Add('PROVIDE ( r_lb_init = 0x4001acd4 );');
+          Add('PROVIDE ( r_lb_mst_key = 0x4001afc0 );');
+          Add('PROVIDE ( r_lb_mst_key_cmp = 0x4001af74 );');
+          Add('PROVIDE ( r_lb_mst_key_restart_enc = 0x4001b0d4 );');
+          Add('PROVIDE ( r_lb_mst_start_act_bcst_enc = 0x4001b198 );');
+          Add('PROVIDE ( r_lb_mst_stop_act_bcst_enc = 0x4001b24c );');
+          Add('PROVIDE ( r_lb_reset = 0x4001ad38 );');
+          Add('PROVIDE ( r_lb_send_lmp = 0x4001adbc );');
+          Add('PROVIDE ( r_lb_send_pdu_clk_adj = 0x4001af3c );');
+          Add('PROVIDE ( r_lb_util_get_csb_mode = 0x4001ada4 );');
+          Add('PROVIDE ( r_lb_util_get_nb_broadcast = 0x4001ad80 );');
+          Add('PROVIDE ( r_lb_util_get_res_lt_addr = 0x4001ad98 );');
+          Add('PROVIDE ( r_lb_util_set_nb_broadcast = 0x4001ad8c );');
+          Add('PROVIDE ( r_lc_afh_set = 0x4001cc74 );');
+          Add('PROVIDE ( r_lc_afh_start = 0x4001d240 );');
+          Add('PROVIDE ( r_lc_auth_cmp = 0x4001cd54 );');
+          Add('PROVIDE ( r_lc_calc_link_key = 0x4001ce7c );');
+          Add('PROVIDE ( r_lc_chg_pkt_type_cmp = 0x4001d038 );');
+          Add('PROVIDE ( r_lc_chg_pkt_type_cont = 0x4001cfbc );');
+          Add('PROVIDE ( r_lc_chg_pkt_type_retry = 0x4001d0ac );');
+          Add('PROVIDE ( r_lc_chk_to = 0x4001d2a8 );');
+          Add('PROVIDE ( r_lc_cmd_stat_send = 0x4001c914 );');
+          Add('PROVIDE ( r_lc_comb_key_svr = 0x4001d30c );');
+          Add('PROVIDE ( r_lc_con_cmp = 0x4001d44c );');
+          Add('PROVIDE ( r_lc_con_cmp_evt_send = 0x4001d4fc );');
+          Add('PROVIDE ( r_lc_conn_seq_done = 0x40021334 );');
+          Add('PROVIDE ( r_lc_detach = 0x4002037c );');
+          Add('PROVIDE ( r_lc_dhkey = 0x4001d564 );');
+          Add('PROVIDE ( r_lc_enc_cmp = 0x4001d8bc );');
+          Add('PROVIDE ( r_lc_enc_key_refresh = 0x4001d720 );');
+          Add('PROVIDE ( r_lc_end_chk_colli = 0x4001d858 );');
+          Add('PROVIDE ( r_lc_end_of_sniff_nego = 0x4001d9a4 );');
+          Add('PROVIDE ( r_lc_enter_sniff_mode = 0x4001ddb8 );');
+          Add('PROVIDE ( r_lc_epr_change_lk = 0x4001db38 );');
+          Add('PROVIDE ( r_lc_epr_cmp = 0x4001da88 );');
+          Add('PROVIDE ( r_lc_epr_resp = 0x4001e0b4 );');
+          Add('PROVIDE ( r_lc_epr_rsw_cmp = 0x4001dd40 );');
+          Add('PROVIDE ( r_lc_ext_feat = 0x40020d6c );');
+          Add('PROVIDE ( r_lc_feat = 0x40020984 );');
+          Add('PROVIDE ( r_lc_hl_connect = 0x400209e8 );');
+          Add('PROVIDE ( r_lc_init = 0x4001c948 );');
+          Add('PROVIDE ( r_lc_init_calc_f3 = 0x4001deb0 );');
+          Add('PROVIDE ( r_lc_initiator_epr = 0x4001e064 );');
+          Add('PROVIDE ( r_lc_init_passkey_loop = 0x4001dfc0 );');
+          Add('PROVIDE ( r_lc_init_start_mutual_auth = 0x4001df60 );');
+          Add('PROVIDE ( r_lc_key_exch_end = 0x4001e140 );');
+          Add('PROVIDE ( r_lc_legacy_pair = 0x4001e1c0 );');
+          Add('PROVIDE ( r_lc_local_switch = 0x4001e22c );');
+          Add('PROVIDE ( r_lc_local_trans_mode = 0x4001e2e4 );');
+          Add('PROVIDE ( r_lc_local_untrans_mode = 0x4001e3a0 );');
+          Add('PROVIDE ( r_lc_loc_auth = 0x40020ecc );');
+          Add('PROVIDE ( r_lc_locepr_lkref = 0x4001d648 );');
+          Add('PROVIDE ( r_lc_locepr_rsw = 0x4001d5d0 );');
+          Add('PROVIDE ( r_lc_loc_sniff = 0x40020a6c );');
+          Add('PROVIDE ( r_lc_max_slot_mgt = 0x4001e410 );');
+          Add('PROVIDE ( r_lc_mst_key = 0x4001e7c0 );');
+          Add('PROVIDE ( r_lc_mst_qos_done = 0x4001ea80 );');
+          Add('PROVIDE ( r_lc_mst_send_mst_key = 0x4001e8f4 );');
+          Add('PROVIDE ( r_lc_mutual_auth_end = 0x4001e670 );');
+          Add('PROVIDE ( r_lc_mutual_auth_end2 = 0x4001e4f4 );');
+          Add('PROVIDE ( r_lc_packet_type = 0x40021038 );');
+          Add('PROVIDE ( r_lc_pair = 0x40020ddc );');
+          Add('PROVIDE ( r_lc_pairing_cont = 0x4001eafc );');
+          Add('PROVIDE ( r_lc_passkey_comm = 0x4001ed20 );');
+          Add('PROVIDE ( r_lc_prepare_all_links_for_clk_adj = 0x40021430 );');
+          Add('PROVIDE ( r_lc_proc_rcv_dhkey = 0x4001edec );');
+          Add('PROVIDE ( r_lc_ptt = 0x4001ee2c );');
+          Add('PROVIDE ( r_lc_ptt_cmp = 0x4001eeec );');
+          Add('PROVIDE ( r_lc_qos_setup = 0x4001ef50 );');
+          Add('PROVIDE ( r_lc_rd_rem_name = 0x4001efd0 );');
+          Add('PROVIDE ( r_lc_release = 0x4001f8a8 );');
+          Add('PROVIDE ( r_lc_rem_enc = 0x4001f124 );');
+          Add('PROVIDE ( r_lc_rem_name_cont = 0x4001f290 );');
+          Add('PROVIDE ( r_lc_rem_nego_trans_mode = 0x4001f1b4 );');
+          Add('PROVIDE ( r_lc_rem_sniff = 0x40020ca4 );');
+          Add('PROVIDE ( r_lc_rem_sniff_sub_rate = 0x40020b10 );');
+          Add('PROVIDE ( r_lc_rem_switch = 0x4001f070 );');
+          Add('PROVIDE ( r_lc_rem_trans_mode = 0x4001f314 );');
+          Add('PROVIDE ( r_lc_rem_unsniff = 0x400207a0 );');
+          Add('PROVIDE ( r_lc_rem_untrans_mode = 0x4001f36c );');
+          Add('PROVIDE ( r_lc_reset = 0x4001c99c );');
+          Add('PROVIDE ( r_lc_resp_auth = 0x4001f518 );');
+          Add('PROVIDE ( r_lc_resp_calc_f3 = 0x4001f710 );');
+          Add('PROVIDE ( r_lc_resp_num_comp = 0x40020074 );');
+          Add('PROVIDE ( r_lc_resp_oob_nonce = 0x4001f694 );');
+          Add('PROVIDE ( r_lc_resp_oob_wait_nonce = 0x4001f66c );');
+          Add('PROVIDE ( r_lc_resp_pair = 0x400208a4 );');
+          Add('PROVIDE ( r_lc_resp_sec_auth = 0x4001f4a0 );');
+          Add('PROVIDE ( r_lc_resp_wait_dhkey_cont = 0x4001f86c );');
+          Add('PROVIDE ( r_lc_restart_enc = 0x4001f8ec );');
+          Add('PROVIDE ( r_lc_restart_enc_cont = 0x4001f940 );');
+          Add('PROVIDE ( r_lc_restore_afh_reporting = 0x4001f028 );');
+          Add('PROVIDE ( r_lc_restore_to = 0x4001f9e0 );');
+          Add('PROVIDE ( r_lc_ret_sniff_max_slot_chg = 0x4001fa30 );');
+          Add('PROVIDE ( r_lc_rsw_clean_up = 0x4001dc70 );');
+          Add('PROVIDE ( r_lc_rsw_done = 0x4001db94 );');
+          Add('PROVIDE ( r_lc_sco_baseband_ack = 0x40022b00 );');
+          Add('PROVIDE ( r_lc_sco_detach = 0x40021e40 );');
+          Add('PROVIDE ( r_lc_sco_host_accept = 0x40022118 );');
+          Add('PROVIDE ( r_lc_sco_host_reject = 0x400222b8 );');
+          Add('PROVIDE ( r_lc_sco_host_request = 0x40021f4c );');
+          Add('PROVIDE ( r_lc_sco_host_request_disc = 0x4002235c );');
+          Add('PROVIDE ( r_lc_sco_init = 0x40021dc8 );');
+          Add('PROVIDE ( r_lc_sco_peer_accept = 0x40022780 );');
+          Add('PROVIDE ( r_lc_sco_peer_accept_disc = 0x40022a08 );');
+          Add('PROVIDE ( r_lc_sco_peer_reject = 0x40022824 );');
+          Add('PROVIDE ( r_lc_sco_peer_reject_disc = 0x40022a8c );');
+          Add('PROVIDE ( r_lc_sco_peer_request = 0x4002240c );');
+          Add('PROVIDE ( r_lc_sco_peer_request_disc = 0x400228ec );');
+          Add('PROVIDE ( r_lc_sco_release = 0x40021eec );');
+          Add('PROVIDE ( r_lc_sco_reset = 0x40021dfc );');
+          Add('PROVIDE ( r_lc_sco_timeout = 0x40022bd4 );');
+          Add('PROVIDE ( r_lc_sec_auth_compute_sres = 0x4001f3ec );');
+          Add('PROVIDE ( r_lc_semi_key_cmp = 0x40020294 );');
+          Add('PROVIDE ( r_lc_send_enc_chg_evt = 0x4002134c );');
+          Add('PROVIDE ( r_lc_send_enc_mode = 0x40020220 );');
+          Add('PROVIDE ( r_lc_send_lmp = 0x4001c1a8 );');
+          Add('PROVIDE ( r_lc_send_pdu_acc = 0x4001c21c );');
+          Add('PROVIDE ( r_lc_send_pdu_acc_ext4 = 0x4001c240 );');
+          Add('PROVIDE ( r_lc_send_pdu_au_rand = 0x4001c308 );');
+          Add('PROVIDE ( r_lc_send_pdu_auto_rate = 0x4001c5d0 );');
+          Add('PROVIDE ( r_lc_send_pdu_clk_adj_ack = 0x4001c46c );');
+          Add('PROVIDE ( r_lc_send_pdu_clk_adj_req = 0x4001c494 );');
+          Add('PROVIDE ( r_lc_send_pdu_comb_key = 0x4001c368 );');
+          Add('PROVIDE ( r_lc_send_pdu_dhkey_chk = 0x4001c8e8 );');
+          Add('PROVIDE ( r_lc_send_pdu_encaps_head = 0x4001c440 );');
+          Add('PROVIDE ( r_lc_send_pdu_encaps_payl = 0x4001c410 );');
+          Add('PROVIDE ( r_lc_send_pdu_enc_key_sz_req = 0x4001c670 );');
+          Add('PROVIDE ( r_lc_send_pdu_esco_lk_rem_req = 0x4001c5a8 );');
+          Add('PROVIDE ( r_lc_send_pdu_feats_ext_req = 0x4001c6ec );');
+          Add('PROVIDE ( r_lc_send_pdu_feats_res = 0x4001c694 );');
+          Add('PROVIDE ( r_lc_send_pdu_in_rand = 0x4001c338 );');
+          Add('PROVIDE ( r_lc_send_pdu_io_cap_res = 0x4001c72c );');
+          Add('PROVIDE ( r_lc_send_pdu_lsto = 0x4001c64c );');
+          Add('PROVIDE ( r_lc_send_pdu_max_slot = 0x4001c3c8 );');
+          Add('PROVIDE ( r_lc_send_pdu_max_slot_req = 0x4001c3ec );');
+          Add('PROVIDE ( r_lc_send_pdu_not_acc = 0x4001c26c );');
+          Add('PROVIDE ( r_lc_send_pdu_not_acc_ext4 = 0x4001c294 );');
+          Add('PROVIDE ( r_lc_send_pdu_num_comp_fail = 0x4001c770 );');
+          Add('PROVIDE ( r_lc_send_pdu_pause_enc_aes_req = 0x4001c794 );');
+          Add('PROVIDE ( r_lc_send_pdu_paus_enc_req = 0x4001c7c0 );');
+          Add('PROVIDE ( r_lc_send_pdu_ptt_req = 0x4001c4c0 );');
+          Add('PROVIDE ( r_lc_send_pdu_qos_req = 0x4001c82c );');
+          Add('PROVIDE ( r_lc_send_pdu_resu_enc_req = 0x4001c7e4 );');
+          Add('PROVIDE ( r_lc_send_pdu_sco_lk_rem_req = 0x4001c580 );');
+          Add('PROVIDE ( r_lc_send_pdu_set_afh = 0x4001c2c8 );');
+          Add('PROVIDE ( r_lc_send_pdu_setup_cmp = 0x4001c808 );');
+          Add('PROVIDE ( r_lc_send_pdu_slot_off = 0x4001c854 );');
+          Add('PROVIDE ( r_lc_send_pdu_sniff_req = 0x4001c5f0 );');
+          Add('PROVIDE ( r_lc_send_pdu_sp_cfm = 0x4001c518 );');
+          Add('PROVIDE ( r_lc_send_pdu_sp_nb = 0x4001c4e8 );');
+          Add('PROVIDE ( r_lc_send_pdu_sres = 0x4001c548 );');
+          Add('PROVIDE ( r_lc_send_pdu_tim_acc = 0x4001c6cc );');
+          Add('PROVIDE ( r_lc_send_pdu_unit_key = 0x4001c398 );');
+          Add('PROVIDE ( r_lc_send_pdu_unsniff_req = 0x4001c894 );');
+          Add('PROVIDE ( r_lc_send_pdu_vers_req = 0x4001c8b4 );');
+          Add('PROVIDE ( r_lc_skip_hl_oob_req = 0x400201bc );');
+          Add('PROVIDE ( r_lc_sniff_init = 0x40022cac );');
+          Add('PROVIDE ( r_lc_sniff_max_slot_chg = 0x40020590 );');
+          Add('PROVIDE ( r_lc_sniff_reset = 0x40022cc8 );');
+          Add('PROVIDE ( r_lc_sniff_slot_unchange = 0x40021100 );');
+          Add('PROVIDE ( r_lc_sniff_sub_mode = 0x400204fc );');
+          Add('PROVIDE ( r_lc_sp_end = 0x400213a8 );');
+          Add('PROVIDE ( r_lc_sp_fail = 0x40020470 );');
+          Add('PROVIDE ( r_lc_sp_oob_tid_fail = 0x400204cc );');
+          Add('PROVIDE ( r_lc_ssr_nego = 0x4002125c );');
+          Add('PROVIDE ( r_lc_start = 0x4001ca28 );');
+          Add('PROVIDE ( r_lc_start_enc = 0x4001fb28 );');
+          Add('PROVIDE ( r_lc_start_enc_key_size = 0x4001fd9c );');
+          Add('PROVIDE ( r_lc_start_key_exch = 0x4001fe10 );');
+          Add('PROVIDE ( r_lc_start_lmp_to = 0x4001fae8 );');
+          Add('PROVIDE ( r_lc_start_oob = 0x4001fffc );');
+          Add('PROVIDE ( r_lc_start_passkey = 0x4001feac );');
+          Add('PROVIDE ( r_lc_start_passkey_loop = 0x4001ff88 );');
+          Add('PROVIDE ( r_lc_stop_afh_report = 0x40020184 );');
+          Add('PROVIDE ( r_lc_stop_enc = 0x40020110 );');
+          Add('PROVIDE ( r_lc_switch_cmp = 0x40020448 );');
+          Add('PROVIDE ( r_lc_unit_key_svr = 0x400206d8 );');
+          Add('PROVIDE ( r_lc_unsniff = 0x40020c50 );');
+          Add('PROVIDE ( r_lc_unsniff_cmp = 0x40020810 );');
+          Add('PROVIDE ( r_lc_unsniff_cont = 0x40020750 );');
+          Add('PROVIDE ( r_lc_upd_to = 0x4002065c );');
+          Add('PROVIDE ( r_lc_util_convert_pref_rate_to_packet_type = 0x4002f9b0 );');
+          Add('PROVIDE ( r_lc_util_get_max_packet_size = 0x4002f4ac );');
+          Add('PROVIDE ( r_lc_util_get_offset_clke = 0x4002f538 );');
+          Add('PROVIDE ( r_lc_util_get_offset_clkn = 0x4002f51c );');
+          Add('PROVIDE ( r_lc_util_set_loc_trans_coll = 0x4002f500 );');
+          Add('PROVIDE ( r_lc_version = 0x40020a30 );');
+          Add('PROVIDE ( lc_set_encap_pdu_data_p192 = 0x4002e4c8 );');
+          Add('PROVIDE ( lc_set_encap_pdu_data_p256 = 0x4002e454 );');
+          Add('PROVIDE ( lm_get_auth_method = 0x40023420);');
+          Add('PROVIDE ( lmp_accepted_ext_handler = 0x40027290 );');
+          Add('PROVIDE ( lmp_not_accepted_ext_handler = 0x40029c54 );');
+          Add('PROVIDE ( lmp_clk_adj_handler = 0x40027468 );');
+          Add('PROVIDE ( lmp_clk_adj_ack_handler = 0x400274f4 );');
+          Add('PROVIDE ( lm_get_auth_method = 0x40023420);');
+          Add('PROVIDE ( lmp_accepted_ext_handler = 0x40027290 );');
+          Add('PROVIDE ( lmp_not_accepted_ext_handler = 0x40029c54 );');
+          Add('PROVIDE ( lmp_clk_adj_handler = 0x40027468 );');
+          Add('PROVIDE ( lmp_clk_adj_ack_handler = 0x400274f4 );');
+          Add('PROVIDE ( lmp_clk_adj_req_handler = 0x4002751c );');
+          Add('PROVIDE ( lmp_feats_res_ext_handler = 0x4002cac4 );');
+          Add('PROVIDE ( lmp_feats_req_ext_handler = 0x4002ccb0 );');
+          Add('PROVIDE ( lmp_pkt_type_tbl_req_handler = 0x40027574 );');
+          Add('PROVIDE ( lmp_esco_link_req_handler = 0x40027610 );');
+          Add('PROVIDE ( lmp_rmv_esco_link_req_handler = 0x400276e8 );');
+          Add('PROVIDE ( lmp_ch_class_req_handler = 0x40027730 );');
+          Add('PROVIDE ( lmp_ch_class_handler = 0x4002ca18 );');
+          Add('PROVIDE ( lmp_ssr_req_handler = 0x4002780c );');
+          Add('PROVIDE ( lmp_ssr_res_handler = 0x40027900 );');
+          Add('PROVIDE ( lmp_pause_enc_aes_req_handler = 0x400279a4 );');
+          Add('PROVIDE ( lmp_pause_enc_req_handler = 0x4002df90 );');
+          Add('PROVIDE ( lmp_resume_enc_req_handler = 0x4002e084 );');
+          Add('PROVIDE ( lmp_num_comparison_fail_handler = 0x40027a74 );');
+          Add('PROVIDE ( lmp_passkey_fail_handler = 0x40027aec );');
+          Add('PROVIDE ( lmp_keypress_notif_handler = 0x4002c5c8 );');
+          Add('PROVIDE ( lmp_pwr_ctrl_req_handler = 0x400263bc );');
+          Add('PROVIDE ( lmp_pwr_ctrl_res_handler = 0x40026480 );');
+          Add('PROVIDE ( lmp_auto_rate_handler = 0x40026548 );');
+          Add('PROVIDE ( lmp_pref_rate_handler = 0x4002657c );');
+          Add('PROVIDE ( lmp_name_req_handler = 0x40025050 );');
+          Add('PROVIDE ( lmp_name_res_handler = 0x400250bc );');
+          Add('PROVIDE ( lmp_not_accepted_handler = 0x400251d0 );');
+          Add('PROVIDE ( lmp_accepted_handler = 0x4002e894 );');
+          Add('PROVIDE ( lmp_clk_off_req_handler = 0x40025a44 );');
+          Add('PROVIDE ( lmp_clk_off_res_handler = 0x40025ab8 );');
+          Add('PROVIDE ( lmp_detach_handler = 0x40025b74 );');
+          Add('PROVIDE ( lmp_tempkey_handler = 0x4002b6b0 );');
+          Add('PROVIDE ( lmp_temprand_handler = 0x4002b74c );');
+          Add('PROVIDE ( lmp_sres_handler = 0x4002b840 );');
+          Add('PROVIDE ( lmp_aurand_handler = 0x4002bda0 );');
+          Add('PROVIDE ( lmp_unitkey_handler = 0x4002c13c );');
+          Add('PROVIDE ( lmp_combkey_handler = 0x4002c234 );');
+          Add('PROVIDE ( lmp_inrand_handler = 0x4002c414 );');
+          Add('PROVIDE ( lmp_oob_fail_handler = 0x40027b84 );');
+          Add('PROVIDE ( lmp_ping_req_handler = 0x40027c08 );');
+          Add('PROVIDE ( lmp_ping_res_handler = 0x40027c5c );');
+          Add('PROVIDE ( lmp_enc_mode_req_handler = 0x40025c60 );');
+          Add('PROVIDE ( lmp_enc_key_size_req_handler = 0x40025e54 );');
+          Add('PROVIDE ( lmp_switch_req_handler = 0x40025f84 );');
+          Add('PROVIDE ( lmp_start_enc_req_handler = 0x4002e124 );');
+          Add('PROVIDE ( lmp_stop_enc_req_handler = 0x4002de30 );');
+          Add('PROVIDE ( lmp_sniff_req_handler = 0x400260c8 );');
+          Add('PROVIDE ( lmp_unsniff_req_handler = 0x400261e0 );');
+          Add('PROVIDE ( lmp_incr_pwr_req_handler = 0x4002629c );');
+          Add('PROVIDE ( lmp_decr_pwr_req_handler = 0x400262f8 );');
+          Add('PROVIDE ( lmp_max_pwr_handler = 0x40026354 );');
+          Add('PROVIDE ( lmp_min_pwr_handler = 0x40026388 );');
+          Add('PROVIDE ( lmp_ver_req_handler = 0x400265f0 );');
+          Add('PROVIDE ( lmp_ver_res_handler = 0x40026670 );');
+          Add('PROVIDE ( lmp_qos_handler = 0x40026790 );');
+          Add('PROVIDE ( lmp_qos_req_handler = 0x40026844 );');
+          Add('PROVIDE ( lmp_sco_link_req_handler = 0x40026930 );');
+          Add('PROVIDE ( lmp_rmv_sco_link_req_handler = 0x40026a10 );');
+          Add('PROVIDE ( lmp_max_slot_handler = 0x40026a54 );');
+          Add('PROVIDE ( lmp_max_slot_req_handler = 0x40026aac );');
+          Add('PROVIDE ( lmp_timing_accu_req_handler = 0x40026b54 );');
+          Add('PROVIDE ( lmp_timing_accu_res_handler = 0x40026bcc );');
+          Add('PROVIDE ( lmp_setup_cmp_handler = 0x40026c84 );');
+          Add('PROVIDE ( lmp_feats_res_handler = 0x4002b548 );');
+          Add('PROVIDE ( lmp_feats_req_handler = 0x4002b620 );');
+          Add('PROVIDE ( lmp_host_con_req_handler = 0x4002b3d8 );');
+          Add('PROVIDE ( lmp_use_semi_perm_key_handler = 0x4002b4c4 );');
+          Add('PROVIDE ( lmp_slot_off_handler = 0x40026cc8 );');
+          Add('PROVIDE ( lmp_page_mode_req_handler = 0x40026d0c );');
+          Add('PROVIDE ( lmp_page_scan_mode_req_handler = 0x40026d4c );');
+          Add('PROVIDE ( lmp_supv_to_handler = 0x40026d94 );');
+          Add('PROVIDE ( lmp_test_activate_handler = 0x40026e7c );');
+          Add('PROVIDE ( lmp_test_ctrl_handler = 0x40026ee4 );');
+          Add('PROVIDE ( lmp_enc_key_size_mask_req_handler = 0x40027038 );');
+          Add('PROVIDE ( lmp_enc_key_size_mask_res_handler = 0x400270a4 );');
+          Add('PROVIDE ( lmp_set_afh_handler = 0x4002b2e4 );');
+          Add('PROVIDE ( lmp_encaps_hdr_handler = 0x40027120 );');
+          Add('PROVIDE ( lmp_encaps_payl_handler = 0x4002e590 );');
+          Add('PROVIDE ( lmp_sp_nb_handler = 0x4002acf0 );');
+          Add('PROVIDE ( lmp_sp_cfm_handler = 0x4002b170 );');
+          Add('PROVIDE ( lmp_dhkey_chk_handler = 0x4002ab48 );');
+          Add('PROVIDE ( lmp_pause_enc_aes_req_handler = 0x400279a4 );');
+          Add('PROVIDE ( lmp_io_cap_res_handler = 0x4002c670 );');
+          Add('PROVIDE ( lmp_io_cap_req_handler = 0x4002c7a4 );');
+          Add('PROVIDE ( lc_cmd_cmp_bd_addr_send = 0x4002cec4 );');
+          Add('PROVIDE ( ld_acl_tx_packet_type_select = 0x4002fb40 );');
+          Add('PROVIDE ( ld_acl_sched = 0x40033268 );');
+          Add('PROVIDE ( ld_acl_sniff_sched = 0x4003340c );');
+          Add('PROVIDE ( ld_acl_rx = 0x4003274c );');
+          Add('PROVIDE ( ld_acl_tx = 0x4002ffdc );');
+          Add('PROVIDE ( ld_acl_rx_sync = 0x4002fbec );');
+          Add('PROVIDE ( ld_acl_rx_sync2 = 0x4002fd8c );');
+          Add('PROVIDE ( ld_acl_rx_no_sync = 0x4002fe78 );');
+          Add('PROVIDE ( ld_acl_clk_isr = 0x40030cf8 );');
+          Add('PROVIDE ( ld_acl_rsw_frm_cbk = 0x40033bb0 );');
+          Add('PROVIDE ( ld_sco_modify = 0x40031778 );');
+          Add('PROVIDE ( lm_cmd_cmp_send = 0x40051838 );');
+          Add('PROVIDE ( ld_sco_frm_cbk = 0x400349dc );');
+          Add('PROVIDE ( ld_acl_sniff_frm_cbk = 0x4003482c );');
+          Add('PROVIDE ( ld_inq_end = 0x4003ab48 );');
+          Add('PROVIDE ( ld_inq_sched = 0x4003aba4 );');
+          Add('PROVIDE ( ld_inq_frm_cbk = 0x4003ae4c );');
+          Add('PROVIDE ( r_ld_acl_active_hop_types_get = 0x40036e10 );');
+          Add('PROVIDE ( r_ld_acl_afh_confirm = 0x40036d40 );');
+          Add('PROVIDE ( r_ld_acl_afh_prepare = 0x40036c84 );');
+          Add('PROVIDE ( r_ld_acl_afh_set = 0x40036b60 );');
+          Add('PROVIDE ( r_ld_acl_allowed_tx_packet_types_set = 0x40036810 );');
+          Add('PROVIDE ( r_ld_acl_bcst_rx_dec = 0x40036394 );');
+          Add('PROVIDE ( r_ld_acl_bit_off_get = 0x40036b18 );');
+          Add('PROVIDE ( r_ld_acl_clk_adj_set = 0x40036a00 );');
+          Add('PROVIDE ( r_ld_acl_clk_off_get = 0x40036b00 );');
+          Add('PROVIDE ( r_ld_acl_clk_set = 0x40036950 );');
+          Add('PROVIDE ( r_ld_acl_clock_offset_get = 0x400364c0 );');
+          Add('PROVIDE ( r_ld_acl_current_tx_power_get = 0x400368f0 );');
+          Add('PROVIDE ( r_ld_acl_data_flush = 0x400357bc );');
+          Add('PROVIDE ( r_ld_acl_data_tx = 0x4003544c );');
+          Add('PROVIDE ( r_ld_acl_edr_set = 0x4003678c );');
+          Add('PROVIDE ( r_ld_acl_enc_key_load = 0x40036404 );');
+          Add('PROVIDE ( r_ld_acl_flow_off = 0x40035400 );');
+          Add('PROVIDE ( r_ld_acl_flow_on = 0x4003541c );');
+          Add('PROVIDE ( r_ld_acl_flush_timeout_get = 0x40035f9c );');
+          Add('PROVIDE ( r_ld_acl_flush_timeout_set = 0x40035fe0 );');
+          Add('PROVIDE ( r_ld_acl_init = 0x40034d08 );');
+          Add('PROVIDE ( r_ld_acl_lmp_flush = 0x40035d80 );');
+          Add('PROVIDE ( r_ld_acl_lmp_tx = 0x40035b34 );');
+          Add('PROVIDE ( r_ld_acl_lsto_get = 0x400366b4 );');
+          Add('PROVIDE ( r_ld_acl_lsto_set = 0x400366f8 );');
+          Add('PROVIDE ( r_ld_acl_reset = 0x40034d24 );');
+          Add('PROVIDE ( r_ld_acl_role_get = 0x40036b30 );');
+          Add('PROVIDE ( r_ld_acl_rssi_delta_get = 0x40037028 );');
+          Add('PROVIDE ( r_ld_acl_rsw_req = 0x40035e74 );');
+          Add('PROVIDE ( r_ld_acl_rx_enc = 0x40036344 );');
+          Add('PROVIDE ( r_ld_acl_rx_max_slot_get = 0x40036e58 );');
+          Add('PROVIDE ( r_ld_acl_rx_max_slot_set = 0x40036ea0 );');
+          Add('PROVIDE ( r_ld_acl_slot_offset_get = 0x4003653c );');
+          Add('PROVIDE ( r_ld_acl_slot_offset_set = 0x40036658 );');
+          Add('PROVIDE ( r_ld_acl_sniff = 0x4003617c );');
+          Add('PROVIDE ( r_ld_acl_sniff_trans = 0x400360a8 );');
+          Add('PROVIDE ( r_ld_acl_ssr_set = 0x40036274 );');
+          Add('PROVIDE ( r_ld_acl_start = 0x40034ddc );');
+          Add('PROVIDE ( r_ld_acl_stop = 0x4003532c );');
+          Add('PROVIDE ( r_ld_acl_test_mode_set = 0x40036f24 );');
+          Add('PROVIDE ( r_ld_acl_timing_accuracy_set = 0x4003673c );');
+          Add('PROVIDE ( r_ld_acl_t_poll_get = 0x40036024 );');
+          Add('PROVIDE ( r_ld_acl_t_poll_set = 0x40036068 );');
+          Add('PROVIDE ( r_ld_acl_tx_enc = 0x400362f8 );');
+          Add('PROVIDE ( r_ld_acl_unsniff = 0x400361e0 );');
+          Add('PROVIDE ( r_ld_active_check = 0x4003cac4 );');
+          Add('PROVIDE ( r_ld_afh_ch_assess_data_get = 0x4003caec );');
+          Add('PROVIDE ( r_ld_bcst_acl_data_tx = 0x40038d3c );');
+          Add('PROVIDE ( r_ld_bcst_acl_init = 0x40038bd0 );');
+          Add('PROVIDE ( r_ld_bcst_acl_reset = 0x40038bdc );');
+          Add('PROVIDE ( r_ld_bcst_acl_start = 0x4003882c );');
+          Add('PROVIDE ( r_ld_bcst_afh_update = 0x40038f3c );');
+          Add('PROVIDE ( r_ld_bcst_enc_key_load = 0x4003906c );');
+          Add('PROVIDE ( r_ld_bcst_lmp_tx = 0x40038bf8 );');
+          Add('PROVIDE ( r_ld_bcst_tx_enc = 0x40038ff8 );');
+          Add('PROVIDE ( r_ld_bd_addr_get = 0x4003ca20 );');
+          Add('PROVIDE ( r_ld_channel_assess = 0x4003c184 );');
+          Add('PROVIDE ( r_ld_class_of_dev_get = 0x4003ca34 );');
+          Add('PROVIDE ( r_ld_class_of_dev_set = 0x4003ca50 );');
+          Add('PROVIDE ( r_ld_csb_rx_afh_update = 0x40039af4 );');
+          Add('PROVIDE ( r_ld_csb_rx_init = 0x40039690 );');
+          Add('PROVIDE ( r_ld_csb_rx_reset = 0x4003969c );');
+          Add('PROVIDE ( r_ld_csb_rx_start = 0x4003972c );');
+          Add('PROVIDE ( r_ld_csb_rx_stop = 0x40039bb8 );');
+          Add('PROVIDE ( r_ld_csb_tx_afh_update = 0x4003a5fc );');
+          Add('PROVIDE ( r_ld_csb_tx_clr_data = 0x4003a71c );');
+          Add('PROVIDE ( r_ld_csb_tx_dis = 0x4003a5e8 );');
+          Add('PROVIDE ( r_ld_csb_tx_en = 0x4003a1c0 );');
+          Add('PROVIDE ( r_ld_csb_tx_init = 0x4003a0e8 );');
+          Add('PROVIDE ( r_ld_csb_tx_reset = 0x4003a0f8 );');
+          Add('PROVIDE ( r_ld_csb_tx_set_data = 0x4003a6c0 );');
+          Add('PROVIDE ( r_ld_fm_clk_isr = 0x4003a7a8 );');
+          Add('PROVIDE ( r_ld_fm_frame_isr = 0x4003a82c );');
+          Add('PROVIDE ( r_ld_fm_init = 0x4003a760 );');
+          Add('PROVIDE ( r_ld_fm_prog_check = 0x4003ab28 );');
+          Add('PROVIDE ( r_ld_fm_prog_disable = 0x4003a984 );');
+          Add('PROVIDE ( r_ld_fm_prog_enable = 0x4003a944 );');
+          Add('PROVIDE ( r_ld_fm_prog_push = 0x4003a9d4 );');
+          Add('PROVIDE ( r_ld_fm_reset = 0x4003a794 );');
+          Add('PROVIDE ( r_ld_fm_rx_isr = 0x4003a7f4 );');
+          Add('PROVIDE ( r_ld_fm_sket_isr = 0x4003a8a4 );');
+          Add('PROVIDE ( r_ld_init = 0x4003c294 );');
+          Add('PROVIDE ( r_ld_inq_init = 0x4003b15c );');
+          Add('PROVIDE ( r_ld_inq_reset = 0x4003b168 );');
+          Add('PROVIDE ( r_ld_inq_start = 0x4003b1f0 );');
+          Add('PROVIDE ( r_ld_inq_stop = 0x4003b4f0 );');
+          Add('PROVIDE ( r_ld_iscan_eir_get = 0x4003c118 );');
+          Add('PROVIDE ( r_ld_iscan_eir_set = 0x4003bfa0 );');
+          Add('PROVIDE ( r_ld_iscan_init = 0x4003b9f0 );');
+          Add('PROVIDE ( r_ld_iscan_reset = 0x4003ba14 );');
+          Add('PROVIDE ( r_ld_iscan_restart = 0x4003ba44 );');
+          Add('PROVIDE ( r_ld_iscan_start = 0x4003bb28 );');
+          Add('PROVIDE ( r_ld_iscan_stop = 0x4003bf1c );');
+          Add('PROVIDE ( r_ld_iscan_tx_pwr_get = 0x4003c138 );');
+          Add('PROVIDE ( r_ld_page_init = 0x4003d808 );');
+          Add('PROVIDE ( r_ld_page_reset = 0x4003d814 );');
+          Add('PROVIDE ( r_ld_page_start = 0x4003d848 );');
+          Add('PROVIDE ( r_ld_page_stop = 0x4003da54 );');
+          Add('PROVIDE ( r_ld_pca_coarse_clock_adjust = 0x4003e324 );');
+          Add('PROVIDE ( r_ld_pca_init = 0x4003deb4 );');
+          Add('PROVIDE ( r_ld_pca_initiate_clock_dragging = 0x4003e4ac );');
+          Add('PROVIDE ( r_ld_pca_local_config = 0x4003df6c );');
+          Add('PROVIDE ( r_ld_pca_mws_frame_sync = 0x4003e104 );');
+          Add('PROVIDE ( r_ld_pca_mws_moment_offset_gt = 0x4003e278 );');
+          Add('PROVIDE ( r_ld_pca_mws_moment_offset_lt = 0x4003e280 );');
+          Add('PROVIDE ( r_ld_pca_reporting_enable = 0x4003e018 );');
+          Add('PROVIDE ( r_ld_pca_reset = 0x4003df0c );');
+          Add('PROVIDE ( r_ld_pca_update_target_offset = 0x4003e050 );');
+          Add('PROVIDE ( r_ld_pscan_evt_handler = 0x4003f238 );');
+          Add('PROVIDE ( r_ld_pscan_init = 0x4003f474 );');
+          Add('PROVIDE ( r_ld_pscan_reset = 0x4003f498 );');
+          Add('PROVIDE ( r_ld_pscan_restart = 0x4003f4b8 );');
+          Add('PROVIDE ( r_ld_pscan_start = 0x4003f514 );');
+          Add('PROVIDE ( r_ld_pscan_stop = 0x4003f618 );');
+          Add('PROVIDE ( r_ld_read_clock = 0x4003c9e4 );');
+          Add('PROVIDE ( r_ld_reset = 0x4003c714 );');
+          Add('PROVIDE ( r_ld_sched_acl_add = 0x4003f978 );');
+          Add('PROVIDE ( r_ld_sched_acl_remove = 0x4003f99c );');
+          Add('PROVIDE ( r_ld_sched_compute = 0x4003f6f8 );');
+          Add('PROVIDE ( r_ld_sched_init = 0x4003f7ac );');
+          Add('PROVIDE ( r_ld_sched_inq_add = 0x4003f8a8 );');
+          Add('PROVIDE ( r_ld_sched_inq_remove = 0x4003f8d0 );');
+          Add('PROVIDE ( r_ld_sched_iscan_add = 0x4003f7e8 );');
+          Add('PROVIDE ( r_ld_sched_iscan_remove = 0x4003f808 );');
+          Add('PROVIDE ( r_ld_sched_page_add = 0x4003f910 );');
+          Add('PROVIDE ( r_ld_sched_page_remove = 0x4003f938 );');
+          Add('PROVIDE ( r_ld_sched_pscan_add = 0x4003f828 );');
+          Add('PROVIDE ( r_ld_sched_pscan_remove = 0x4003f848 );');
+          Add('PROVIDE ( r_ld_sched_reset = 0x4003f7d4 );');
+          Add('PROVIDE ( r_ld_sched_sco_add = 0x4003fa4c );');
+          Add('PROVIDE ( r_ld_sched_sco_remove = 0x4003fa9c );');
+          Add('PROVIDE ( r_ld_sched_sniff_add = 0x4003f9c4 );');
+          Add('PROVIDE ( r_ld_sched_sniff_remove = 0x4003fa0c );');
+          Add('PROVIDE ( r_ld_sched_sscan_add = 0x4003f868 );');
+          Add('PROVIDE ( r_ld_sched_sscan_remove = 0x4003f888 );');
+          Add('PROVIDE ( r_ld_sco_audio_isr = 0x40037cc8 );');
+          Add('PROVIDE ( r_ld_sco_data_tx = 0x40037ee8 );');
+          Add('PROVIDE ( r_ld_sco_start = 0x40037110 );');
+          Add('PROVIDE ( r_ld_sco_stop = 0x40037c40 );');
+          Add('PROVIDE ( r_ld_sco_update = 0x40037a74 );');
+          Add('PROVIDE ( r_ld_sscan_activated = 0x4004031c );');
+          Add('PROVIDE ( r_ld_sscan_init = 0x400402f0 );');
+          Add('PROVIDE ( r_ld_sscan_reset = 0x400402fc );');
+          Add('PROVIDE ( r_ld_sscan_start = 0x40040384 );');
+          Add('PROVIDE ( r_ld_strain_init = 0x400409f4 );');
+          Add('PROVIDE ( r_ld_strain_reset = 0x40040a00 );');
+          Add('PROVIDE ( r_ld_strain_start = 0x40040a8c );');
+          Add('PROVIDE ( r_ld_strain_stop = 0x40040df0 );');
+          Add('PROVIDE ( r_ld_timing_accuracy_get = 0x4003caac );');
+          Add('PROVIDE ( r_ld_util_active_master_afh_map_get = 0x4004131c );');
+          Add('PROVIDE ( r_ld_util_active_master_afh_map_set = 0x40041308 );');
+          Add('PROVIDE ( r_ld_util_bch_create = 0x40040fcc );');
+          Add('PROVIDE ( r_ld_util_fhs_pk = 0x400411c8 );');
+          Add('PROVIDE ( r_ld_util_fhs_unpk = 0x40040e54 );');
+          Add('PROVIDE ( r_ld_util_stp_pk = 0x400413f4 );');
+          Add('PROVIDE ( r_ld_util_stp_unpk = 0x40041324 );');
+          Add('PROVIDE ( r_ld_version_get = 0x4003ca6c );');
+          Add('PROVIDE ( r_ld_wlcoex_set = 0x4003caf8 );');
+          Add('PROVIDE ( r_llc_ch_assess_get_current_ch_map = 0x40041574 );');
+          Add('PROVIDE ( r_llc_ch_assess_get_local_ch_map = 0x4004150c );');
+          Add('PROVIDE ( r_llc_ch_assess_local = 0x40041494 );');
+          Add('PROVIDE ( r_llc_ch_assess_merge_ch = 0x40041588 );');
+          Add('PROVIDE ( r_llc_ch_assess_reass_ch = 0x400415c0 );');
+          Add('PROVIDE ( r_llc_common_cmd_complete_send = 0x40044eac );');
+          Add('PROVIDE ( r_llc_common_cmd_status_send = 0x40044ee0 );');
+          Add('PROVIDE ( r_llc_common_enc_change_evt_send = 0x40044f6c );');
+          Add('PROVIDE ( r_llc_common_enc_key_ref_comp_evt_send = 0x40044f38 );');
+          Add('PROVIDE ( r_llc_common_flush_occurred_send = 0x40044f0c );');
+          Add('PROVIDE ( r_llc_common_nb_of_pkt_comp_evt_send = 0x40045000 );');
+          Add('PROVIDE ( r_llc_con_update_complete_send = 0x40044d68 );');
+          Add('PROVIDE ( r_llc_con_update_finished = 0x4004518c );');
+          Add('PROVIDE ( r_llc_con_update_ind = 0x40045038 );');
+          Add('PROVIDE ( r_llc_discon_event_complete_send = 0x40044a30 );');
+          Add('PROVIDE ( r_llc_end_evt_defer = 0x40046330 );');
+          Add('PROVIDE ( r_llc_feats_rd_event_send = 0x40044e0c );');
+          Add('PROVIDE ( r_llc_init = 0x40044778 );');
+          Add('PROVIDE ( r_llc_le_con_cmp_evt_send = 0x40044a78 );');
+          Add('PROVIDE ( r_llc_llcp_ch_map_update_pdu_send = 0x40043f94 );');
+          Add('PROVIDE ( r_llc_llcp_con_param_req_pdu_send = 0x400442fc );');
+          Add('PROVIDE ( r_llc_llcp_con_param_rsp_pdu_send = 0x40044358 );');
+          Add('PROVIDE ( r_llc_llcp_con_update_pdu_send = 0x400442c4 );');
+          Add('PROVIDE ( r_llc_llcp_enc_req_pdu_send = 0x40044064 );');
+          Add('PROVIDE ( r_llc_llcp_enc_rsp_pdu_send = 0x40044160 );');
+          Add('PROVIDE ( r_llc_llcp_feats_req_pdu_send = 0x400443b4 );');
+          Add('PROVIDE ( r_llc_llcp_feats_rsp_pdu_send = 0x400443f0 );');
+          Add('PROVIDE ( r_llc_llcp_get_autorize = 0x4004475c );');
+          Add('PROVIDE ( r_llc_llcp_length_req_pdu_send = 0x40044574 );');
+          Add('PROVIDE ( r_llc_llcp_length_rsp_pdu_send = 0x400445ac );');
+          Add('PROVIDE ( r_llc_llcp_pause_enc_req_pdu_send = 0x40043fd8 );');
+          Add('PROVIDE ( r_llc_llcp_pause_enc_rsp_pdu_send = 0x40044010 );');
+          Add('PROVIDE ( r_llc_llcp_ping_req_pdu_send = 0x4004454c );');
+          Add('PROVIDE ( r_llc_llcp_ping_rsp_pdu_send = 0x40044560 );');
+          Add('PROVIDE ( r_llc_llcp_recv_handler = 0x40044678 );');
+          Add('PROVIDE ( r_llc_llcp_reject_ind_pdu_send = 0x4004425c );');
+          Add('PROVIDE ( r_llc_llcp_start_enc_req_pdu_send = 0x4004441c );');
+          Add('PROVIDE ( r_llc_llcp_start_enc_rsp_pdu_send = 0x400441f8 );');
+          Add('PROVIDE ( r_llc_llcp_terminate_ind_pdu_send = 0x400444b0 );');
+          Add('PROVIDE ( r_llc_llcp_tester_send = 0x400445e4 );');
+          Add('PROVIDE ( r_llc_llcp_unknown_rsp_send_pdu = 0x40044534 );');
+          Add('PROVIDE ( r_llc_llcp_version_ind_pdu_send = 0x40043f6c );');
+          Add('PROVIDE ( r_llc_lsto_con_update = 0x40045098 );');
+          Add('PROVIDE ( r_llc_ltk_req_send = 0x40044dc0 );');
+          Add('PROVIDE ( r_llc_map_update_finished = 0x40045260 );');
+          Add('PROVIDE ( r_llc_map_update_ind = 0x400450f0 );');
+          Add('PROVIDE ( r_llc_pdu_acl_tx_ack_defer = 0x400464dc );');
+          Add('PROVIDE ( r_llc_pdu_defer = 0x40046528 );');
+          Add('PROVIDE ( r_llc_pdu_llcp_tx_ack_defer = 0x400463ac );');
+          Add('PROVIDE ( r_llc_reset = 0x400447b8 );');
+          Add('PROVIDE ( r_llc_start = 0x400447f4 );');
+          Add('PROVIDE ( r_llc_stop = 0x400449ac );');
+          Add('PROVIDE ( r_llc_util_bw_mgt = 0x4004629c );');
+          Add('PROVIDE ( r_llc_util_clear_operation_ptr = 0x40046234 );');
+          Add('PROVIDE ( r_llc_util_dicon_procedure = 0x40046130 );');
+          Add('PROVIDE ( r_llc_util_get_free_conhdl = 0x400460c8 );');
+          Add('PROVIDE ( r_llc_util_get_nb_active_link = 0x40046100 );');
+          Add('PROVIDE ( r_llc_util_set_auth_payl_to_margin = 0x400461f4 );');
+          Add('PROVIDE ( r_llc_util_set_llcp_discard_enable = 0x400461c8 );');
+          Add('PROVIDE ( r_llc_util_update_channel_map = 0x400461ac );');
+          Add('PROVIDE ( r_llc_version_rd_event_send = 0x40044e60 );');
+          Add('PROVIDE ( r_lld_adv_start = 0x40048b38 );');
+          Add('PROVIDE ( r_lld_adv_stop = 0x40048ea0 );');
+          Add('PROVIDE ( r_lld_ch_map_ind = 0x4004a2f4 );');
+          Add('PROVIDE ( r_lld_con_param_req = 0x40049f0c );');
+          Add('PROVIDE ( r_lld_con_param_rsp = 0x40049e00 );');
+          Add('PROVIDE ( r_lld_con_start = 0x400491f8 );');
+          Add('PROVIDE ( r_lld_con_stop = 0x40049fdc );');
+          Add('PROVIDE ( r_lld_con_update_after_param_req = 0x40049bcc );');
+          Add('PROVIDE ( r_lld_con_update_ind = 0x4004a30c );');
+          Add('PROVIDE ( r_lld_con_update_req = 0x40049b60 );');
+          Add('PROVIDE ( r_lld_core_reset = 0x40048a9c );');
+          Add('PROVIDE ( r_lld_crypt_isr = 0x4004a324 );');
+          Add('PROVIDE ( r_lld_evt_adv_create = 0x400481f4 );');
+          Add('PROVIDE ( r_lld_evt_canceled = 0x400485c8 );');
+          Add('PROVIDE ( r_lld_evt_channel_next = 0x40046aac );');
+          Add('PROVIDE ( r_lld_evt_deffered_elt_handler = 0x400482bc );');
+          Add('PROVIDE ( r_lld_evt_delete_elt_handler = 0x40046974 );');
+          Add('PROVIDE ( r_lld_evt_delete_elt_push = 0x40046a3c );');
+          Add('PROVIDE ( r_lld_evt_drift_compute = 0x40047670 );');
+          Add('PROVIDE ( r_lld_evt_elt_delete = 0x40047538 );');
+          Add('PROVIDE ( r_lld_evt_elt_insert = 0x400474c8 );');
+          Add('PROVIDE ( r_lld_evt_end = 0x400483e8 );');
+          Add('PROVIDE ( r_lld_evt_end_isr = 0x4004862c );');
+          Add('PROVIDE ( r_lld_evt_init = 0x40046b3c );');
+          Add('PROVIDE ( r_lld_evt_init_evt = 0x40046cd0 );');
+          Add('PROVIDE ( r_lld_evt_move_to_master = 0x40047ba0 );');
+          Add('PROVIDE ( r_lld_evt_move_to_slave = 0x40047e18 );');
+          Add('PROVIDE ( r_lld_evt_prevent_stop = 0x40047adc );');
+          Add('PROVIDE ( r_lld_evt_restart = 0x40046d50 );');
+          Add('PROVIDE ( r_lld_evt_rx = 0x40048578 );');
+          Add('PROVIDE ( r_lld_evt_rx_isr = 0x40048678 );');
+          Add('PROVIDE ( r_lld_evt_scan_create = 0x40047ae8 );');
+          Add('PROVIDE ( r_lld_evt_schedule = 0x40047908 );');
+          Add('PROVIDE ( r_lld_evt_schedule_next = 0x400477dc );');
+          Add('PROVIDE ( r_lld_evt_schedule_next_instant = 0x400476a8 );');
+          Add('PROVIDE ( r_lld_evt_slave_update = 0x40048138 );');
+          Add('PROVIDE ( r_lld_evt_update_create = 0x40047cd8 );');
+          Add('PROVIDE ( r_lld_get_mode = 0x40049ff8 );');
+          Add('PROVIDE ( r_lld_init = 0x4004873c );');
+          Add('PROVIDE ( r_lld_move_to_master = 0x400499e0 );');
+          Add('PROVIDE ( r_lld_move_to_slave = 0x4004a024 );');
+          Add('PROVIDE ( r_lld_pdu_adv_pack = 0x4004b488 );');
+          Add('PROVIDE ( r_lld_pdu_check = 0x4004ac34 );');
+          Add('PROVIDE ( r_lld_pdu_data_send = 0x4004b018 );');
+          Add('PROVIDE ( r_lld_pdu_data_tx_push = 0x4004aecc );');
+          Add('PROVIDE ( r_lld_pdu_rx_handler = 0x4004b4d4 );');
+          Add('PROVIDE ( r_lld_pdu_send_packet = 0x4004b774 );');
+          Add('PROVIDE ( r_lld_pdu_tx_flush = 0x4004b414 );');
+          Add('PROVIDE ( r_lld_pdu_tx_loop = 0x4004ae40 );');
+          Add('PROVIDE ( r_lld_pdu_tx_prog = 0x4004b120 );');
+          Add('PROVIDE ( r_lld_pdu_tx_push = 0x4004b080 );');
+          Add('PROVIDE ( r_lld_ral_renew_req = 0x4004a73c );');
+          Add('PROVIDE ( r_lld_scan_start = 0x40048ee0 );');
+          Add('PROVIDE ( r_lld_scan_stop = 0x40049190 );');
+          Add('PROVIDE ( r_lld_test_mode_rx = 0x4004a540 );');
+          Add('PROVIDE ( r_lld_test_mode_tx = 0x4004a350 );');
+          Add('PROVIDE ( r_lld_test_stop = 0x4004a710 );');
+          Add('PROVIDE ( r_lld_util_anchor_point_move = 0x4004bacc );');
+          Add('PROVIDE ( r_lld_util_compute_ce_max = 0x4004bc0c );');
+          Add('PROVIDE ( r_lld_util_connection_param_set = 0x4004ba40 );');
+          Add('PROVIDE ( r_lld_util_dle_set_cs_fields = 0x4004ba90 );');
+          Add('PROVIDE ( r_lld_util_eff_tx_time_set = 0x4004bd88 );');
+          Add('PROVIDE ( r_lld_util_elt_programmed = 0x4004bce0 );');
+          Add('PROVIDE ( r_lld_util_flush_list = 0x4004bbd8 );');
+          Add('PROVIDE ( r_lld_util_freq2chnl = 0x4004b9e4 );');
+          Add('PROVIDE ( r_lld_util_get_bd_address = 0x4004b8ac );');
+          Add('PROVIDE ( r_lld_util_get_local_offset = 0x4004ba10 );');
+          Add('PROVIDE ( r_lld_util_get_peer_offset = 0x4004ba24 );');
+          Add('PROVIDE ( r_lld_util_get_tx_pkt_cnt = 0x4004bd80 );');
+          Add('PROVIDE ( r_lld_util_instant_get = 0x4004b890 );');
+          Add('PROVIDE ( r_lld_util_instant_ongoing = 0x4004bbfc );');
+          Add('PROVIDE ( r_lld_util_priority_set = 0x4004bd10 );');
+          Add('PROVIDE ( r_lld_util_priority_update = 0x4004bd78 );');
+          Add('PROVIDE ( r_lld_util_ral_force_rpa_renew = 0x4004b980 );');
+          Add('PROVIDE ( r_lld_util_set_bd_address = 0x4004b8f8 );');
+          Add('PROVIDE ( r_lld_wlcoex_set = 0x4004bd98 );');
+          Add('PROVIDE ( r_llm_ble_ready = 0x4004cc34 );');
+          Add('PROVIDE ( r_llm_common_cmd_complete_send = 0x4004d288 );');
+          Add('PROVIDE ( r_llm_common_cmd_status_send = 0x4004d2b4 );');
+          Add('PROVIDE ( r_llm_con_req_ind = 0x4004cc54 );');
+          Add('PROVIDE ( r_llm_con_req_tx_cfm = 0x4004d158 );');
+          Add('PROVIDE ( r_llm_create_con = 0x4004de78 );');
+          Add('PROVIDE ( r_llm_encryption_done = 0x4004dff8 );');
+          Add('PROVIDE ( r_llm_encryption_start = 0x4004e128 );');
+          Add('PROVIDE ( r_llm_end_evt_defer = 0x4004eb6c );');
+          Add('PROVIDE ( r_llm_init = 0x4004c9f8 );');
+          Add('PROVIDE ( r_llm_le_adv_report_ind = 0x4004cdf4 );');
+          Add('PROVIDE ( r_llm_pdu_defer = 0x4004ec48 );');
+          Add('PROVIDE ( r_llm_ral_clear = 0x4004e1fc );');
+          Add('PROVIDE ( r_llm_ral_dev_add = 0x4004e23c );');
+          Add('PROVIDE ( r_llm_ral_dev_rm = 0x4004e3bc );');
+          Add('PROVIDE ( r_llm_ral_get_rpa = 0x4004e400 );');
+          Add('PROVIDE ( r_llm_ral_set_timeout = 0x4004e4a0 );');
+          Add('PROVIDE ( r_llm_ral_update = 0x4004e4f8 );');
+          Add('PROVIDE ( r_llm_set_adv_data = 0x4004d960 );');
+          Add('PROVIDE ( r_llm_set_adv_en = 0x4004d7ec );');
+          Add('PROVIDE ( r_llm_set_adv_param = 0x4004d5f4 );');
+          Add('PROVIDE ( r_llm_set_scan_en = 0x4004db64 );');
+          Add('PROVIDE ( r_llm_set_scan_param = 0x4004dac8 );');
+          Add('PROVIDE ( r_llm_set_scan_rsp_data = 0x4004da14 );');
+          Add('PROVIDE ( r_llm_test_mode_start_rx = 0x4004d534 );');
+          Add('PROVIDE ( r_llm_test_mode_start_tx = 0x4004d2fc );');
+          Add('PROVIDE ( r_llm_util_adv_data_update = 0x4004e8fc );');
+          Add('PROVIDE ( r_llm_util_apply_bd_addr = 0x4004e868 );');
+          Add('PROVIDE ( r_llm_util_bd_addr_in_ral = 0x4004eb08 );');
+          Add('PROVIDE ( r_llm_util_bd_addr_in_wl = 0x4004e788 );');
+          Add('PROVIDE ( r_llm_util_bd_addr_wl_position = 0x4004e720 );');
+          Add('PROVIDE ( r_llm_util_bl_add = 0x4004e9ac );');
+          Add('PROVIDE ( r_llm_util_bl_check = 0x4004e930 );');
+          Add('PROVIDE ( r_llm_util_bl_rem = 0x4004ea70 );');
+          Add('PROVIDE ( r_llm_util_check_address_validity = 0x4004e7e4 );');
+          Add('PROVIDE ( r_llm_util_check_evt_mask = 0x4004e8b0 );');
+          Add('PROVIDE ( r_llm_util_check_map_validity = 0x4004e800 );');
+          Add('PROVIDE ( r_llm_util_get_channel_map = 0x4004e8d4 );');
+          Add('PROVIDE ( r_llm_util_get_supp_features = 0x4004e8e8 );');
+          Add('PROVIDE ( r_llm_util_set_public_addr = 0x4004e89c );');
+          Add('PROVIDE ( r_llm_wl_clr = 0x4004dc54 );');
+          Add('PROVIDE ( r_llm_wl_dev_add = 0x4004dcc0 );');
+          Add('PROVIDE ( r_llm_wl_dev_add_hdl = 0x4004dd38 );');
+          Add('PROVIDE ( r_llm_wl_dev_rem = 0x4004dcfc );');
+          Add('PROVIDE ( r_llm_wl_dev_rem_hdl = 0x4004dde0 );');
+          Add('PROVIDE ( r_lm_acl_disc = 0x4004f148 );');
+          Add('PROVIDE ( r_LM_AddSniff = 0x40022d20 );');
+          Add('PROVIDE ( r_lm_add_sync = 0x40051358 );');
+          Add('PROVIDE ( r_lm_afh_activate_timer = 0x4004f444 );');
+          Add('PROVIDE ( r_lm_afh_ch_ass_en_get = 0x4004f3f8 );');
+          Add('PROVIDE ( r_lm_afh_host_ch_class_get = 0x4004f410 );');
+          Add('PROVIDE ( r_lm_afh_master_ch_map_get = 0x4004f43c );');
+          Add('PROVIDE ( r_lm_afh_peer_ch_class_set = 0x4004f418 );');
+          Add('PROVIDE ( r_lm_check_active_sync = 0x40051334 );');
+          Add('PROVIDE ( r_LM_CheckEdrFeatureRequest = 0x4002f90c );');
+          Add('PROVIDE ( r_LM_CheckSwitchInstant = 0x4002f8c0 );');
+          Add('PROVIDE ( r_lm_check_sync_hl_rsp = 0x4005169c );');
+          Add('PROVIDE ( r_lm_clk_adj_ack_pending_clear = 0x4004f514 );');
+          Add('PROVIDE ( r_lm_clk_adj_instant_pending_set = 0x4004f4d8 );');
+          Add('PROVIDE ( r_LM_ComputePacketType = 0x4002f554 );');
+          Add('PROVIDE ( r_LM_ComputeSniffSubRate = 0x400233ac );');
+          Add('PROVIDE ( r_lm_debug_key_compare_192 = 0x4004f3a8 );');
+          Add('PROVIDE ( r_lm_debug_key_compare_256 = 0x4004f3d0 );');
+          Add('PROVIDE ( r_lm_dhkey_calc_init = 0x40013234 );');
+          Add('PROVIDE ( r_lm_dhkey_compare = 0x400132d8 );');
+          Add('PROVIDE ( r_lm_dut_mode_en_get = 0x4004f3ec );');
+          Add('PROVIDE ( r_LM_ExtractMaxEncKeySize = 0x4001aca4 );');
+          Add('PROVIDE ( r_lm_f1 = 0x40012bb8 );');
+          Add('PROVIDE ( r_lm_f2 = 0x40012cfc );');
+          Add('PROVIDE ( r_lm_f3 = 0x40013050 );');
+          Add('PROVIDE ( r_lm_g = 0x40012f90 );');
+          Add('PROVIDE ( r_LM_GetAFHSwitchInstant = 0x4002f86c );');
+          Add('PROVIDE ( r_lm_get_auth_en = 0x4004f1ac );');
+          Add('PROVIDE ( r_lm_get_common_pkt_types = 0x4002fa1c );');
+          Add('PROVIDE ( r_LM_GetConnectionAcceptTimeout = 0x4004f1f4 );');
+          Add('PROVIDE ( r_LM_GetFeature = 0x4002f924 );');
+          Add('PROVIDE ( r_LM_GetLinkTimeout = 0x400233ec );');
+          Add('PROVIDE ( r_LM_GetLocalNameSeg = 0x4004f200 );');
+          Add('PROVIDE ( r_lm_get_loopback_mode = 0x4004f248 );');
+          Add('PROVIDE ( r_LM_GetMasterEncKeySize = 0x4001b29c );');
+          Add('PROVIDE ( r_LM_GetMasterEncRand = 0x4001b288 );');
+          Add('PROVIDE ( r_LM_GetMasterKey = 0x4001b260 );');
+          Add('PROVIDE ( r_LM_GetMasterKeyRand = 0x4001b274 );');
+          Add('PROVIDE ( r_lm_get_min_sync_intv = 0x400517a8 );');
+          Add('PROVIDE ( r_lm_get_nb_acl = 0x4004ef9c );');
+          Add('PROVIDE ( r_lm_get_nb_sync_link = 0x4005179c );');
+          Add('PROVIDE ( r_lm_get_nonce = 0x400131c4 );');
+          Add('PROVIDE ( r_lm_get_oob_local_commit = 0x4004f374 );');
+          Add('PROVIDE ( r_lm_get_oob_local_data_192 = 0x4004f2d4 );');
+          Add('PROVIDE ( r_lm_get_oob_local_data_256 = 0x4004f318 );');
+          Add('PROVIDE ( r_LM_GetPINType = 0x4004f1e8 );');
+          Add('PROVIDE ( r_lm_get_priv_key_192 = 0x4004f278 );');
+          Add('PROVIDE ( r_lm_get_priv_key_256 = 0x4004f2b8 );');
+          Add('PROVIDE ( r_lm_get_pub_key_192 = 0x4004f258 );');
+          Add('PROVIDE ( r_lm_get_pub_key_256 = 0x4004f298 );');
+          Add('PROVIDE ( r_LM_GetQoSParam = 0x4002f6e0 );');
+          Add('PROVIDE ( r_lm_get_sec_con_host_supp = 0x4004f1d4 );');
+          Add('PROVIDE ( r_LM_GetSniffSubratingParam = 0x4002325c );');
+          Add('PROVIDE ( r_lm_get_sp_en = 0x4004f1c0 );');
+          Add('PROVIDE ( r_LM_GetSwitchInstant = 0x4002f7f8 );');
+          Add('PROVIDE ( r_lm_get_synchdl = 0x4005175c );');
+          Add('PROVIDE ( r_lm_get_sync_param = 0x400503b4 );');
+          Add('PROVIDE ( r_lm_init = 0x4004ed34 );');
+          Add('PROVIDE ( r_lm_init_sync = 0x400512d8 );');
+          Add('PROVIDE ( r_lm_is_acl_con = 0x4004f47c );');
+          Add('PROVIDE ( r_lm_is_acl_con_role = 0x4004f49c );');
+          Add('PROVIDE ( r_lm_is_clk_adj_ack_pending = 0x4004f4e8 );');
+          Add('PROVIDE ( r_lm_is_clk_adj_instant_pending = 0x4004f4c8 );');
+          Add('PROVIDE ( r_lm_local_ext_fr_configured = 0x4004f540 );');
+          Add('PROVIDE ( r_lm_look_for_stored_link_key = 0x4002f948 );');
+          Add('PROVIDE ( r_lm_look_for_sync = 0x40051774 );');
+          Add('PROVIDE ( r_lm_lt_addr_alloc = 0x4004ef1c );');
+          Add('PROVIDE ( r_lm_lt_addr_free = 0x4004ef74 );');
+          Add('PROVIDE ( r_lm_lt_addr_reserve = 0x4004ef48 );');
+          Add('PROVIDE ( r_LM_MakeCof = 0x4002f84c );');
+          Add('PROVIDE ( r_LM_MakeRandVec = 0x400112d8 );');
+          Add('PROVIDE ( r_lm_master_clk_adj_req_handler = 0x40054180 );');
+          Add('PROVIDE ( r_LM_MaxSlot = 0x4002f694 );');
+          Add('PROVIDE ( r_lm_modif_sync = 0x40051578 );');
+          Add('PROVIDE ( r_lm_n_is_zero = 0x40012170 );');
+          Add('PROVIDE ( r_lm_num_clk_adj_ack_pending_set = 0x4004f500 );');
+          Add('PROVIDE ( r_lm_oob_f1 = 0x40012e54 );');
+          Add('PROVIDE ( r_lm_pca_sscan_link_get = 0x4004f560 );');
+          Add('PROVIDE ( r_lm_pca_sscan_link_set = 0x4004f550 );');
+          Add('PROVIDE ( nvds_null_read = 0x400542a0 );');
+          Add('PROVIDE ( nvds_null_write = 0x400542a8 );');
+          Add('PROVIDE ( nvds_null_erase = 0x400542b0 );');
+          Add('PROVIDE ( nvds_read = 0x400542c4 );');
+          Add('PROVIDE ( nvds_write = 0x400542fc );');
+          Add('PROVIDE ( nvds_erase = 0x40054334 );');
+          Add('PROVIDE ( nvds_init_memory = 0x40054358 );');
+          Add('PROVIDE ( r_lmp_pack = 0x4001135c );');
+          Add('PROVIDE ( r_lmp_unpack = 0x4001149c );');
+          Add('PROVIDE ( r_lm_read_features = 0x4004f0d8 );');
+          Add('PROVIDE ( r_LM_RemoveSniff = 0x40023124 );');
+          Add('PROVIDE ( r_LM_RemoveSniffSubrating = 0x400233c4 );');
+          Add('PROVIDE ( r_lm_remove_sync = 0x400517c8 );');
+          Add('PROVIDE ( r_lm_reset_sync = 0x40051304 );');
+          Add('PROVIDE ( r_lm_role_switch_finished = 0x4004f028 );');
+          Add('PROVIDE ( r_lm_role_switch_start = 0x4004efe0 );');
+          Add('PROVIDE ( r_lm_sco_nego_end = 0x40051828 );');
+          Add('PROVIDE ( r_LM_SniffSubrateNegoRequired = 0x40023334 );');
+          Add('PROVIDE ( r_LM_SniffSubratingHlReq = 0x40023154 );');
+          Add('PROVIDE ( r_LM_SniffSubratingPeerReq = 0x400231dc );');
+          Add('PROVIDE ( r_lm_sp_debug_mode_get = 0x4004f398 );');
+          Add('PROVIDE ( r_lm_sp_n192_convert_wnaf = 0x400123c0 );');
+          Add('PROVIDE ( r_lm_sp_n_one = 0x400123a4 );');
+          Add('PROVIDE ( r_lm_sp_p192_add = 0x40012828 );');
+          Add('PROVIDE ( r_lm_sp_p192_dbl = 0x4001268c );');
+          Add('PROVIDE ( r_lm_sp_p192_invert = 0x40012b6c );');
+          Add('PROVIDE ( r_lm_sp_p192_point_jacobian_to_affine = 0x40012468 );');
+          Add('PROVIDE ( r_lm_sp_p192_points_jacobian_to_affine = 0x400124e4 );');
+          Add('PROVIDE ( r_lm_sp_p192_point_to_inf = 0x40012458 );');
+          Add('PROVIDE ( r_lm_sp_pre_compute_points = 0x40012640 );');
+          Add('PROVIDE ( r_lm_sp_sha256_calculate = 0x400121a0 );');
+          Add('PROVIDE ( r_LM_SuppressAclPacket = 0x4002f658 );');
+          Add('PROVIDE ( r_lm_sync_flow_ctrl_en_get = 0x4004f404 );');
+          Add('PROVIDE ( r_LM_UpdateAclEdrPacketType = 0x4002f5d8 );');
+          Add('PROVIDE ( r_LM_UpdateAclPacketType = 0x4002f584 );');
+          Add('PROVIDE ( r_modules_funcs = 0x3ffafd6c );');
+          Add('PROVIDE ( r_modules_funcs_p = 0x3ffafd68 );');
+          Add('PROVIDE ( r_nvds_del = 0x400544c4 );');
+          Add('PROVIDE ( r_nvds_get = 0x40054488 );');
+          Add('PROVIDE ( r_nvds_init = 0x40054410 );');
+          Add('PROVIDE ( r_nvds_lock = 0x400544fc );');
+          Add('PROVIDE ( r_nvds_put = 0x40054534 );');
+          Add('PROVIDE ( rom_abs_temp = 0x400054f0 );');
+          Add('PROVIDE ( rom_bb_bss_bw_40_en = 0x4000401c );');
+          Add('PROVIDE ( rom_bb_bss_cbw40_dig = 0x40003bac );');
+          Add('PROVIDE ( rom_bb_rx_ht20_cen_bcov_en = 0x40003734 );');
+          Add('PROVIDE ( rom_bb_tx_ht20_cen = 0x40003760 );');
+          Add('PROVIDE ( rom_bb_wdg_test_en = 0x40003b70 );');
+          Add('PROVIDE ( rom_cbw2040_cfg = 0x400040b0 );');
+          Add('PROVIDE ( rom_check_noise_floor = 0x40003c78 );');
+          Add('PROVIDE ( rom_chip_i2c_readReg = 0x40004110 );');
+          Add('PROVIDE ( rom_chip_i2c_writeReg = 0x40004168 );');
+          Add('PROVIDE ( rom_chip_v7_bt_init = 0x40004d8c );');
+          Add('PROVIDE ( rom_chip_v7_rx_init = 0x40004cec );');
+          Add('PROVIDE ( rom_chip_v7_rx_rifs_en = 0x40003d90 );');
+          Add('PROVIDE ( rom_chip_v7_tx_init = 0x40004d18 );');
+          Add('PROVIDE ( rom_clk_force_on_vit = 0x40003710 );');
+          Add('PROVIDE ( rom_correct_rf_ana_gain = 0x400062a8 );');
+          Add('PROVIDE ( rom_dc_iq_est = 0x400055c8 );');
+          Add('PROVIDE ( rom_disable_agc = 0x40002fa4 );');
+          Add('PROVIDE ( rom_enable_agc = 0x40002fcc );');
+          Add('PROVIDE ( rom_en_pwdet = 0x4000506c );');
+          Add('PROVIDE ( rom_gen_rx_gain_table = 0x40003e3c );');
+          Add('PROVIDE ( rom_get_data_sat = 0x4000312c );');
+          Add('PROVIDE ( rom_get_fm_sar_dout = 0x40005204 );');
+          Add('PROVIDE ( rom_get_power_db = 0x40005fc8 );');
+          Add('PROVIDE ( rom_get_pwctrl_correct = 0x400065d4 );');
+          Add('PROVIDE ( rom_get_rfcal_rxiq_data = 0x40005bbc );');
+          Add('PROVIDE ( rom_get_rf_gain_qdb = 0x40006290 );');
+          Add('PROVIDE ( rom_get_sar_dout = 0x40006564 );');
+          Add('PROVIDE ( rom_i2c_readReg = 0x40004148 );');
+          Add('PROVIDE ( rom_i2c_readReg_Mask = 0x400041c0 );');
+          Add('PROVIDE ( rom_i2c_writeReg = 0x400041a4 );');
+          Add('PROVIDE ( rom_i2c_writeReg_Mask = 0x400041fc );');
+          Add('PROVIDE ( rom_index_to_txbbgain = 0x40004df8 );');
+          Add('PROVIDE ( rom_iq_est_disable = 0x40005590 );');
+          Add('PROVIDE ( rom_iq_est_enable = 0x40005514 );');
+          Add('PROVIDE ( rom_linear_to_db = 0x40005f64 );');
+          Add('PROVIDE ( rom_loopback_mode_en = 0x400030f8 );');
+          Add('PROVIDE ( rom_meas_tone_pwr_db = 0x40006004 );');
+          Add('PROVIDE ( rom_mhz2ieee = 0x4000404c );');
+          Add('PROVIDE ( rom_noise_floor_auto_set = 0x40003bdc );');
+          Add('PROVIDE ( rom_pbus_debugmode = 0x40004458 );');
+          Add('PROVIDE ( rom_pbus_force_mode = 0x40004270 );');
+          Add('PROVIDE ( rom_pbus_force_test = 0x400043c0 );');
+          Add('PROVIDE ( rom_pbus_rd = 0x40004414 );');
+          Add('PROVIDE ( rom_pbus_rd_addr = 0x40004334 );');
+          Add('PROVIDE ( rom_pbus_rd_shift = 0x40004374 );');
+          Add('PROVIDE ( rom_pbus_rx_dco_cal = 0x40005620 );');
+          Add('PROVIDE ( rom_pbus_set_dco = 0x40004638 );');
+          Add('PROVIDE ( rom_pbus_set_rxgain = 0x40004480 );');
+          Add('PROVIDE ( rom_pbus_workmode = 0x4000446c );');
+          Add('PROVIDE ( rom_pbus_xpd_rx_off = 0x40004508 );');
+          Add('PROVIDE ( rom_pbus_xpd_rx_on = 0x4000453c );');
+          Add('PROVIDE ( rom_pbus_xpd_tx_off = 0x40004590 );');
+          Add('PROVIDE ( rom_pbus_xpd_tx_on = 0x400045e0 );');
+          Add('PROVIDE ( rom_phy_disable_agc = 0x40002f6c );');
+          Add('PROVIDE ( rom_phy_disable_cca = 0x40003000 );');
+          Add('PROVIDE ( rom_phy_enable_agc = 0x40002f88 );');
+          Add('PROVIDE ( rom_phy_enable_cca = 0x4000302c );');
+          Add('PROVIDE ( rom_phy_freq_correct = 0x40004b44 );');
+          Add('PROVIDE ( rom_phyFuns = 0x3ffae0c0 );');
+          Add('PROVIDE ( rom_phy_get_noisefloor = 0x40003c2c );');
+          Add('PROVIDE ( rom_phy_get_vdd33 = 0x4000642c );');
+          Add('PROVIDE ( rom_pow_usr = 0x40003044 );');
+          Add('PROVIDE ( rom_read_sar_dout = 0x400051c0 );');
+          Add('PROVIDE ( rom_restart_cal = 0x400046e0 );');
+          Add('PROVIDE ( rom_rfcal_pwrctrl = 0x40006058 );');
+          Add('PROVIDE ( rom_rfcal_rxiq = 0x40005b4c );');
+          Add('PROVIDE ( rom_rfcal_txcap = 0x40005dec );');
+          Add('PROVIDE ( rom_rfpll_reset = 0x40004680 );');
+          Add('PROVIDE ( rom_rfpll_set_freq = 0x400047f8 );');
+          Add('PROVIDE ( rom_rtc_mem_backup = 0x40003db4 );');
+          Add('PROVIDE ( rom_rtc_mem_recovery = 0x40003df4 );');
+          Add('PROVIDE ( rom_rx_gain_force = 0x4000351c );');
+          Add('PROVIDE ( rom_rxiq_cover_mg_mp = 0x40005a68 );');
+          Add('PROVIDE ( rom_rxiq_get_mis = 0x400058e4 );');
+          Add('PROVIDE ( rom_rxiq_set_reg = 0x40005a00 );');
+          Add('PROVIDE ( rom_set_cal_rxdc = 0x400030b8 );');
+          Add('PROVIDE ( rom_set_chan_cal_interp = 0x40005ce0 );');
+          Add('PROVIDE ( rom_set_channel_freq = 0x40004880 );');
+          Add('PROVIDE ( rom_set_loopback_gain = 0x40003060 );');
+          Add('PROVIDE ( rom_set_noise_floor = 0x40003d48 );');
+          Add('PROVIDE ( rom_set_pbus_mem = 0x400031a4 );');
+          Add('PROVIDE ( rom_set_rf_freq_offset = 0x40004ca8 );');
+          Add('PROVIDE ( rom_set_rxclk_en = 0x40003594 );');
+          Add('PROVIDE ( rom_set_txcap_reg = 0x40005d50 );');
+          Add('PROVIDE ( rom_set_txclk_en = 0x40003564 );');
+          Add('PROVIDE ( rom_spur_coef_cfg = 0x40003ac8 );');
+          Add('PROVIDE ( rom_spur_reg_write_one_tone = 0x400037f0 );');
+          Add('PROVIDE ( rom_start_tx_tone = 0x400036b4 );');
+          Add('PROVIDE ( rom_start_tx_tone_step = 0x400035d0 );');
+          Add('PROVIDE ( rom_stop_tx_tone = 0x40003f98 );');
+          Add('PROVIDE ( _rom_store = 0x4000d66c );');
+          Add('PROVIDE ( _rom_store_table = 0x4000d4f8 );');
+          Add('PROVIDE ( rom_target_power_add_backoff = 0x40006268 );');
+          Add('PROVIDE ( rom_tx_atten_set_interp = 0x400061cc );');
+          Add('PROVIDE ( rom_txbbgain_to_index = 0x40004dc0 );');
+          Add('PROVIDE ( rom_txcal_work_mode = 0x4000510c );');
+          Add('PROVIDE ( rom_txdc_cal_init = 0x40004e10 );');
+          Add('PROVIDE ( rom_txdc_cal_v70 = 0x40004ea4 );');
+          Add('PROVIDE ( rom_txiq_cover = 0x4000538c );');
+          Add('PROVIDE ( rom_txiq_get_mis_pwr = 0x400052dc );');
+          Add('PROVIDE ( rom_txiq_set_reg = 0x40005154 );');
+          Add('PROVIDE ( rom_tx_pwctrl_bg_init = 0x4000662c );');
+          Add('PROVIDE ( rom_txtone_linear_pwr = 0x40005290 );');
+          Add('PROVIDE ( rom_wait_rfpll_cal_end = 0x400047a8 );');
+          Add('PROVIDE ( rom_write_gain_mem = 0x4000348c );');
+          Add('PROVIDE ( rom_write_rfpll_sdm = 0x40004740 );');
+          Add('PROVIDE ( roundup2 = 0x4000ab7c );');
+          Add('PROVIDE ( r_plf_funcs_p = 0x3ffb8360 );');
+          Add('PROVIDE ( r_rf_rw_bt_init = 0x40054868 );');
+          Add('PROVIDE ( r_rf_rw_init = 0x40054b0c );');
+          Add('PROVIDE ( r_rf_rw_le_init = 0x400549d0 );');
+          Add('PROVIDE ( r_rwble_activity_ongoing_check = 0x40054d8c );');
+          Add('PROVIDE ( r_rwble_init = 0x40054bf4 );');
+          Add('PROVIDE ( r_rwble_isr = 0x40054e08 );');
+          Add('PROVIDE ( r_rwble_reset = 0x40054ce8 );');
+          Add('PROVIDE ( r_rwble_sleep_check = 0x40054d78 );');
+          Add('PROVIDE ( r_rwble_version = 0x40054dac );');
+          Add('PROVIDE ( r_rwbt_init = 0x40055160 );');
+          Add('PROVIDE ( r_rwbt_isr = 0x40055248 );');
+          Add('PROVIDE ( r_rwbt_reset = 0x400551bc );');
+          Add('PROVIDE ( r_rwbt_sleep_check = 0x4005577c );');
+          Add('PROVIDE ( r_rwbt_sleep_enter = 0x400557a4 );');
+          Add('PROVIDE ( r_rwbt_sleep_wakeup = 0x400557fc );');
+          Add('PROVIDE ( r_rwbt_sleep_wakeup_end = 0x400558cc );');
+          Add('PROVIDE ( r_rwbt_version = 0x4005520c );');
+          Add('PROVIDE ( r_rwip_assert_err = 0x40055f88 );');
+          Add('PROVIDE ( r_rwip_check_wakeup_boundary = 0x400558fc );');
+          Add('PROVIDE ( r_rwip_ext_wakeup_enable = 0x40055f3c );');
+          Add('PROVIDE ( r_rwip_init = 0x4005595c );');
+          Add('PROVIDE ( r_rwip_pca_clock_dragging_only = 0x40055f48 );');
+          Add('PROVIDE ( r_rwip_prevent_sleep_clear = 0x40055ec8 );');
+          Add('PROVIDE ( r_rwip_prevent_sleep_set = 0x40055e64 );');
+          Add('PROVIDE ( r_rwip_reset = 0x40055ab8 );');
+          Add('PROVIDE ( r_rwip_schedule = 0x40055b38 );');
+          Add('PROVIDE ( r_rwip_sleep = 0x40055b5c );');
+          Add('PROVIDE ( r_rwip_sleep_enable = 0x40055f30 );');
+          Add('PROVIDE ( r_rwip_version = 0x40055b20 );');
+          Add('PROVIDE ( r_rwip_wakeup = 0x40055dc4 );');
+          Add('PROVIDE ( r_rwip_wakeup_delay_set = 0x40055e4c );');
+          Add('PROVIDE ( r_rwip_wakeup_end = 0x40055e18 );');
+          Add('PROVIDE ( r_rwip_wlcoex_set = 0x40055f60 );');
+          Add('PROVIDE ( r_SHA_256 = 0x40013a90 );');
+          Add('PROVIDE ( rwip_coex_cfg = 0x3ff9914c );');
+          Add('PROVIDE ( rwip_priority = 0x3ff99159 );');
+          Add('PROVIDE ( rwip_rf = 0x3ffbdb28 );');
+          Add('PROVIDE ( rwip_rf_p_get = 0x400558f4 );');
+          Add('PROVIDE ( r_XorKey = 0x400112c0 );');
+          Add('PROVIDE ( sha_blk_bits = 0x3ff99290 );');
+          Add('PROVIDE ( sha_blk_bits_bytes = 0x3ff99288 );');
+          Add('PROVIDE ( sha_blk_hash_bytes = 0x3ff9928c );');
+          Add('PROVIDE ( sig_matrix = 0x3ffae293 );');
+          Add('PROVIDE ( sip_after_tx_complete = 0x4000b358 );');
+          Add('PROVIDE ( sip_alloc_to_host_evt = 0x4000ab9c );');
+          Add('PROVIDE ( sip_get_ptr = 0x4000b34c );');
+          Add('PROVIDE ( sip_get_state = 0x4000ae2c );');
+          Add('PROVIDE ( sip_init_attach = 0x4000ae58 );');
+          Add('PROVIDE ( sip_install_rx_ctrl_cb = 0x4000ae10 );');
+          Add('PROVIDE ( sip_install_rx_data_cb = 0x4000ae20 );');
+          Add('PROVIDE ( sip_is_active = 0x4000b3c0 );');
+          Add('PROVIDE ( sip_post_init = 0x4000aed8 );');
+          Add('PROVIDE ( sip_reclaim_from_host_cmd = 0x4000adbc );');
+          Add('PROVIDE ( sip_reclaim_tx_data_pkt = 0x4000ad5c );');
+          Add('PROVIDE ( sip_send = 0x4000af54 );');
+          Add('PROVIDE ( sip_to_host_chain_append = 0x4000aef8 );');
+          Add('PROVIDE ( sip_to_host_evt_send_done = 0x4000ac04 );');
+          Add('PROVIDE ( slc_add_credits = 0x4000baf4 );');
+          Add('PROVIDE ( slc_enable = 0x4000b64c );');
+          Add('PROVIDE ( slc_from_host_chain_fetch = 0x4000b7e8 );');
+          Add('PROVIDE ( slc_from_host_chain_recycle = 0x4000bb10 );');
+          Add('PROVIDE ( slc_has_pkt_to_host = 0x4000b5fc );');
+          Add('PROVIDE ( slc_init_attach = 0x4000b918 );');
+          Add('PROVIDE ( slc_init_credit = 0x4000badc );');
+          Add('PROVIDE ( slc_reattach = 0x4000b62c );');
+          Add('PROVIDE ( slc_send_to_host_chain = 0x4000b6a0 );');
+          Add('PROVIDE ( slc_set_host_io_max_window = 0x4000b89c );');
+          Add('PROVIDE ( slc_to_host_chain_recycle = 0x4000b758 );');
+          Add('PROVIDE ( specialModP256 = 0x4001600c );');
+          Add('PROVIDE ( __stack = 0x3ffe3f20 );');
+          Add('PROVIDE ( __stack_app = 0x3ffe7e30 );');
+          Add('PROVIDE ( _stack_sentry = 0x3ffe1320 );');
+          Add('PROVIDE ( _stack_sentry_app = 0x3ffe5230 );');
+          Add('PROVIDE ( _start = 0x40000704 );');
+          Add('PROVIDE ( start_tb_console = 0x4005a980 );');
+          Add('PROVIDE ( _stat_r = 0x4000bcb4 );');
+          Add('PROVIDE ( _stext = 0x40000560 );');
+          Add('PROVIDE ( SubtractBigHex256 = 0x40015bcc );');
+          Add('PROVIDE ( SubtractBigHexMod256 = 0x40015e8c );');
+          Add('PROVIDE ( SubtractBigHexUint32_256 = 0x40015f8c );');
+          Add('PROVIDE ( SubtractFromSelfBigHex256 = 0x40015c20 );');
+          Add('PROVIDE ( SubtractFromSelfBigHexSign256 = 0x40015dc8 );');
+          Add('PROVIDE ( sw_to_hw = 0x3ffb8d40 );');
+          Add('PROVIDE ( syscall_table_ptr_app = 0x3ffae020 );');
+          Add('PROVIDE ( syscall_table_ptr_pro = 0x3ffae024 );');
+          Add('PROVIDE ( tdefl_compress = 0x400600bc );');
+          Add('PROVIDE ( tdefl_compress_buffer = 0x400607f4 );');
+          Add('PROVIDE ( tdefl_compress_mem_to_mem = 0x40060900 );');
+          Add('PROVIDE ( tdefl_compress_mem_to_output = 0x400608e0 );');
+          Add('PROVIDE ( tdefl_get_adler32 = 0x400608d8 );');
+          Add('PROVIDE ( tdefl_get_prev_return_status = 0x400608d0 );');
+          Add('PROVIDE ( tdefl_init = 0x40060810 );');
+          Add('PROVIDE ( tdefl_write_image_to_png_file_in_memory = 0x4006091c );');
+          Add('PROVIDE ( tdefl_write_image_to_png_file_in_memory_ex = 0x40060910 );');
+          Add('PROVIDE ( tinfl_decompress = 0x4005ef30 );');
+          Add('PROVIDE ( tinfl_decompress_mem_to_callback = 0x40060090 );');
+          Add('PROVIDE ( tinfl_decompress_mem_to_mem = 0x40060050 );');
+          Add('PROVIDE ( UartDev = 0x3ffe019c );');
+          Add('PROVIDE ( user_code_start = 0x3ffe0400 );');
+          Add('PROVIDE ( veryBigHexP256 = 0x3ff9736c );');
+          Add('PROVIDE ( xthal_bcopy = 0x4000c098 );');
+          Add('PROVIDE ( xthal_copy123 = 0x4000c124 );');
+          Add('PROVIDE ( xthal_get_ccompare = 0x4000c078 );');
+          Add('PROVIDE ( xthal_get_ccount = 0x4000c050 );');
+          Add('PROVIDE ( xthal_get_interrupt = 0x4000c1e4 );');
+          Add('PROVIDE ( xthal_get_intread = 0x4000c1e4 );');
+          Add('PROVIDE ( Xthal_intlevel = 0x3ff9c2b4 );');
+          Add('PROVIDE ( xthal_memcpy = 0x4000c0bc );');
+          Add('PROVIDE ( xthal_set_ccompare = 0x4000c058 );');
+          Add('PROVIDE ( xthal_set_intclear = 0x4000c1ec );');
+          Add('PROVIDE ( _xtos_set_intlevel = 0x4000bfdc );');
+          Add('PROVIDE ( g_ticks_per_us_pro = 0x3ffe01e0 );');
+          Add('PROVIDE ( g_ticks_per_us_app = 0x3ffe40f0 );');
+          Add('PROVIDE ( esp_rom_spiflash_config_param = 0x40063238 );');
+          Add('PROVIDE ( esp_rom_spiflash_read_user_cmd = 0x400621b0 );');
+          Add('PROVIDE ( esp_rom_spiflash_write_encrypted_disable = 0x40062e60 );');
+          Add('PROVIDE ( esp_rom_spiflash_write_encrypted_enable = 0x40062df4 );');
+          Add('PROVIDE ( esp_rom_spiflash_prepare_encrypted_data = 0x40062e1c );');
+          Add('PROVIDE ( esp_rom_spiflash_select_qio_pins = 0x40061ddc );');
+          Add('PROVIDE ( esp_rom_spiflash_attach = 0x40062a6c );');
+          Add('PROVIDE ( esp_rom_spiflash_config_clk = 0x40062bc8 );');
+          Add('PROVIDE ( g_rom_spiflash_chip = 0x3ffae270 );');
+          Add('PROVIDE ( hci_le_rd_rem_used_feats_cmd_handler = 0x400417b4 );');
+          Add('PROVIDE ( llcp_length_req_handler = 0x40043808 );');
+          Add('PROVIDE ( llcp_unknown_rsp_handler = 0x40043ba8 );');
+          Add('PROVIDE ( FilePacketSendDeflatedReqMsgProc = 0x40008b24 );');
+          Add('PROVIDE ( FilePacketSendReqMsgProc = 0x40008860 );');
+          Add('PROVIDE ( FlashDwnLdDeflatedStartMsgProc = 0x40008ad8 );');
+          Add('PROVIDE ( FlashDwnLdParamCfgMsgProc = 0x4000891c );');
+          Add('PROVIDE ( FlashDwnLdStartMsgProc = 0x40008820 );');
+          Add('PROVIDE ( FlashDwnLdStopDeflatedReqMsgProc = 0x40008c18 );');
+          Add('PROVIDE ( FlashDwnLdStopReqMsgProc = 0x400088ec );');
+          Add('PROVIDE ( MemDwnLdStartMsgProc = 0x40008948 );');
+          Add('PROVIDE ( MemDwnLdStopReqMsgProc = 0x400089dc );');
+          Add('PROVIDE ( MemPacketSendReqMsgProc = 0x40008978 );');
+          Add('PROVIDE ( uart_baudrate_detect = 0x40009034 );');
+          Add('PROVIDE ( uart_buff_switch = 0x400093c0 );');
+          Add('PROVIDE ( UartConnCheck = 0x40008738 );');
+          Add('PROVIDE ( UartConnectProc = 0x40008a04 );');
+          Add('PROVIDE ( UartDwnLdProc = 0x40008ce8 );');
+          Add('PROVIDE ( UartRegReadProc = 0x40008a58 );');
+          Add('PROVIDE ( UartRegWriteProc = 0x40008a14 );');
+          Add('PROVIDE ( UartSetBaudProc = 0x40008aac );');
+          Add('PROVIDE ( UartSpiAttachProc = 0x40008a6c );');
+          Add('PROVIDE ( UartSpiReadProc = 0x40008a80 );');
+          Add('PROVIDE ( VerifyFlashMd5Proc = 0x40008c44 );');
+          Add('PROVIDE ( GetUartDevice = 0x40009598 );');
+          Add('PROVIDE ( RcvMsg = 0x4000954c );');
+          Add('PROVIDE ( SendMsg = 0x40009384 );');
+          Add('PROVIDE ( UartGetCmdLn = 0x40009564 );');
+          Add('PROVIDE ( UartRxString = 0x400092fc );');
+          Add('PROVIDE ( Uart_Init = 0x40009120 );');
+          Add('PROVIDE ( recv_packet = 0x40009424 );');
+          Add('PROVIDE ( send_packet = 0x40009340 );');
+          Add('PROVIDE ( uartAttach = 0x40008fd0 );');
+          Add('PROVIDE ( uart_div_modify = 0x400090cc );');
+          Add('PROVIDE ( uart_rx_intr_handler = 0x40008f4c );');
+          Add('PROVIDE ( uart_rx_one_char = 0x400092d0 );');
+          Add('PROVIDE ( uart_rx_one_char_block = 0x400092a4 );');
+          Add('PROVIDE ( uart_rx_readbuff = 0x40009394 );');
+          Add('PROVIDE ( uart_tx_flush = 0x40009258 );');
+          Add('PROVIDE ( uart_tx_one_char = 0x40009200 );');
+          Add('PROVIDE ( uart_tx_one_char2 = 0x4000922c );');
+          Add('PROVIDE ( uart_tx_switch = 0x40009028 );');
+          Add('PROVIDE ( gpio_output_set = 0x40009b24 );');
+          Add('PROVIDE ( gpio_output_set_high = 0x40009b5c );');
+          Add('PROVIDE ( gpio_input_get = 0x40009b88 );');
+          Add('PROVIDE ( gpio_input_get_high = 0x40009b9c );');
+          Add('PROVIDE ( gpio_matrix_in = 0x40009edc );');
+          Add('PROVIDE ( gpio_matrix_out = 0x40009f0c );');
+          Add('PROVIDE ( gpio_pad_select_gpio = 0x40009fdc );');
+          Add('PROVIDE ( gpio_pad_set_drv = 0x4000a11c );');
+          Add('PROVIDE ( gpio_pad_pulldown = 0x4000a348 );');
+          Add('PROVIDE ( gpio_pad_pullup = 0x4000a22c );');
+          Add('PROVIDE ( gpio_pad_hold = 0x4000a734 );');
+          Add('PROVIDE ( gpio_pad_unhold = 0x4000a484 );');
+          Add('PROVIDE ( ets_aes_crypt = 0x4005c9b8 );');
+          Add('PROVIDE ( ets_aes_disable = 0x4005c8f8 );');
+          Add('PROVIDE ( ets_aes_enable = 0x4005c8cc );');
+          Add('PROVIDE ( ets_aes_set_endian = 0x4005c928 );');
+          Add('PROVIDE ( ets_aes_setkey_dec = 0x4005c994 );');
+          Add('PROVIDE ( ets_aes_setkey_enc = 0x4005c97c );');
+          Add('PROVIDE ( ets_bigint_disable = 0x4005c4e0 );');
+          Add('PROVIDE ( ets_bigint_enable = 0x4005c498 );');
+          Add('PROVIDE ( ets_bigint_mod_mult_getz = 0x4005c818 );');
+          Add('PROVIDE ( ets_bigint_mod_mult_prepare = 0x4005c7b4 );');
+          Add('PROVIDE ( ets_bigint_mod_power_getz = 0x4005c614 );');
+          Add('PROVIDE ( ets_bigint_mod_power_prepare = 0x4005c54c );');
+          Add('PROVIDE ( ets_bigint_montgomery_mult_getz = 0x4005c7a4 );');
+          Add('PROVIDE ( ets_bigint_montgomery_mult_prepare = 0x4005c6fc );');
+          Add('PROVIDE ( ets_bigint_mult_getz = 0x4005c6e8 );');
+          Add('PROVIDE ( ets_bigint_mult_prepare = 0x4005c630 );');
+          Add('PROVIDE ( ets_bigint_wait_finish = 0x4005c520 );');
+          Add('PROVIDE ( ets_post = 0x4000673c );');
+          Add('PROVIDE ( ets_run = 0x400066bc );');
+          Add('PROVIDE ( ets_set_idle_cb = 0x40006674 );');
+          Add('PROVIDE ( ets_task = 0x40006688 );');
+          Add('PROVIDE ( ets_efuse_get_8M_clock = 0x40008710 );');
+          Add('PROVIDE ( ets_efuse_get_spiconfig = 0x40008658 );');
+          Add('PROVIDE ( ets_efuse_program_op = 0x40008628 );');
+          Add('PROVIDE ( ets_efuse_read_op = 0x40008600 );');
+          Add('PROVIDE ( ets_intr_lock = 0x400067b0 );');
+          Add('PROVIDE ( ets_intr_unlock = 0x400067c4 );');
+          Add('PROVIDE ( ets_isr_attach = 0x400067ec );');
+          Add('PROVIDE ( ets_waiti0 = 0x400067d8 );');
+          Add('PROVIDE ( intr_matrix_set = 0x4000681c );');
+          Add('PROVIDE ( check_pos = 0x400068b8 );');
+          Add('PROVIDE ( ets_set_appcpu_boot_addr = 0x4000689c );');
+          Add('PROVIDE ( ets_set_startup_callback = 0x4000688c );');
+          Add('PROVIDE ( ets_set_user_start = 0x4000687c );');
+          Add('PROVIDE ( ets_unpack_flash_code = 0x40007018 );');
+          Add('PROVIDE ( ets_unpack_flash_code_legacy = 0x4000694c );');
+          Add('PROVIDE ( rom_main = 0x400076c4 );');
+          Add('PROVIDE ( ets_write_char_uart = 0x40007cf8 );');
+          Add('PROVIDE ( ets_install_putc1 = 0x40007d18 );');
+          Add('PROVIDE ( ets_install_putc2 = 0x40007d38 );');
+          Add('PROVIDE ( ets_install_uart_printf = 0x40007d28 );');
+          Add('PROVIDE ( ets_printf = 0x40007d54 );');
+          Add('PROVIDE ( rtc_boot_control = 0x4000821c );');
+          Add('PROVIDE ( rtc_get_reset_reason = 0x400081d4 );');
+          Add('PROVIDE ( rtc_get_wakeup_cause = 0x400081f4 );');
+          Add('PROVIDE ( rtc_select_apb_bridge = 0x40008288 );');
+          Add('PROVIDE ( set_rtc_memory_crc = 0x40008208 );');
+          Add('PROVIDE ( software_reset = 0x4000824c );');
+          Add('PROVIDE ( software_reset_cpu = 0x40008264 );');
+          Add('PROVIDE ( ets_secure_boot_check = 0x4005cb40 );');
+          Add('PROVIDE ( ets_secure_boot_check_finish = 0x4005cc04 );');
+          Add('PROVIDE ( ets_secure_boot_check_start = 0x4005cbcc );');
+          Add('PROVIDE ( ets_secure_boot_finish = 0x4005ca84 );');
+          Add('PROVIDE ( ets_secure_boot_hash = 0x4005cad4 );');
+          Add('PROVIDE ( ets_secure_boot_obtain = 0x4005cb14 );');
+          Add('PROVIDE ( ets_secure_boot_rd_abstract = 0x4005cba8 );');
+          Add('PROVIDE ( ets_secure_boot_rd_iv = 0x4005cb84 );');
+          Add('PROVIDE ( ets_secure_boot_start = 0x4005ca34 );');
+          Add('PROVIDE ( ets_sha_disable = 0x4005c0a8 );');
+          Add('PROVIDE ( ets_sha_enable = 0x4005c07c );');
+          Add('PROVIDE ( ets_sha_finish = 0x4005c104 );');
+          Add('PROVIDE ( ets_sha_init = 0x4005c0d4 );');
+          Add('PROVIDE ( ets_sha_update = 0x4005c2a0 );');
+          Add('PROVIDE ( ets_delay_us = 0x40008534 );');
+          Add('PROVIDE ( ets_get_cpu_frequency = 0x4000855c );');
+          Add('PROVIDE ( ets_get_detected_xtal_freq = 0x40008588 );');
+          Add('PROVIDE ( ets_get_xtal_scale = 0x4000856c );');
+          Add('PROVIDE ( ets_update_cpu_frequency_rom = 0x40008550 );');
+          Add('PROVIDE ( hci_tl_env = 0x3ffb8154 );');
+          Add('PROVIDE ( ld_acl_env = 0x3ffb8258 );');
+          Add('PROVIDE ( ea_env = 0x3ffb80ec );');
+          Add('PROVIDE ( lc_sco_data_path_config = 0x3ffb81f8 );');
+          Add('PROVIDE ( lc_sco_env = 0x3ffb81fc );');
+          Add('PROVIDE ( ld_active_ch_map = 0x3ffb8334 );');
+          Add('PROVIDE ( ld_bcst_acl_env = 0x3ffb8274 );');
+          Add('PROVIDE ( ld_csb_rx_env = 0x3ffb8278 );');
+          Add('PROVIDE ( ld_csb_tx_env = 0x3ffb827c );');
+          Add('PROVIDE ( ld_env = 0x3ffb9510 );');
+          Add('PROVIDE ( ld_fm_env = 0x3ffb8284 );');
+          Add('PROVIDE ( ld_inq_env = 0x3ffb82e4 );');
+          Add('PROVIDE ( ld_iscan_env = 0x3ffb82e8 );');
+          Add('PROVIDE ( ld_page_env = 0x3ffb82f0 );');
+          Add('PROVIDE ( ld_pca_env = 0x3ffb82f4 );');
+          Add('PROVIDE ( ld_pscan_env = 0x3ffb8308 );');
+          Add('PROVIDE ( ld_sched_env = 0x3ffb830c );');
+          Add('PROVIDE ( ld_sched_params = 0x3ffb96c0 );');
+          Add('PROVIDE ( ld_sco_env = 0x3ffb824c );');
+          Add('PROVIDE ( ld_sscan_env = 0x3ffb832c );');
+          Add('PROVIDE ( ld_strain_env = 0x3ffb8330 );');
+          Add('PROVIDE ( LM_Sniff = 0x3ffb8230 );');
+          Add('PROVIDE ( LM_SniffSubRate = 0x3ffb8214 );');
+          Add('PROVIDE ( prbs_64bytes = 0x3ff98992 );');
+          Add('PROVIDE ( nvds_env = 0x3ffb8364 );');
+          Add('PROVIDE ( nvds_magic_number = 0x3ff9912a );');
+          Add('PROVIDE ( TASK_DESC_LLD = 0x3ff98b58 );');
+          Add('/* esp32.rom.libgcc.ld */');
+          Add('__absvdi2 = 0x4006387c;');
+          Add('__absvsi2 = 0x40063868;');
+          Add('__adddf3 = 0x40002590;');
+          Add('__addsf3 = 0x400020e8;');
+          Add('__addvdi3 = 0x40002cbc;');
+          Add('__addvsi3 = 0x40002c98;');
+          Add('__ashldi3 = 0x4000c818;');
+          Add('__ashrdi3 = 0x4000c830;');
+          Add('__bswapdi2 = 0x40064b08;');
+          Add('__bswapsi2 = 0x40064ae0;');
+          Add('__clrsbdi2 = 0x40064b7c;');
+          Add('__clrsbsi2 = 0x40064b64;');
+          Add('__clzdi2 = 0x4000ca50;');
+          Add('__clzsi2 = 0x4000c7e8;');
+          Add('__cmpdi2 = 0x40063820;');
+          Add('__ctzdi2 = 0x4000ca64;');
+          Add('__ctzsi2 = 0x4000c7f0;');
+          Add('__divdc3 = 0x400645a4;');
+          Add('__divdf3 = 0x40002954;');
+          Add('__divdi3 = 0x4000ca84;');
+          Add('__divsi3 = 0x4000c7b8;');
+          Add('__eqdf2 = 0x400636a8;');
+          Add('__eqsf2 = 0x40063374;');
+          Add('__extendsfdf2 = 0x40002c34;');
+          Add('__ffsdi2 = 0x4000ca2c;');
+          Add('__ffssi2 = 0x4000c804;');
+          Add('__fixdfdi = 0x40002ac4;');
+          Add('__fixdfsi = 0x40002a78;');
+          Add('__fixsfdi = 0x4000244c;');
+          Add('__fixsfsi = 0x4000240c;');
+          Add('__fixunsdfsi = 0x40002b30;');
+          Add('__fixunssfdi = 0x40002504;');
+          Add('__fixunssfsi = 0x400024ac;');
+          Add('__floatdidf = 0x4000c988;');
+          Add('__floatdisf = 0x4000c8c0;');
+          Add('__floatsidf = 0x4000c944;');
+          Add('__floatsisf = 0x4000c870;');
+          Add('__floatundidf = 0x4000c978;');
+          Add('__floatundisf = 0x4000c8b0;');
+          Add('__floatunsidf = 0x4000c938;');
+          Add('__floatunsisf = 0x4000c864;');
+          Add('__gcc_bcmp = 0x40064a70;');
+          Add('__gedf2 = 0x40063768;');
+          Add('__gesf2 = 0x4006340c;');
+          Add('__gtdf2 = 0x400636dc;');
+          Add('__gtsf2 = 0x400633a0;');
+          Add('__ledf2 = 0x40063704;');
+          Add('__lesf2 = 0x400633c0;');
+          Add('__lshrdi3 = 0x4000c84c;');
+          Add('__ltdf2 = 0x40063790;');
+          Add('__ltsf2 = 0x4006342c;');
+          Add('__moddi3 = 0x4000cd4c;');
+          Add('__modsi3 = 0x4000c7c0;');
+          Add('__muldc3 = 0x40063c90;');
+          Add('__muldf3 = 0x4006358c;');
+          Add('__muldi3 = 0x4000c9fc;');
+          Add('__mulsf3 = 0x400632c8;');
+          Add('__mulsi3 = 0x4000c7b0;');
+          Add('__mulvdi3 = 0x40002d78;');
+          Add('__mulvsi3 = 0x40002d60;');
+          Add('__nedf2 = 0x400636a8;');
+          Add('__negdf2 = 0x400634a0;');
+          Add('__negdi2 = 0x4000ca14;');
+          Add('__negsf2 = 0x400020c0;');
+          Add('__negvdi2 = 0x40002e98;');
+          Add('__negvsi2 = 0x40002e78;');
+          Add('__nesf2 = 0x40063374;');
+          Add('__nsau_data = 0x3ff96544;');
+          Add('__paritysi2 = 0x40002f3c;');
+          Add('__popcount_tab = 0x3ff96544;');
+          Add('__popcountdi2 = 0x40002ef8;');
+          Add('__popcountsi2 = 0x40002ed0;');
+          Add('__powidf2 = 0x400638e4;');
+          Add('__subdf3 = 0x400026e4;');
+          Add('__subsf3 = 0x400021d0;');
+          Add('__subvdi3 = 0x40002d20;');
+          Add('__subvsi3 = 0x40002cf8;');
+          Add('__truncdfsf2 = 0x40002b90;');
+          Add('__ucmpdi2 = 0x40063840;');
+          Add('__udiv_w_sdiv = 0x40064bec;');
+          Add('__udivdi3 = 0x4000cff8;');
+          Add('__udivmoddi4 = 0x40064bf4;');
+          Add('__udivsi3 = 0x4000c7c8;');
+          Add('__umoddi3 = 0x4000d280;');
+          Add('__umodsi3 = 0x4000c7d0;');
+          Add('__umulsidi3 = 0x4000c7d8;');
+          Add('__unorddf2 = 0x400637f4;');
+          Add('__unordsf2 = 0x40063478;');
+          Add('/* esp32.rom.newlib-data.ld */');
+          Add('_ctype_ = 0x3ff96354;');
+          Add('__ctype_ptr__ = 0x3ff96350;');
+          Add('_daylight = 0x3ffae0a4;');
+          Add('environ = 0x3ffae0b4;');
+          Add('_global_impure_ptr = 0x3ffae0b0;');
+          Add('__mb_cur_max = 0x3ff96530;');
+          Add('__month_lengths = 0x3ff9609c;');
+          Add('__sf_fake_stderr = 0x3ff96458;');
+          Add('__sf_fake_stdin = 0x3ff96498;');
+          Add('__sf_fake_stdout = 0x3ff96478;');
+          Add('_timezone = 0x3ffae0a0;');
+          Add('_tzname = 0x3ffae030;');
+          Add('__wctomb = 0x3ff96540;');
+          Add('/* esp32.rom.syscalls.ld */');
+          Add('close = 0x40001778;');
+          Add('open = 0x4000178c;');
+          Add('read = 0x400017dc;');
+          Add('sbrk = 0x400017f4;');
+          Add('times = 0x40001808;');
+          Add('write = 0x4000181c;');
+          Add('/* esp32.newlib-funcs.ld */');
+          Add('abs = 0x40056340;');
+          Add('__ascii_wctomb = 0x40058ef0;');
+          Add('atoi = 0x400566c4;');
+          Add('_atoi_r = 0x400566d4;');
+          Add('atol = 0x400566ec;');
+          Add('_atol_r = 0x400566fc;');
+          Add('bzero = 0x4000c1f4;');
+          Add('_cleanup = 0x40001df8;');
+          Add('_cleanup_r = 0x40001d48;');
+          Add('creat = 0x40000e8c;');
+          Add('div = 0x40056348;');
+          Add('__dummy_lock = 0x4000c728;');
+          Add('__dummy_lock_try = 0x4000c730;');
+          Add('__env_lock = 0x40001fd4;');
+          Add('__env_unlock = 0x40001fe0;');
+          Add('fclose = 0x400020ac;');
+          Add('_fclose_r = 0x40001fec;');
+          Add('fflush = 0x40059394;');
+          Add('_fflush_r = 0x40059320;');
+          Add('_findenv_r = 0x40001f44;');
+          Add('__fp_lock_all = 0x40001f1c;');
+          Add('__fp_unlock_all = 0x40001f30;');
+          Add('__fputwc = 0x40058da0;');
+          Add('fputwc = 0x40058ea8;');
+          Add('_fputwc_r = 0x40058e4c;');
+          Add('_fwalk = 0x4000c738;');
+          Add('_fwalk_reent = 0x4000c770;');
+          Add('_getenv_r = 0x40001fbc;');
+          Add('isalnum = 0x40000f04;');
+          Add('isalpha = 0x40000f18;');
+          Add('isascii = 0x4000c20c;');
+          Add('_isatty_r = 0x40000ea0;');
+          Add('isblank = 0x40000f2c;');
+          Add('iscntrl = 0x40000f50;');
+          Add('isdigit = 0x40000f64;');
+          Add('isgraph = 0x40000f94;');
+          Add('islower = 0x40000f78;');
+          Add('isprint = 0x40000fa8;');
+          Add('ispunct = 0x40000fc0;');
+          Add('isspace = 0x40000fd4;');
+          Add('isupper = 0x40000fe8;');
+          Add('__itoa = 0x40056678;');
+          Add('itoa = 0x400566b4;');
+          Add('labs = 0x40056370;');
+          Add('ldiv = 0x40056378;');
+          Add('longjmp = 0x400562cc;');
+          Add('memccpy = 0x4000c220;');
+          Add('memchr = 0x4000c244;');
+          Add('memcmp = 0x4000c260;');
+          Add('memcpy = 0x4000c2c8;');
+          Add('memmove = 0x4000c3c0;');
+          Add('memrchr = 0x4000c400;');
+          Add('memset = 0x4000c44c;');
+          Add('qsort = 0x40056424;');
+          Add('rand = 0x40001058;');
+          Add('rand_r = 0x400010d4;');
+          Add('__sccl = 0x4000c498;');
+          Add('__sclose = 0x400011b8;');
+          Add('__seofread = 0x40001148;');
+          Add('setjmp = 0x40056268;');
+          Add('__sflush_r = 0x400591e0;');
+          Add('__sfmoreglue = 0x40001dc8;');
+          Add('__sfp = 0x40001e90;');
+          Add('__sfp_lock_acquire = 0x40001e08;');
+          Add('__sfp_lock_release = 0x40001e14;');
+          Add('__sfvwrite_r = 0x4005893c;');
+          Add('__sinit = 0x40001e38;');
+          Add('__sinit_lock_acquire = 0x40001e20;');
+          Add('__sinit_lock_release = 0x40001e2c;');
+          Add('__smakebuf_r = 0x40059108;');
+          Add('srand = 0x40001004;');
+          Add('__sread = 0x40001118;');
+          Add('__srefill_r = 0x400593d4;');
+          Add('__sseek = 0x40001184;');
+          Add('strcasecmp = 0x400011cc;');
+          Add('strcasestr = 0x40001210;');
+          Add('strcat = 0x4000c518;');
+          Add('strchr = 0x4000c53c;');
+          Add('strcmp = 0x40001274;');
+          Add('strcoll = 0x40001398;');
+          Add('strcpy = 0x400013ac;');
+          Add('strcspn = 0x4000c558;');
+          Add('strdup = 0x4000143c;');
+          Add('_strdup_r = 0x40001450;');
+          Add('strlcat = 0x40001470;');
+          Add('strlcpy = 0x4000c584;');
+          Add('strlen = 0x400014c0;');
+          Add('strlwr = 0x40001524;');
+          Add('strncasecmp = 0x40001550;');
+          Add('strncat = 0x4000c5c4;');
+          Add('strncmp = 0x4000c5f4;');
+          Add('strncpy = 0x400015d4;');
+          Add('strndup = 0x400016b0;');
+          Add('_strndup_r = 0x400016c4;');
+          Add('strnlen = 0x4000c628;');
+          Add('strrchr = 0x40001708;');
+          Add('strsep = 0x40001734;');
+          Add('strspn = 0x4000c648;');
+          Add('strstr = 0x4000c674;');
+          Add('__strtok_r = 0x4000c6a8;');
+          Add('strtok_r = 0x4000c70c;');
+          Add('strtol = 0x4005681c;');
+          Add('_strtol_r = 0x40056714;');
+          Add('strtoul = 0x4005692c;');
+          Add('_strtoul_r = 0x40056834;');
+          Add('strupr = 0x4000174c;');
+          Add('__submore = 0x40058f3c;');
+          Add('__swbuf = 0x40058cb4;');
+          Add('__swbuf_r = 0x40058bec;');
+          Add('__swrite = 0x40001150;');
+          Add('__swsetup_r = 0x40058cc8;');
+          Add('toascii = 0x4000c720;');
+          Add('tolower = 0x40001868;');
+          Add('toupper = 0x40001884;');
+          Add('__tzcalc_limits = 0x400018a0;');
+          Add('__tz_lock = 0x40001a04;');
+          Add('__tz_unlock = 0x40001a10;');
+          Add('ungetc = 0x400590f4;');
+          Add('_ungetc_r = 0x40058fa0;');
+          Add('__utoa = 0x400561f0;');
+          Add('utoa = 0x40056258;');
+          Add('wcrtomb = 0x40058920;');
+          Add('_wcrtomb_r = 0x400588d8;');
+          Add('_wctomb_r = 0x40058f14;');
+          Add('/* esp32.peripherals.ld */');
+          Add('PROVIDE ( UART0 = 0x3ff40000 );');
+          Add('PROVIDE ( SPI1 = 0x3ff42000 );');
+          Add('PROVIDE ( SPI0 = 0x3ff43000 );');
+          Add('PROVIDE ( GPIO = 0x3ff44000 );');
+          Add('PROVIDE ( SIGMADELTA = 0x3ff44f00 );');
+          Add('PROVIDE ( RTCCNTL = 0x3ff48000 );');
+          Add('PROVIDE ( RTCIO = 0x3ff48400 );');
+          Add('PROVIDE ( SENS = 0x3ff48800 );');
+          Add('PROVIDE ( HINF = 0x3ff4B000 );');
+          Add('PROVIDE ( UHCI1 = 0x3ff4C000 );');
+          Add('PROVIDE ( I2S0 = 0x3ff4F000 );');
+          Add('PROVIDE ( UART1 = 0x3ff50000 );');
+          Add('PROVIDE ( I2C0 = 0x3ff53000 );');
+          Add('PROVIDE ( UHCI0 = 0x3ff54000 );');
+          Add('PROVIDE ( HOST = 0x3ff55000 );');
+          Add('PROVIDE ( RMT = 0x3ff56000 );');
+          Add('PROVIDE ( RMTMEM = 0x3ff56800 );');
+          Add('PROVIDE ( PCNT = 0x3ff57000 );');
+          Add('PROVIDE ( SLC = 0x3ff58000 );');
+          Add('PROVIDE ( LEDC = 0x3ff59000 );');
+          Add('PROVIDE ( MCPWM0 = 0x3ff5E000 );');
+          Add('PROVIDE ( TIMERG0 = 0x3ff5F000 );');
+          Add('PROVIDE ( TIMERG1 = 0x3ff60000 );');
+          Add('PROVIDE ( SPI2 = 0x3ff64000 );');
+          Add('PROVIDE ( SPI3 = 0x3ff65000 );');
+          Add('PROVIDE ( SYSCON = 0x3ff66000 );');
+          Add('PROVIDE ( I2C1 = 0x3ff67000 );');
+          Add('PROVIDE ( SDMMC = 0x3ff68000 );');
+          Add('PROVIDE ( EMAC_DMA = 0x3ff69000 );');
+          Add('PROVIDE ( EMAC_EXT = 0x3ff69800 );');
+          Add('PROVIDE ( EMAC_MAC = 0x3ff6A000 );');
+          Add('PROVIDE ( CAN = 0x3ff6B000 );');
+          Add('PROVIDE ( MCPWM1 = 0x3ff6C000 );');
+          Add('PROVIDE ( I2S1 = 0x3ff6D000 );');
+          Add('PROVIDE ( UART2 = 0x3ff6E000 );');
+        end
+      else // for ESP8266 use internal linker script
+        begin
+          Add('/* esp8266_out.ld */');
+          Add('MEMORY');
+          Add('{');
+          Add('  iram0_0_seg (RX) : org = 0x40100000, len = 0xC000');
+          Add('  iram0_2_seg (RX) : org = 0x40200010 + (0x10000 & (0x100000 - 1)),');
+          Add('                                     len = 0xf0000 - 0x10');
+          Add('  dram0_0_seg (RW) : org = 0x3FFE8000, len = 0x18000');
+          Add('  rtc_data_seg(RW) : org = 0x60001200, len = 0x200');
+          Add('}');
+          Add('/* esp8266.project.ld */');
+          Add('ENTRY(call_start_cpu);');
+          Add('SECTIONS');
+          Add('{');
+          Add('  .rtc.data :');
+          Add('  {');
+          Add('    _rtc_data_start = ABSOLUTE(.);');
+          Add('    *( .rtc.data  .rtc.data.*  .rtc.rodata  .rtc.rodata.*)');
+          Add('    _rtc_data_end = ABSOLUTE(.);');
+          Add('  } > rtc_data_seg');
+          Add('  .rtc.bss (NOLOAD) :');
+          Add('  {');
+          Add('    _rtc_bss_start = ABSOLUTE(.);');
+          Add('    *( .rtc.bss)');
+          Add('    _rtc_bss_end = ABSOLUTE(.);');
+          Add('  } > rtc_data_seg');
+          Add('  .rtc_noinit (NOLOAD):');
+          Add('  {');
+          Add('    . = ALIGN(4);');
+          Add('    _rtc_noinit_start = ABSOLUTE(.);');
+          Add('    *(.rtc_noinit .rtc_noinit.*)');
+          Add('    . = ALIGN(4) ;');
+          Add('    _rtc_noinit_end = ABSOLUTE(.);');
+          Add('  } > rtc_data_seg');
+          Add('  ASSERT(((_rtc_noinit_end - ORIGIN(rtc_data_seg)) <= LENGTH(rtc_data_seg)),');
+          Add('        "RTC segment data does not fit.")');
+          Add('  .iram0.vectors :');
+          Add('  {');
+          Add('    _iram_start = ABSOLUTE(.);');
+          Add('    _init_start = ABSOLUTE(.);');
+          Add('    KEEP(*(.SystemInfoVector.text));');
+          Add('    . = 0x10;');
+          Add('    KEEP(*(.DebugExceptionVector.text));');
+          Add('    . = 0x20;');
+          Add('    KEEP(*(.NMIExceptionVector.text));');
+          Add('    . = 0x30;');
+          Add('    KEEP(*(.KernelExceptionVector.text));');
+          Add('    . = 0x50;');
+          Add('    KEEP(*(.UserExceptionVector.text));');
+          Add('    . = 0x70;');
+          Add('    KEEP(*(.DoubleExceptionVector.text));');
+          Add('    *(.text .literal)');
+          Add('    *(.*Vector.literal)');
+          Add('    *(.UserEnter.literal);');
+          Add('    *(.UserEnter.text);');
+          Add('    . = ALIGN (16);');
+          Add('    *(.entry.text)');
+          Add('    *(.init.literal)');
+          Add('    *(.init)');
+          Add('    _init_end = ABSOLUTE(.);');
+          Add('  } > iram0_0_seg');
+          Add('  .iram0.text :');
+          Add('  {');
+          Add('    _iram_text_start = ABSOLUTE(.);');
+          Add('    *( .iram1  .iram1.*)');
+          Add('    *libphy.a:( .literal  .literal.*  .text  .text.*)');
+          Add('    *libspi_flash.a:spi_flash_raw.*( .literal  .literal.*  .text  .text.*)');
+          Add('    *libpp.a:( .literal  .literal.*  .text  .text.*)');
+          Add('    _iram_text_end = ABSOLUTE(.);');
+          Add('  } > iram0_0_seg');
+          Add('  .iram0.bss :');
+          Add('  {');
+          Add('    . = ALIGN (4);');
+          Add('    _iram_bss_start = ABSOLUTE(.);');
+          Add('    *libcore.a:( .bss  .bss.*  COMMON)');
+          Add('    *libfreertos.a:freertos_hooks.*( .bss  .bss.*  COMMON)');
+          Add('    *libfreertos.a:impure.*( .bss  .bss.*  COMMON)');
+          Add('    *libfreertos.a:timers.*( .bss  .bss.*  COMMON)');
+          Add('    *libfreertos.a:queue.*( .bss  .bss.*  COMMON)');
+          Add('    *libfreertos.a:stream_buffer.*( .bss  .bss.*  COMMON)');
+          Add('    *libfreertos.a:event_groups.*( .bss  .bss.*  COMMON)');
+          Add('    *libfreertos.a:list.*( .bss  .bss.*  COMMON)');
+          Add('    *libfreertos.a:tasks.*( .bss  .bss.*  COMMON)');
+          Add('    *liblwip.a:( .bss  .bss.*  COMMON)');
+          Add('    . = ALIGN (4);');
+          Add('    _iram_bss_end = ABSOLUTE(.);');
+          Add('    _iram_end = ABSOLUTE(.);');
+          Add('  } > iram0_0_seg');
+          Add('  ASSERT(((_iram_end - ORIGIN(iram0_0_seg)) <= LENGTH(iram0_0_seg)),');
+          Add('          "IRAM0 segment data does not fit.")');
+          Add('  .dram0.data :');
+          Add('  {');
+          Add('    _data_start = ABSOLUTE(.);');
+          Add('    *(.gnu.linkonce.d.*)');
+          Add('    *(.data1)');
+          Add('    *(.sdata)');
+          Add('    *(.sdata.*)');
+          Add('    *(.gnu.linkonce.s.*)');
+          Add('    *(.sdata2)');
+          Add('    *(.sdata2.*)');
+          Add('    *(.gnu.linkonce.s2.*)');
+          Add('    *(.jcr)');
+          Add('    *(.dram0 .dram0.*)');
+          Add('    *( .data  .data.*  .dram1  .dram1.*)');
+          Add('    *libspi_flash.a:spi_flash_raw.*( .rodata  .rodata.*)');
+          Add('    *liblog.a:( .rodata  .rodata.*)');
+          Add('    _data_end = ABSOLUTE(.);');
+          Add('    . = ALIGN(4);');
+          Add('  } > dram0_0_seg');
+          Add('  .noinit (NOLOAD):');
+          Add('  {');
+          Add('    . = ALIGN(4);');
+          Add('    _noinit_start = ABSOLUTE(.);');
+          Add('    *(.noinit .noinit.*)');
+          Add('    . = ALIGN(4) ;');
+          Add('    _noinit_end = ABSOLUTE(.);');
+          Add('  } > dram0_0_seg');
+          Add('  .dram0.bss (NOLOAD) :');
+          Add('  {');
+          Add('    . = ALIGN (8);');
+          Add('    _bss_start = ABSOLUTE(.);');
+          Add('    *(EXCLUDE_FILE(*libcore.a *libfreertos.a:tasks.* *libfreertos.a:list.* *libfreertos.a:event_groups.* *libfreertos.a:stream_buffer.* *libfreertos.a:queue.* *libfreertos.a:timers.* *libfreertos.a:impure.* *libfreertos.a:freertos_hooks.* *liblwip.a) .bss EXCLUDE_FILE(*libcore.a *libfreertos.a:tasks.* *libfreertos.a:list.* *libfreertos.a:event_groups.* *libfreertos.a:stream_buffer.* *libfreertos.a:queue.* *libfreertos.a:timers.* *libfreertos.a:impure.* *libfreertos.a:freertos_hooks.* *liblwip.a) .bss.* EXCLUDE_FILE(*libcore.a *libfreertos.a:tasks.* *libfreertos.a:list.* *libfreertos.a:event_groups.* *libfreertos.a:stream_buffer.* *libfreertos.a:queue.* *libfreertos.a:timers.* *libfreertos.a:impure.* *libfreertos.a:freertos_hooks.* *liblwip.a) COMMON)');
+          Add('    *(.dynsbss)');
+          Add('    *(.sbss)');
+          Add('    *(.sbss.*)');
+          Add('    *(.gnu.linkonce.sb.*)');
+          Add('    *(.scommon)');
+          Add('    *(.sbss2)');
+          Add('    *(.sbss2.*)');
+          Add('    *(.gnu.linkonce.sb2.*)');
+          Add('    *(.dynbss)');
+          Add('    *(.share.mem)');
+          Add('    *(.gnu.linkonce.b.*)');
+          Add('    . = ALIGN (8);');
+          Add('    _bss_end = ABSOLUTE(.);');
+          Add('  } > dram0_0_seg');
+          Add('  ASSERT(((_bss_end - ORIGIN(dram0_0_seg)) <= LENGTH(dram0_0_seg)),');
+          Add('          "DRAM segment data does not fit.")');
+          Add('  .flash.text :');
+          Add('  {');
+          Add('    _stext = .;');
+          Add('    _text_start = ABSOLUTE(.);');
+          Add('    *(EXCLUDE_FILE(*libphy.a *libspi_flash.a:spi_flash_raw.* *libpp.a) .literal EXCLUDE_FILE(*libphy.a *libspi_flash.a:spi_flash_raw.* *libpp.a) .literal.* EXCLUDE_FILE(*libphy.a *libspi_flash.a:spi_flash_raw.* *libpp.a) .text EXCLUDE_FILE(*libphy.a *libspi_flash.a:spi_flash_raw.* *libpp.a) .text.*  .wifi0iram  .wifi0iram.*)');
+          Add('    *(.irom0.literal .irom0.text)');
+          Add('    *(.irom.literal .irom.text .irom.text.literal)');
+          Add('    *(.text2 .text2.* .literal2 .literal2.*)');
+          Add('    *(.stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)');
+          Add('    *(.irom0.text)');
+          Add('    *(.fini.literal)');
+          Add('    *(.fini)');
+          Add('    *(.gnu.version)');
+          Add('    _text_end = ABSOLUTE(.);');
+          Add('    _etext = .;');
+          Add('    _flash_cache_start = ABSOLUTE(0);');
+          Add('  } >iram0_2_seg');
+          Add('  .flash.rodata ALIGN(4) :');
+          Add('  {');
+          Add('    _rodata_start = ABSOLUTE(.);');
+          Add('    . = 0x8;');
+          Add('    *(.rodata_desc .rodata_desc.*)');
+          Add('    *(.rodata_custom_desc .rodata_custom_desc.*)');
+          Add('    *(.rodata2 .rodata2.*)');
+          Add('    *(EXCLUDE_FILE(*libspi_flash.a:spi_flash_raw.* *liblog.a) .rodata EXCLUDE_FILE(*libspi_flash.a:spi_flash_raw.* *liblog.a) .rodata.*)');
+          Add('    *(.irom1.text)');
+          Add('    *(.gnu.linkonce.r.*)');
+          Add('    *(.rodata1)');
+          Add('    __XT_EXCEPTION_TABLE_ = ABSOLUTE(.);');
+          Add('    *(.xt_except_table)');
+          Add('    *(.gcc_except_table .gcc_except_table.*)');
+          Add('    *(.gnu.linkonce.e.*)');
+          Add('    *(.gnu.version_r)');
+          Add('    . = (. + 3) & ~ 3;');
+          Add('    __eh_frame = ABSOLUTE(.);');
+          Add('    KEEP(*(.eh_frame))');
+          Add('    . = (. + 7) & ~ 3;');
+          Add('    __init_array_start = ABSOLUTE(.);');
+          Add('    KEEP (*(EXCLUDE_FILE (*crtend.* *crtbegin.*) .ctors .ctors.*))');
+          Add('    __init_array_end = ABSOLUTE(.);');
+          Add('    KEEP (*crtbegin.*(.dtors))');
+          Add('    KEEP (*(EXCLUDE_FILE (*crtend.*) .dtors))');
+          Add('    KEEP (*(SORT(.dtors.*)))');
+          Add('    KEEP (*(.dtors))');
+          Add('    __XT_EXCEPTION_DESCS_ = ABSOLUTE(.);');
+          Add('    *(.xt_except_desc)');
+          Add('    *(.gnu.linkonce.h.*)');
+          Add('    __XT_EXCEPTION_DESCS_END__ = ABSOLUTE(.);');
+          Add('    *(.xt_except_desc_end)');
+          Add('    *(.dynamic)');
+          Add('    *(.gnu.version_d)');
+          Add('    soc_reserved_memory_region_start = ABSOLUTE(.);');
+          Add('    KEEP (*(.reserved_memory_address))');
+          Add('    soc_reserved_memory_region_end = ABSOLUTE(.);');
+          Add('    _rodata_end = ABSOLUTE(.);');
+          Add('    _lit4_start = ABSOLUTE(.);');
+          Add('    *(*.lit4)');
+          Add('    *(.lit4.*)');
+          Add('    *(.gnu.linkonce.lit4.*)');
+          Add('    _lit4_end = ABSOLUTE(.);');
+          Add('    . = ALIGN(4);');
+          Add('    _thread_local_start = ABSOLUTE(.);');
+          Add('    *(.tdata)');
+          Add('    *(.tdata.*)');
+          Add('    *(.tbss)');
+          Add('    *(.tbss.*)');
+          Add('    _thread_local_end = ABSOLUTE(.);');
+          Add('    . = ALIGN(4);');
+          Add('  } >iram0_2_seg');
+          Add('}');
+          Add('/* esp8266-rom.ld */');
+          Add('PROVIDE ( SPI_sector_erase = 0x400040c0 );');
+          Add('PROVIDE ( SPI_page_program = 0x40004174 );');
+          Add('PROVIDE ( SPI_read_data = 0x400042ac );');
+          Add('PROVIDE ( SPI_read_status = 0x400043c8 );');
+          Add('PROVIDE ( SPI_write_status = 0x40004400 );');
+          Add('PROVIDE ( SPI_write_enable = 0x4000443c );');
+          Add('PROVIDE ( Wait_SPI_Idle = 0x4000448c );');
+          Add('PROVIDE ( Enable_QMode = 0x400044c0 );');
+          Add('PROVIDE ( Disable_QMode = 0x40004508 );');
+          Add('PROVIDE ( Cache_Read_Enable = 0x40004678 );');
+          Add('PROVIDE ( Cache_Read_Disable = 0x400047f0 );');
+          Add('PROVIDE ( lldesc_build_chain = 0x40004f40 );');
+          Add('PROVIDE ( lldesc_num2link = 0x40005050 );');
+          Add('PROVIDE ( lldesc_set_owner = 0x4000507c );');
+          Add('PROVIDE ( __adddf3 = 0x4000c538 );');
+          Add('PROVIDE ( __addsf3 = 0x4000c180 );');
+          Add('PROVIDE ( __divdf3 = 0x4000cb94 );');
+          Add('PROVIDE ( __divdi3 = 0x4000ce60 );');
+          Add('PROVIDE ( __divsi3 = 0x4000dc88 );');
+          Add('PROVIDE ( __extendsfdf2 = 0x4000cdfc );');
+          Add('PROVIDE ( __fixdfsi = 0x4000ccb8 );');
+          Add('PROVIDE ( __fixunsdfsi = 0x4000cd00 );');
+          Add('PROVIDE ( __fixunssfsi = 0x4000c4c4 );');
+          Add('PROVIDE ( __floatsidf = 0x4000e2f0 );');
+          Add('PROVIDE ( __floatsisf = 0x4000e2ac );');
+          Add('PROVIDE ( __floatunsidf = 0x4000e2e8 );');
+          Add('PROVIDE ( __floatunsisf = 0x4000e2a4 );');
+          Add('PROVIDE ( __muldf3 = 0x4000c8f0 );');
+          Add('PROVIDE ( __muldi3 = 0x40000650 );');
+          Add('PROVIDE ( __mulsf3 = 0x4000c3dc );');
+          Add('PROVIDE ( __subdf3 = 0x4000c688 );');
+          Add('PROVIDE ( __subsf3 = 0x4000c268 );');
+          Add('PROVIDE ( __truncdfsf2 = 0x4000cd5c );');
+          Add('PROVIDE ( __udivdi3 = 0x4000d310 );');
+          Add('PROVIDE ( __udivsi3 = 0x4000e21c );');
+          Add('PROVIDE ( __umoddi3 = 0x4000d770 );');
+          Add('PROVIDE ( __umodsi3 = 0x4000e268 );');
+          Add('PROVIDE ( __umulsidi3 = 0x4000dcf0 );');
+          Add('PROVIDE ( bzero = 0x4000de84 );');
+          Add('PROVIDE ( memcmp = 0x4000dea8 );');
+          Add('PROVIDE ( memcpy = 0x4000df48 );');
+          Add('PROVIDE ( memmove = 0x4000e04c );');
+          Add('PROVIDE ( memset = 0x4000e190 );');
+          Add('PROVIDE ( strcmp = 0x4000bdc8 );');
+          Add('PROVIDE ( strcpy = 0x4000bec8 );');
+          Add('PROVIDE ( strlen = 0x4000bf4c );');
+          Add('PROVIDE ( strncmp = 0x4000bfa8 );');
+          Add('PROVIDE ( strncpy = 0x4000c0a0 );');
+          Add('PROVIDE ( strstr = 0x4000e1e0 );');
+          Add('PROVIDE ( gpio_input_get = 0x40004cf0 );');
+          Add('PROVIDE ( gpio_pin_wakeup_disable = 0x40004ed4 );');
+          Add('PROVIDE ( gpio_pin_wakeup_enable = 0x40004e90 );');
+          Add('PROVIDE ( ets_io_vprintf = 0x40001f00 );');
+          Add('PROVIDE ( uart_rx_one_char = 0x40003b8c );');
+          Add('PROVIDE ( rom_i2c_readReg = 0x40007268 );');
+          Add('PROVIDE ( rom_i2c_readReg_Mask = 0x4000729c );');
+          Add('PROVIDE ( rom_i2c_writeReg = 0x400072d8 );');
+          Add('PROVIDE ( rom_i2c_writeReg_Mask = 0x4000730c );');
+          Add('PROVIDE ( rom_software_reboot = 0x40000080 );');
+          Add('/* esp8266.peripherals.ld */');
+          Add('PROVIDE ( GPIO = 0x60000300);');
+          Add('PROVIDE ( uart0 = 0x60000000 );');
+          Add('PROVIDE ( uart1 = 0x60000f00 );');
+          Add('PROVIDE ( frc1 = 0x60000600 );');
+          Add('PROVIDE ( rtc_sys_info = 0x60001100 );');
+          Add('PROVIDE ( SLC0 = 0x60000B00 );');
+          Add('PROVIDE ( I2S0 = 0x60000e00 );');
+          Add('PROVIDE ( SPI1 = 0x60000100 );');
+          Add('PROVIDE ( SPI0 = 0x60000200 );');
+        end;
     end;
 {$endif XTENSA}
 
@@ -957,6 +3355,12 @@ var
   hp: TCmdStrListItem;
   filepath: TCmdStr;
 begin
+  if (target_info.system=system_xtensa_freertos) then
+    if (current_settings.controllertype = ct_esp32) then
+      IDF_PATH := 'IDF_PATH'
+    else
+      IDF_PATH := 'IDF_PATH8266';
+
   { for future use }
   StaticStr:='';
   StripStr:='';
@@ -966,188 +3370,24 @@ begin
   success:=true;
   Result:=false;
 
-  if target_info.system=system_xtensa_freertos then
+  if (target_info.system=system_xtensa_freertos) and (current_settings.controllertype = ct_esp32) then
     begin
-      { generate a sdkconfig.h if none is provided,
-        only a few fields are provided to far }
-      if not(Sysutils.FileExists('sdkconfig.h')) then
-        begin
-          Assign(t,'sdkconfig.h');
-          {$push}{$I-}
-          Rewrite(t);
-          if ioresult<>0 then
-            exit;
-          writeln(t,'#pragma once');
-          writeln(t,'#define CONFIG_APP_BUILD_USE_FLASH_SECTIONS 1');
-          writeln(t,'#define CONFIG_BT_RESERVE_DRAM 0x0');
-          writeln(t,'#define CONFIG_ESP32_ULP_COPROC_RESERVE_MEM 0');
-          writeln(t,'#define CONFIG_ESP32_TRACEMEM_RESERVE_DRAM 0x0');
-
-          Close(t);
-          if ioresult<>0 then
-            exit;
-          {$pop}
-        end;
-
-      { generate an sdkconfig if none is provided,
-        this is a dummy so far }
-      if not(Sysutils.FileExists('sdkconfig')) then
-        begin
-          Assign(t,'sdkconfig');
-          {$push}{$I-}
-          Rewrite(t);
-          if ioresult<>0 then
-            exit;
-
-          writeln(t);
-
-          Close(t);
-          if ioresult<>0 then
-            exit;
-          {$pop}
-        end;
-
-      { generate an Kconfig if none is provided,
-        this is a dummy so far }
-      if not(Sysutils.FileExists('Kconfig')) then
-        begin
-          Assign(t,'Kconfig');
-          {$push}{$I-}
-          Rewrite(t);
-          if ioresult<>0 then
-            exit;
-
-          writeln(t);
-
-          Close(t);
-          if ioresult<>0 then
-            exit;
-          {$pop}
-        end;
-
-      { generate an Kconfig.projbuild if none is provided,
-        this is a dummy so far }
-      if not(Sysutils.FileExists('Kconfig.projbuild')) then
-        begin
-          Assign(t,'Kconfig.projbuild');
-          {$push}{$I-}
-          Rewrite(t);
-          if ioresult<>0 then
-            exit;
-
-          writeln(t);
-
-          Close(t);
-          if ioresult<>0 then
-            exit;
-          {$pop}
-        end;
-
-      { generate an kconfigs.in if none is provided,
-        this is a dummy so far }
-      if not(Sysutils.FileExists('kconfigs.in')) then
-        begin
-          Assign(t,'kconfigs.in');
-          {$push}{$I-}
-          Rewrite(t);
-          if ioresult<>0 then
-            exit;
-
-          writeln(t);
-
-          Close(t);
-          if ioresult<>0 then
-            exit;
-          {$pop}
-        end;
-
-      { generate an kconfigs_projbuild.in if none is provided,
-        this is a dummy so far }
-      if not(Sysutils.FileExists('kconfigs_projbuild.in')) then
-        begin
-          Assign(t,'kconfigs_projbuild.in');
-          {$push}{$I-}
-          Rewrite(t);
-          if ioresult<>0 then
-            exit;
-
-          writeln(t);
-
-          Close(t);
-          if ioresult<>0 then
-            exit;
-          {$pop}
-        end;
-
-      { generate a config.env if none is provided,
-        COMPONENT_KCONFIGS and COMPONENT_KCONFIGS_PROJBUILD are dummy fields and might
-        be needed to be filed properly }
-      if not(Sysutils.FileExists('config.env')) then
-        begin
-          Assign(t,'config.env');
-          {$push}{$I-}
-          Rewrite(t);
-          if ioresult<>0 then
-            exit;
-
-          writeln(t,'{');
-          writeln(t,'    "COMPONENT_KCONFIGS": "Kconfig",');
-          writeln(t,'    "COMPONENT_KCONFIGS_PROJBUILD": "Kconfig.projbuild",');
-          writeln(t,'    "IDF_CMAKE": "y",');
-          writeln(t,'    "IDF_TARGET": "esp32",');
-          writeln(t,'    "IDF_PATH": "'+GetEnvironmentVariable('IDF_PATH')+'",');
-          writeln(t,'    "COMPONENT_KCONFIGS_SOURCE_FILE": "kconfigs.in",');
-          writeln(t,'    "COMPONENT_KCONFIGS_PROJBUILD_SOURCE_FILE": "kconfigs_projbuild.in"');
-          writeln(t,'}');
-
-          Close(t);
-          if ioresult<>0 then
-            exit;
-          {$pop}
-        end;
-
-      { generate ldgen_libraries }
-      Assign(t,'ldgen_libraries');
-      {$push}{$I-}
-      Rewrite(t);
-      if ioresult<>0 then
-        exit;
-
-      hp:=TCmdStrListItem(StaticLibFiles.First);
-      while assigned(hp) do
-        begin
-          FindLibraryFile(hp.Str,target_info.staticClibprefix,target_info.staticClibext,filepath);
-          writeln(t,filepath);
-          hp:=TCmdStrListItem(hp.Next);
-        end;
-
-      Close(t);
-      if ioresult<>0 then
-        exit;
-      {$pop}
-
-      binstr:='xtensa-esp32-elf-gcc';
-      cmdstr:='-C -P -x c -E -o esp32_out.ld -I . $IDF_PATH/components/esp32/ld/esp32.ld';
-
-      Replace(binstr,'$IDF_PATH',maybequoted(GetEnvironmentVariable('IDF_PATH')));
-      Replace(cmdstr,'$IDF_PATH',maybequoted(GetEnvironmentVariable('IDF_PATH')));
-      success:=DoExec(binstr,cmdstr,true,true);
-
-      { generate linker maps for esp32 }
-      binstr:='$IDF_PATH/tools/ldgen/ldgen.py';
-      cmdstr:='--config sdkconfig --fragments $IDF_PATH/components/xtensa/linker.lf $IDF_PATH/components/soc/linker.lf $IDF_PATH/components/esp_event/linker.lf '+
-        '$IDF_PATH/components/spi_flash/linker.lf $IDF_PATH/components/esp_wifi/linker.lf $IDF_PATH/components/lwip/linker.lf '+
-        '$IDF_PATH/components/heap/linker.lf $IDF_PATH/components/esp_ringbuf/linker.lf $IDF_PATH/components/espcoredump/linker.lf $IDF_PATH/components/esp32/linker.lf '+
-        '$IDF_PATH/components/esp32/ld/esp32_fragments.lf $IDF_PATH/components/freertos/linker.lf $IDF_PATH/components/newlib/newlib.lf '+
-        '$IDF_PATH/components/esp_gdbstub/linker.lf '+
-        '--input $IDF_PATH/components/esp32/ld/esp32.project.ld.in --output ./esp32.project.ld --kconfig $IDF_PATH/Kconfig --env-file config.env '+
-        '--libraries-file ldgen_libraries --objdump xtensa-esp32-elf-objdump';
-      Replace(binstr,'$IDF_PATH',maybequoted(GetEnvironmentVariable('IDF_PATH')));
-      Replace(cmdstr,'$IDF_PATH',maybequoted(GetEnvironmentVariable('IDF_PATH')));
-      if success and not(cs_link_nolink in current_settings.globalswitches) then
-        success:=DoExec(binstr,cmdstr,true,false);
+      Info.ExeCmd[1]:='ld -g $OPT $DYNLINK $STATIC $GCSECTIONS $STRIP $MAP '+
+        '-u call_user_start_cpu0 -u ld_include_panic_highint_hdl -u esp_app_desc '+
+        '-u vfs_include_syscalls_impl -u pthread_include_pthread_impl '+
+        '-u pthread_include_pthread_cond_impl -u pthread_include_pthread_local_storage_impl '+
+        '-u newlib_include_locks_impl -u newlib_include_heap_impl -u newlib_include_syscalls_impl '+
+        '-u newlib_include_pthread_impl -u app_main -u uxTopUsedPriority '+
+        '-L. -o $EXE -T $RES';
+    end
+  else  // esp8266
+    begin
+      Info.ExeCmd[1]:='ld -g $OPT $DYNLINK $STATIC $GCSECTIONS $STRIP $MAP '+
+       '-u call_user_start_cpu -u esp_app_desc '+
+       '-L. -o $EXE -T $RES';
     end;
 
+  Replace(Info.ExeCmd[1],'$'+IDF_PATH,maybequoted(GetEnvironmentVariable(IDF_PATH)));
   FixedExeFileName:=maybequoted(ScriptFixFileName(ChangeFileExt(current_module.exefilename,'.elf')));
 
   GCSectionsStr:='--gc-sections';
@@ -1165,7 +3405,7 @@ begin
   SplitBinCmd(Info.ExeCmd[1],binstr,cmdstr);
   Replace(cmdstr,'$OPT',Info.ExtraOptions);
   if target_info.system=system_xtensa_freertos then
-    Replace(cmdstr,'$IDF_PATH',maybequoted(GetEnvironmentVariable('IDF_PATH')));
+    Replace(cmdstr,'$'+IDF_PATH,maybequoted(GetEnvironmentVariable(IDF_PATH)));
   if not(cs_link_on_target in current_settings.globalswitches) then
    begin
     Replace(cmdstr,'$EXE',FixedExeFileName);
@@ -1186,8 +3426,7 @@ begin
     Replace(cmdstr,'$GCSECTIONS',GCSectionsStr);
     Replace(cmdstr,'$DYNLINK',DynLinkStr);
    end;
-  if success and not(cs_link_nolink in current_settings.globalswitches) then
-    success:=DoExec(FindUtil(utilsprefix+BinStr),cmdstr,true,false);
+  success:=DoExec(FindUtil(utilsprefix+BinStr),cmdstr,true,false);
 
 { Remove ReponseFile }
   if success and not(cs_link_nolink in current_settings.globalswitches) then
@@ -1198,16 +3437,28 @@ begin
     success:=PostProcessExecutable(FixedExeFileName,false);
 
   if success and (target_info.system=system_xtensa_freertos) then
-    begin
-      binstr:='$IDF_PATH/components/esptool_py/esptool/esptool.py';
-      Replace(binstr,'$IDF_PATH',maybequoted(GetEnvironmentVariable('IDF_PATH')));
-      success:=DoExec(binstr,'--chip esp32 elf2image --flash_mode dio --flash_freq 40m '+
-        '--flash_size '+tostr(embedded_controllers[current_settings.controllertype].flashsize div (1024*1024))+'MB '+
-        '--elf-sha256-offset 0xb0 '+
-        '-o '+maybequoted(ScriptFixFileName(ChangeFileExt(current_module.exefilename,'.bin')))+' '+
-        FixedExeFileName,
-        true,false);
-    end
+    if (current_settings.controllertype = ct_esp32) then
+      begin
+        binstr:='$'+IDF_PATH+'/components/esptool_py/esptool/esptool.py';
+        Replace(binstr,'$'+IDF_PATH,maybequoted(GetEnvironmentVariable(IDF_PATH)));
+        success:=DoExec(binstr,'--chip esp32 elf2image --flash_mode dio --flash_freq 40m '+
+          '--flash_size '+tostr(embedded_controllers[current_settings.controllertype].flashsize div (1024*1024))+'MB '+
+          '--elf-sha256-offset 0xb0 '+
+          '-o '+maybequoted(ScriptFixFileName(ChangeFileExt(current_module.exefilename,'.bin')))+' '+
+          FixedExeFileName,
+          true,false);
+      end
+    else if (current_settings.controllertype = ct_esp8266) then
+      begin
+        binstr:='$'+IDF_PATH+'/components/esptool_py/esptool/esptool.py';
+        Replace(binstr,'$'+IDF_PATH,maybequoted(GetEnvironmentVariable(IDF_PATH)));
+        success:=DoExec(binstr,'--chip esp8266 elf2image --flash_mode dout --flash_freq 40m '+
+          '--flash_size '+tostr(embedded_controllers[current_settings.controllertype].flashsize div (1024*1024))+'MB '+
+          '--version=3 '+
+          '-o '+maybequoted(ScriptFixFileName(ChangeFileExt(current_module.exefilename,'.bin')))+' '+
+          FixedExeFileName,
+          true,false);
+      end
   else
     if success then
       success:=DoExec(FindUtil(utilsprefix+'objcopy'),'-O binary '+
diff --git a/compiler/xtensa/cgcpu.pas b/compiler/xtensa/cgcpu.pas
index caa6e9cac9..b3108e5e22 100644
--- a/compiler/xtensa/cgcpu.pas
+++ b/compiler/xtensa/cgcpu.pas
@@ -140,9 +140,15 @@ implementation
     procedure tcgcpu.init_register_allocators;
       begin
         inherited init_register_allocators;
-        rg[R_INTREGISTER]:=trgintcpu.create(R_INTREGISTER,R_SUBWHOLE,
-            [RS_A2,RS_A3,RS_A4,RS_A5,RS_A6,RS_A7,RS_A8,RS_A9,
-             RS_A10,RS_A11,RS_A12,RS_A13,RS_A14,RS_A15],first_int_imreg,[]);
+        if target_info.abi = abi_xtensa_call0 then
+          rg[R_INTREGISTER]:=trgintcpu.create(R_INTREGISTER,R_SUBWHOLE,
+              [RS_A2,RS_A3,RS_A4,RS_A5,RS_A6,RS_A7,{RS_A8,}RS_A9,
+               RS_A10,RS_A11,RS_A12,RS_A13,RS_A14{,RS_A15}],first_int_imreg,[])
+        else
+          rg[R_INTREGISTER]:=trgintcpu.create(R_INTREGISTER,R_SUBWHOLE,
+              [RS_A2,RS_A3,RS_A4,RS_A5,RS_A6,RS_A7,RS_A8,RS_A9,
+               RS_A10,RS_A11,RS_A12,RS_A13,RS_A14,RS_A15],first_int_imreg,[]);
+
         rg[R_FPUREGISTER]:=trgcpu.create(R_FPUREGISTER,R_SUBNONE,
             [RS_F0,RS_F1,RS_F2,RS_F3,RS_F4,RS_F5,RS_F6,RS_F7,RS_F8,RS_F9,
              RS_F10,RS_F11,RS_F12,RS_F13,RS_F14,RS_F15],first_fpu_imreg,[]);
@@ -737,12 +743,88 @@ implementation
 
     procedure tcgcpu.g_proc_exit(list : TAsmList; parasize : longint;
      nostackframe : boolean);
+      var
+         ref : treference;
+         r : byte;
+         regs : tcpuregisterset;
+         stackmisalignment : pint;
+         regoffset : LongInt;
+         stack_parameters : Boolean;
+         registerarea : PtrInt;
+         l : TAsmLabel;
+         LocalSize: longint;
       begin
         case target_info.abi of
           abi_xtensa_windowed:
             list.Concat(taicpu.op_none(A_RETW));
           abi_xtensa_call0:
-            list.Concat(taicpu.op_none(A_RET));
+            begin
+              if not(nostackframe) then
+                begin
+                  LocalSize:=current_procinfo.calc_stackframe_size;
+                  LocalSize:=align(LocalSize,4);
+                  stack_parameters:=current_procinfo.procdef.stack_tainting_parameter(calleeside);
+                  registerarea:=0;
+                  regs:=rg[R_INTREGISTER].used_in_proc-paramanager.get_volatile_registers_int(pocall_stdcall);
+                  if current_procinfo.framepointer<>NR_STACK_POINTER_REG then
+                    Include(regs,RS_A15);
+                  if pi_do_call in current_procinfo.flags then
+                    Include(regs,RS_A0);
+                  if regs<>[] then
+                     begin
+                       for r:=RS_A0 to RS_A15 do
+                         if r in regs then
+                           inc(registerarea,4);
+                     end;
+                  inc(localsize,registerarea);
+
+                  if LocalSize<>0 then
+                    begin
+                      localsize:=align(localsize,current_settings.alignment.localalignmax);
+                      // Determine reference mode required to access stack
+                      reference_reset(ref,4,[]);
+                      ref.base:=NR_STACK_POINTER_REG;
+                      ref.offset:=localsize;
+                      if ref.offset>1024 then
+                        begin
+                          if ref.offset<=1024+32512 then
+                            begin
+                              // allocation done in proc_entry
+                              //list.concat(taicpu.op_reg_reg_const(A_ADDMI,NR_A8,NR_STACK_POINTER_REG,ref.offset and $fffffc00));
+                              ref.offset:=ref.offset and $3ff;
+                              ref.base:=NR_A8;
+                            end
+                          else
+                            { fix me! }
+                            Internalerror(2020031101);
+                        end;
+
+                      // restore a15 if used
+                      if current_procinfo.framepointer<>NR_STACK_POINTER_REG then
+                        begin
+                          dec(ref.offset,4);
+                          list.concat(taicpu.op_reg_ref(A_L32I,NR_A15,ref));
+                          a_reg_dealloc(list,NR_FRAME_POINTER_REG);
+                        end;
+
+                      // restore rest of registers
+                      if regs<>[] then
+                        begin
+                          for r:=RS_A14 downto RS_A0 do
+                            if r in regs then
+                              begin
+                                dec(ref.offset,4);
+                                list.concat(taicpu.op_reg_ref(A_L32I,newreg(R_INTREGISTER,r,R_SUBWHOLE),ref));
+                              end;
+                        end;
+
+                      // restore stack pointer
+                      list.concat(taicpu.op_reg_reg_const(A_ADDI,NR_STACK_POINTER_REG,NR_STACK_POINTER_REG,localsize));
+                      a_reg_dealloc(list,NR_STACK_POINTER_REG);
+                    end;
+                  end;
+              list.Concat(taicpu.op_none(A_RET));
+            end
           else
             Internalerror(2020031403);
         end;
diff --git a/compiler/xtensa/cpuinfo.pas b/compiler/xtensa/cpuinfo.pas
index f359e6af4a..c3fabba253 100644
--- a/compiler/xtensa/cpuinfo.pas
+++ b/compiler/xtensa/cpuinfo.pas
@@ -110,7 +110,7 @@ Const
    embedded_controllers : array [tcontrollertype] of tcontrollerdatatype =
    (
       (controllertypestr:'';		controllerunitstr:'';	cputype:cpu_none; fputype:fpu_soft; abi: abi_default; flashbase:0),
-      (controllertypestr:'ESP8266';	controllerunitstr:'ESP8266';	cputype:cpu_lx106; fputype:fpu_soft; abi: abi_xtensa_call0; { flashbase:$40000000; flashsize:448*1024; srambase:$40070000; sramsize: 520*1024 }),
+      (controllertypestr:'ESP8266';	controllerunitstr:'ESP8266';	cputype:cpu_lx106; fputype:fpu_soft; abi: abi_xtensa_call0; flashbase:$40000000; flashsize:1024*1024; srambase:$40070000; sramsize: 520*1024),
       (controllertypestr:'ESP32';	controllerunitstr:'ESP32';	cputype:cpu_lx6; fputype:fpu_hard; abi: abi_xtensa_windowed; flashbase:$40000000; flashsize:2*1024*1024),
       (controllertypestr:'ESP32_D0WD';	controllerunitstr:'ESP32_D0WD';	cputype:cpu_lx6; fputype:fpu_hard; abi: abi_xtensa_windowed; flashbase:$40000000; flashsize:448*1024; srambase:$40070000; sramsize: 520*1024),
       (controllertypestr:'ESP32_D2WD';	controllerunitstr:'ESP32_D2WD';	cputype:cpu_lx6; fputype:fpu_hard; abi: abi_xtensa_windowed; flashbase:$40000000; flashsize:448*1024; srambase:$40070000; sramsize: 520*1024),
diff --git a/compiler/xtensa/cpupara.pas b/compiler/xtensa/cpupara.pas
index 663642f3a6..eac0c4b134 100644
--- a/compiler/xtensa/cpupara.pas
+++ b/compiler/xtensa/cpupara.pas
@@ -232,7 +232,7 @@ unit cpupara;
             if side=callerside then
               case target_info.abi of
                 abi_xtensa_call0:
-              paraloc^.register:=NR_A2;
+                  paraloc^.register:=NR_A2;
                 abi_xtensa_windowed:
                   { only call8 used/supported so far }
                   paraloc^.register:=newreg(R_INTREGISTER,RS_A10,cgsize2subreg(R_INTREGISTER,retcgsize));
@@ -250,7 +250,7 @@ unit cpupara;
             if side=callerside then
               case target_info.abi of
                 abi_xtensa_call0:
-              paraloc^.register:=NR_A3;
+                  paraloc^.register:=NR_A3;
                 abi_xtensa_windowed:
                   { only call8 used/supported so far }
                   paraloc^.register:=newreg(R_INTREGISTER,RS_A11,cgsize2subreg(R_INTREGISTER,retcgsize));
diff --git a/compiler/xtensa/ncpuutil.pas b/compiler/xtensa/ncpuutil.pas
index a60fcc0ca4..7b35d462dc 100644
--- a/compiler/xtensa/ncpuutil.pas
+++ b/compiler/xtensa/ncpuutil.pas
@@ -66,13 +66,16 @@ implementation
       finalList.Concat(tai_align.Create(target_info.alignment.procalign));
 
       case target_info.abi of
-//        abi_xtensa_call0:
-//          begin
-//            initList.Concat(taicpu.op_none(A_RET));
-//            finalList.Concat(taicpu.op_none(A_RET));
-//            callop:=A_CALL0;
-//            retop:=A_RET;
-//          end;
+        abi_xtensa_call0:
+          begin
+            // Store return address on stack
+            initlist.concat(taicpu.op_reg_reg_const(A_ADDI,NR_STACK_POINTER_REG,NR_STACK_POINTER_REG,-16));
+            initlist.concat(taicpu.op_reg_reg_const(A_S32I, NR_A0, NR_A1, 12));
+            finalList.concat(taicpu.op_reg_reg_const(A_ADDI,NR_STACK_POINTER_REG,NR_STACK_POINTER_REG,-16));
+            finalList.concat(taicpu.op_reg_reg_const(A_S32I, NR_A0, NR_A1, 12));
+            callop:=A_CALL0;
+            retop:=A_RET;
+          end;
         abi_xtensa_windowed:
           begin
             initList.Concat(taicpu.op_reg_const(A_ENTRY,NR_A1,16));
@@ -93,6 +96,15 @@ implementation
             initList.Concat(taicpu.op_sym(callop,current_asmdata.RefAsmSymbol(entry^.initfunc,AT_FUNCTION)));
         end;
 
+      // Restore return address for call0 ABI
+      if target_info.abi = abi_xtensa_call0 then
+        begin
+          initlist.concat(taicpu.op_reg_reg_const(A_L32I, NR_A0, NR_A1, 12));
+          initlist.concat(taicpu.op_reg_reg_const(A_ADDI,NR_STACK_POINTER_REG,NR_STACK_POINTER_REG,16));
+          finalList.concat(taicpu.op_reg_reg_const(A_L32I, NR_A0, NR_A1, 12));
+          finalList.concat(taicpu.op_reg_reg_const(A_ADDI,NR_STACK_POINTER_REG,NR_STACK_POINTER_REG,16));
+        end;
+
       initList.Concat(taicpu.op_none(retop));
       finalList.Concat(taicpu.op_none(retop));
 
diff --git a/rtl/freertos/Makefile b/rtl/freertos/Makefile
index ef4bd32820..9e43d8be22 100644
--- a/rtl/freertos/Makefile
+++ b/rtl/freertos/Makefile
@@ -516,8 +516,14 @@ endif
 endif
 ifeq ($(ARCH),xtensa)
 CPU_SPECIFIC_COMMON_UNITS=sysutils math classes fgl macpas typinfo types rtlconsts getopts lineinfo
+ifeq ($(SUBARCH),lx6)
 CPU_UNITS=esp32
 CPU_UNITS_DEFINED=1
+endif
+ifeq ($(SUBARCH),lx106)
+CPU_UNITS=esp8266
+CPU_UNITS_DEFINED=1
+endif
 ifeq ($(CPU_UNITS_DEFINED),)
 $(error No CPUs enabled for given SUBARCH, pass either a SUBARCH or set CPU_UNITS_DEFINED=1 if you know what you are doing)
 endif
diff --git a/rtl/freertos/Makefile.fpc b/rtl/freertos/Makefile.fpc
index 704f0ec702..a74c5c9f3b 100644
--- a/rtl/freertos/Makefile.fpc
+++ b/rtl/freertos/Makefile.fpc
@@ -223,10 +223,17 @@ $(error No CPUs enabled for given SUBARCH, pass either a SUBARCH or set CPU_UNIT
 endif
 endif
 
+
 ifeq ($(ARCH),xtensa)
 CPU_SPECIFIC_COMMON_UNITS=sysutils math classes fgl macpas typinfo types rtlconsts getopts lineinfo
+ifeq ($(SUBARCH),lx6)
 CPU_UNITS=esp32
 CPU_UNITS_DEFINED=1
+endif
+ifeq ($(SUBARCH),lx106)
+CPU_UNITS=esp8266
+CPU_UNITS_DEFINED=1
+endif
 ifeq ($(CPU_UNITS_DEFINED),)
 $(error No CPUs enabled for given SUBARCH, pass either a SUBARCH or set CPU_UNITS_DEFINED=1 if you know what you are doing)
 endif
diff --git a/rtl/freertos/xtensa/esp8266.pp b/rtl/freertos/xtensa/esp8266.pp
new file mode 100644
index 0000000000..e1abcfa99b
--- /dev/null
+++ b/rtl/freertos/xtensa/esp8266.pp
@@ -0,0 +1,95 @@
+{******************************************************************************
+Startup code for xtensa-esp8266 using ESP8266_RTOS_SDK V3.3
+******************************************************************************}
+unit esp8266;
+
+{$goto on}
+{$macro on}
+
+  interface
+
+{$linklib esp8266, static}
+{$linklib util, static}
+{$linklib log, static}
+{$linklib c_fnano, static}
+{$linklib newlib, static}
+{$linklib heap, static}
+{$linklib vfs, static}
+{$linklib esp_common, static}
+{$linklib core, static}
+{$linklib freertos, static}
+{$linklib phy, static}
+{$linklib net80211, static}
+{$linklib hal, static}
+{$linklib nvs_flash, static}
+{$linklib rtc, static}
+{$linklib spi_flash, static}
+{$linklib esp_ringbuf, static}
+{$linklib gcc, static}
+{$linklib pp, static}
+{$linklib stdc++, static}
+{$linklib pthread, static}
+{$linklib wpa_supplicant, static}
+//{$linklib esp_event, static} // Not in V3.3
+{$linklib wpa, static}  // not in master version
+{$linklib lwip, static}
+{$linklib mbedtls, static}
+
+  implementation
+
+    uses
+      consoleio,heapmgr;
+
+    var
+      _stack_top: record end; public name '_stack_top';
+      operatingsystem_result: longint; external name 'operatingsystem_result';
+
+    procedure PASCALMAIN; external name 'PASCALMAIN';
+    procedure putchar(c : char);external;
+    function getchar : char;external;
+    function __getreent : pointer;external;
+    procedure fflush(f : pointer);external;
+
+    procedure flushOutput(var t : TextRec);
+      begin
+        fflush(ppointer(__getreent+8)^);
+      end;
+
+    procedure _FPC_haltproc; public name '_haltproc';
+      begin
+        writeln;
+        if operatingsystem_result <> 0 then
+          writeln('Runtime error ', operatingsystem_result);
+
+        writeln('_haltproc called, deleting self');
+        flushOutput(TextRec(Output));
+      end;
+
+
+    procedure app_main;public name 'app_main';
+      begin
+        PASCALMAIN;
+        _FPC_haltproc;
+      end;
+
+    function WriteChar(ACh: char; AUserData: pointer): boolean;
+      begin
+        WriteChar:=true;
+        putchar(ACh);
+      end;
+
+
+    function ReadChar(var ACh: char; AUserData: pointer): boolean;
+      begin
+        ReadChar:=true;
+        ACh:=getchar;
+      end;
+
+
+begin
+  OpenIO(Input, @WriteChar, @ReadChar, fmInput, nil);
+  OpenIO(Output, @WriteChar, @ReadChar, fmOutput, nil);
+  OpenIO(ErrOutput, @WriteChar, @ReadChar, fmOutput, nil);
+  OpenIO(StdOut, @WriteChar, @ReadChar, fmOutput, nil);
+  OpenIO(StdErr, @WriteChar, @ReadChar, fmOutput, nil);
+end.
esp8266.patch (175,115 bytes)   

Florian

2020-06-24 22:06

administrator   ~0123579

Are all the symbol values really always the same and indepent how the SDK was built?

Christo Crause

2020-06-24 23:02

reporter   ~0123580

You are correct, the esp32.ld script contains macros that relocate some of the sections depending on selected SDK options. Also there are different scripts to include or exclude ROM functions. I was thinking of having a static SDK configuration for FPC, else this scheme I tried will not work without a lot of extra processing. If you want to retain the option for user configuration of the SDK then it is probably better to remain with your scheme of invoking the SDK build scripts.

Since the RTL needs to be recompiled if the SDK configuration changed (depending on which settings changed of course) I see difficulty in keeping user customizable SDK options and the RTL in sync. Perhaps I'm just trying to make things more complicated than necessary

Christo Crause

2020-06-30 08:54

reporter   ~0123674

ESP32 linking is a bit more complex than I thought initially since it can include or exclude ROM functions and the current approach of using the SDK script to generate a linker script seems much more generic than my approach in the patch. Also the ESP8266 unit needs some more tweaking because the readchar function of the SDK crashes.

Given these remaining problems I suggest this issue gets closed because the rest of the compiler related patches are already applied. I will create separate issues when I have something workable.

Florian

2020-06-30 22:14

administrator   ~0123688

Marked as resolved as requested by the submitter.

Christo Crause

2020-07-01 07:53

reporter   ~0123693

Thanks for applying the bits that was accepted.

Issue History

Date Modified Username Field Change
2020-06-23 19:48 Christo Crause New Issue
2020-06-23 19:48 Christo Crause File Added: esp8266.patch
2020-06-24 22:06 Florian Note Added: 0123579
2020-06-24 23:02 Christo Crause Note Added: 0123580
2020-06-30 08:54 Christo Crause Note Added: 0123674
2020-06-30 22:14 Florian Assigned To => Florian
2020-06-30 22:14 Florian Status new => resolved
2020-06-30 22:14 Florian Resolution open => fixed
2020-06-30 22:14 Florian Fixed in Version => 3.3.1
2020-06-30 22:14 Florian FPCTarget => -
2020-06-30 22:14 Florian Note Added: 0123688
2020-07-01 07:53 Christo Crause Status resolved => closed
2020-07-01 07:53 Christo Crause Note Added: 0123693