mirror of
				https://github.com/alexandrebobkov/ESP-Nodes.git
				synced 2025-10-31 23:14:32 +00:00 
			
		
		
		
	.
This commit is contained in:
		| @@ -0,0 +1,211 @@ | ||||
| #!/usr/bin/env python3 | ||||
| # | ||||
| # SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD | ||||
| # SPDX-License-Identifier: Apache-2.0 | ||||
|  | ||||
|  | ||||
| import argparse | ||||
| import csv | ||||
| import os | ||||
| import subprocess | ||||
| import sys | ||||
| import re | ||||
| from io import StringIO | ||||
|  | ||||
| OPT_MIN_LEN = 7 | ||||
|  | ||||
| espidf_objdump = None | ||||
| espidf_missing_function_info = True | ||||
|  | ||||
| class sdkconfig_c: | ||||
|     def __init__(self, path): | ||||
|         lines = open(path).read().splitlines() | ||||
|         config = dict() | ||||
|         for l in lines: | ||||
|             if len(l) > OPT_MIN_LEN and l[0] != '#': | ||||
|                 mo = re.match( r'(.*)=(.*)', l, re.M|re.I) | ||||
|                 if mo: | ||||
|                     config[mo.group(1)]=mo.group(2).replace('"', '') | ||||
|         self.config = config | ||||
|      | ||||
|     def index(self, i): | ||||
|         return self.config[i] | ||||
|      | ||||
|     def check(self, options): | ||||
|         options = options.replace(' ', '') | ||||
|         if '&&' in options: | ||||
|             for i in options.split('&&'): | ||||
|                 if i[0] == '!': | ||||
|                     i = i[1:] | ||||
|                     if i in self.config: | ||||
|                         return False | ||||
|                 else: | ||||
|                     if i not in self.config: | ||||
|                         return False | ||||
|         else: | ||||
|             i = options | ||||
|             if i[0] == '!': | ||||
|                 i = i[1:] | ||||
|                 if i in self.config: | ||||
|                     return False | ||||
|             else: | ||||
|                 if i not in self.config: | ||||
|                     return False | ||||
|         return True | ||||
|  | ||||
| class object_c: | ||||
|     def read_dump_info(self, pathes): | ||||
|         new_env = os.environ.copy() | ||||
|         new_env['LC_ALL'] = 'C' | ||||
|         dumps = list() | ||||
|         print('pathes:', pathes) | ||||
|         for path in pathes: | ||||
|             try: | ||||
|                 dump = StringIO(subprocess.check_output([espidf_objdump, '-t', path], env=new_env).decode()) | ||||
|                 dumps.append(dump.readlines()) | ||||
|             except subprocess.CalledProcessError as e: | ||||
|                 raise RuntimeError('cmd:%s result:%s'%(e.cmd, e.returncode)) | ||||
|         return dumps | ||||
|  | ||||
|     def get_func_section(self, dumps, func): | ||||
|         for dump in dumps: | ||||
|             for l in dump: | ||||
|                 if ' %s'%(func) in l and '*UND*' not in l: | ||||
|                     m = re.match(r'(\S*)\s*([glw])\s*([F|O])\s*(\S*)\s*(\S*)\s*(\S*)\s*', l, re.M|re.I) | ||||
|                     if m and m[6] == func: | ||||
|                         return m[4].replace('.text.', '') | ||||
|         if espidf_missing_function_info: | ||||
|             print('%s failed to find section'%(func)) | ||||
|             return None | ||||
|         else: | ||||
|             raise RuntimeError('%s failed to find section'%(func)) | ||||
|  | ||||
|     def __init__(self, name, pathes, libray): | ||||
|         self.name = name | ||||
|         self.libray = libray | ||||
|         self.funcs = dict() | ||||
|         self.pathes = pathes | ||||
|         self.dumps = self.read_dump_info(pathes) | ||||
|      | ||||
|     def append(self, func): | ||||
|         section = self.get_func_section(self.dumps, func) | ||||
|         if section != None: | ||||
|             self.funcs[func] = section | ||||
|      | ||||
|     def functions(self): | ||||
|         nlist = list() | ||||
|         for i in self.funcs: | ||||
|             nlist.append(i) | ||||
|         return nlist | ||||
|      | ||||
|     def sections(self): | ||||
|         nlist = list() | ||||
|         for i in self.funcs: | ||||
|             nlist.append(self.funcs[i]) | ||||
|         return nlist | ||||
|  | ||||
| class library_c: | ||||
|     def __init__(self, name, path): | ||||
|         self.name = name | ||||
|         self.path = path | ||||
|         self.objs = dict() | ||||
|  | ||||
|     def append(self, obj, path, func): | ||||
|         if obj not in self.objs: | ||||
|             self.objs[obj] = object_c(obj, path, self.name) | ||||
|         self.objs[obj].append(func) | ||||
|  | ||||
| class libraries_c: | ||||
|     def __init__(self): | ||||
|         self.libs = dict() | ||||
|  | ||||
|     def append(self, lib, lib_path, obj, obj_path, func): | ||||
|         if lib not in self.libs: | ||||
|             self.libs[lib] = library_c(lib, lib_path) | ||||
|         self.libs[lib].append(obj, obj_path, func) | ||||
|      | ||||
|     def dump(self): | ||||
|         for libname in self.libs: | ||||
|             lib = self.libs[libname] | ||||
|             for objname in lib.objs: | ||||
|                 obj = lib.objs[objname] | ||||
|                 print('%s, %s, %s, %s'%(libname, objname, obj.path, obj.funcs)) | ||||
|  | ||||
| class paths_c: | ||||
|     def __init__(self): | ||||
|         self.paths = dict() | ||||
|      | ||||
|     def append(self, lib, obj, path): | ||||
|         if '$IDF_PATH' in path: | ||||
|             path = path.replace('$IDF_PATH', os.environ['IDF_PATH']) | ||||
|  | ||||
|         if lib not in self.paths: | ||||
|             self.paths[lib] = dict() | ||||
|         if obj not in self.paths[lib]: | ||||
|             self.paths[lib][obj] = list() | ||||
|         self.paths[lib][obj].append(path) | ||||
|      | ||||
|     def index(self, lib, obj): | ||||
|         if lib not in self.paths: | ||||
|             return None | ||||
|         if '*' in self.paths[lib]: | ||||
|             obj = '*' | ||||
|         return self.paths[lib][obj] | ||||
|  | ||||
| def generator(library_file, object_file, function_file, sdkconfig_file, missing_function_info, objdump='riscv32-esp-elf-objdump'): | ||||
|     global espidf_objdump, espidf_missing_function_info | ||||
|     espidf_objdump = objdump | ||||
|     espidf_missing_function_info = missing_function_info | ||||
|  | ||||
|     sdkconfig = sdkconfig_c(sdkconfig_file) | ||||
|  | ||||
|     lib_paths = paths_c() | ||||
|     for p in csv.DictReader(open(library_file, 'r')): | ||||
|         lib_paths.append(p['library'], '*', p['path']) | ||||
|  | ||||
|     obj_paths = paths_c() | ||||
|     for p in csv.DictReader(open(object_file, 'r')): | ||||
|         obj_paths.append(p['library'], p['object'], p['path']) | ||||
|  | ||||
|     libraries = libraries_c() | ||||
|     for d in csv.DictReader(open(function_file, 'r')): | ||||
|         if d['option'] and sdkconfig.check(d['option']) == False: | ||||
|             print('skip %s(%s)'%(d['function'], d['option'])) | ||||
|             continue | ||||
|         lib_path = lib_paths.index(d['library'], '*') | ||||
|         obj_path = obj_paths.index(d['library'], d['object']) | ||||
|         if not obj_path: | ||||
|             obj_path = lib_path | ||||
|         libraries.append(d['library'], lib_path[0], d['object'], obj_path, d['function']) | ||||
|     return libraries | ||||
|  | ||||
| def main(): | ||||
|     argparser = argparse.ArgumentParser(description='Libraries management') | ||||
|  | ||||
|     argparser.add_argument( | ||||
|         '--library', '-l', | ||||
|         help='Library description file', | ||||
|         type=str) | ||||
|  | ||||
|     argparser.add_argument( | ||||
|         '--object', '-b', | ||||
|         help='Object description file', | ||||
|         type=str) | ||||
|  | ||||
|     argparser.add_argument( | ||||
|         '--function', '-f', | ||||
|         help='Function description file', | ||||
|         type=str) | ||||
|  | ||||
|     argparser.add_argument( | ||||
|         '--sdkconfig', '-s', | ||||
|         help='sdkconfig file', | ||||
|         type=str) | ||||
|  | ||||
|     args = argparser.parse_args() | ||||
|  | ||||
|     libraries = generator(args.library, args.object, args.function, args.sdkconfig) | ||||
|     # libraries.dump() | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     main() | ||||
| @@ -0,0 +1,365 @@ | ||||
| library,object,function,option | ||||
| libble_app.a,ble_hw.c.o,r_ble_hw_resolv_list_get_cur_entry, | ||||
| libble_app.a,ble_ll_adv.c.o,r_ble_ll_adv_set_sched, | ||||
| libble_app.a,ble_ll_adv.c.o,r_ble_ll_adv_sync_pdu_make, | ||||
| libble_app.a,ble_ll_adv.c.o,r_ble_ll_adv_sync_calculate, | ||||
| libble_app.a,ble_ll_conn.c.o,r_ble_ll_conn_is_dev_connected, | ||||
| libble_app.a,ble_ll_ctrl.c.o,r_ble_ll_ctrl_tx_done, | ||||
| libble_app.a,ble_lll_adv.c.o,r_ble_lll_adv_aux_scannable_pdu_payload_len, | ||||
| libble_app.a,ble_lll_adv.c.o,r_ble_lll_adv_halt, | ||||
| libble_app.a,ble_lll_adv.c.o,r_ble_lll_adv_periodic_schedule_next, | ||||
| libble_app.a,ble_lll_conn.c.o,r_ble_lll_conn_cth_flow_free_credit, | ||||
| libble_app.a,ble_lll_conn.c.o,r_ble_lll_conn_update_encryption, | ||||
| libble_app.a,ble_lll_conn.c.o,r_ble_lll_conn_set_slave_flow_control, | ||||
| libble_app.a,ble_lll_conn.c.o,r_ble_lll_init_rx_pkt_isr, | ||||
| libble_app.a,ble_lll_conn.c.o,r_ble_lll_conn_get_rx_mbuf, | ||||
| libble_app.a,ble_lll_rfmgmt.c.o,r_ble_lll_rfmgmt_enable, | ||||
| libble_app.a,ble_lll_rfmgmt.c.o,r_ble_lll_rfmgmt_timer_reschedule, | ||||
| libble_app.a,ble_lll_rfmgmt.c.o,r_ble_lll_rfmgmt_timer_exp, | ||||
| libble_app.a,ble_lll_scan.c.o,r_ble_lll_scan_targeta_is_matched, | ||||
| libble_app.a,ble_lll_scan.c.o,r_ble_lll_scan_rx_isr_on_legacy, | ||||
| libble_app.a,ble_lll_scan.c.o,r_ble_lll_scan_rx_isr_on_aux, | ||||
| libble_app.a,ble_lll_scan.c.o,r_ble_lll_scan_process_rsp_in_isr, | ||||
| libble_app.a,ble_lll_scan.c.o,r_ble_lll_scan_rx_pkt_isr, | ||||
| libble_app.a,ble_lll_sched.c.o,r_ble_lll_sched_execute_check, | ||||
| libble_app.a,ble_lll_sync.c.o,r_ble_lll_sync_event_start_cb, | ||||
| libble_app.a,ble_phy.c.o,r_ble_phy_set_rxhdr, | ||||
| libble_app.a,ble_phy.c.o,r_ble_phy_update_conn_sequence, | ||||
| libble_app.a,ble_phy.c.o,r_ble_phy_set_sequence_mode, | ||||
| libble_app.a,ble_phy.c.o,r_ble_phy_txpower_round, | ||||
| libble_app.a,os_mempool.c.obj,r_os_memblock_put, | ||||
| libbootloader_support.a,bootloader_flash.c.obj,bootloader_read_flash_id, | ||||
| libbootloader_support.a,flash_encrypt.c.obj,esp_flash_encryption_enabled, | ||||
| libbt.a,bt_osi_mem.c.obj,bt_osi_mem_calloc,CONFIG_BT_ENABLED | ||||
| libbt.a,bt_osi_mem.c.obj,bt_osi_mem_malloc,CONFIG_BT_ENABLED | ||||
| libbt.a,bt_osi_mem.c.obj,bt_osi_mem_malloc_internal,CONFIG_BT_ENABLED | ||||
| libbt.a,bt_osi_mem.c.obj,bt_osi_mem_free,CONFIG_BT_ENABLED | ||||
| libbt.a,bt.c.obj,esp_reset_rpa_moudle,CONFIG_BT_ENABLED | ||||
| libbt.a,bt.c.obj,osi_assert_wrapper,CONFIG_BT_ENABLED | ||||
| libbt.a,bt.c.obj,osi_random_wrapper,CONFIG_BT_ENABLED | ||||
| libbt.a,nimble_port.c.obj,nimble_port_run,CONFIG_BT_NIMBLE_ENABLED | ||||
| libbt.a,nimble_port.c.obj,nimble_port_get_dflt_eventq,CONFIG_BT_NIMBLE_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,os_callout_timer_cb,CONFIG_BT_ENABLED && !CONFIG_BT_NIMBLE_USE_ESP_TIMER | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_event_run,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_callout_stop,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_time_get,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_callout_reset,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_callout_is_active,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_callout_get_ticks,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_callout_remaining_ticks,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_time_delay,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_eventq_is_empty,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_mutex_pend,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_mutex_release,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_sem_init,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_sem_pend,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_sem_release,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_callout_init,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_callout_deinit,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_event_is_queued,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_event_get_arg,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_time_ms_to_ticks32,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_time_ticks_to_ms32,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_hw_is_in_critical,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_get_time_forever,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_os_started,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_get_current_task_id,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_event_reset,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_callout_mem_reset,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_event_init,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_sem_get_count,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_eventq_remove,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_hw_exit_critical,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_mutex_init,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_hw_enter_critical,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_eventq_put,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_eventq_get,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_sem_deinit,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_mutex_deinit,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_eventq_deinit,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_eventq_init,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_event_deinit,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_time_ticks_to_ms,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_time_ms_to_ticks,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_callout_set_arg,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_event_set_arg,CONFIG_BT_ENABLED | ||||
| libbt.a,npl_os_freertos.c.obj,npl_freertos_eventq_put,CONFIG_BT_ENABLED | ||||
| libdriver.a,gpio.c.obj,gpio_intr_service, | ||||
| libesp_app_format.a,esp_app_desc.c.obj,esp_app_get_elf_sha256, | ||||
| libesp_hw_support.a,cpu.c.obj,esp_cpu_wait_for_intr, | ||||
| libesp_hw_support.a,cpu.c.obj,esp_cpu_reset, | ||||
| libesp_hw_support.a,esp_clk.c.obj,esp_clk_cpu_freq, | ||||
| libesp_hw_support.a,esp_clk.c.obj,esp_clk_apb_freq, | ||||
| libesp_hw_support.a,esp_clk.c.obj,esp_clk_xtal_freq, | ||||
| libesp_hw_support.a,esp_memory_utils.c.obj,esp_ptr_byte_accessible, | ||||
| libesp_hw_support.a,hw_random.c.obj,esp_random, | ||||
| libesp_hw_support.a,intr_alloc.c.obj,shared_intr_isr, | ||||
| libesp_hw_support.a,intr_alloc.c.obj,esp_intr_noniram_disable, | ||||
| libesp_hw_support.a,intr_alloc.c.obj,esp_intr_noniram_enable, | ||||
| libesp_hw_support.a,intr_alloc.c.obj,esp_intr_enable, | ||||
| libesp_hw_support.a,intr_alloc.c.obj,esp_intr_disable, | ||||
| libesp_hw_support.a,periph_ctrl.c.obj,wifi_bt_common_module_enable, | ||||
| libesp_hw_support.a,periph_ctrl.c.obj,wifi_bt_common_module_disable, | ||||
| libesp_hw_support.a,regi2c_ctrl.c.obj,regi2c_ctrl_read_reg, | ||||
| libesp_hw_support.a,regi2c_ctrl.c.obj,regi2c_ctrl_read_reg_mask, | ||||
| libesp_hw_support.a,regi2c_ctrl.c.obj,regi2c_ctrl_write_reg, | ||||
| libesp_hw_support.a,regi2c_ctrl.c.obj,regi2c_ctrl_write_reg_mask, | ||||
| libesp_hw_support.a,regi2c_ctrl.c.obj,regi2c_enter_critical, | ||||
| libesp_hw_support.a,regi2c_ctrl.c.obj,regi2c_exit_critical, | ||||
| libesp_hw_support.a,regi2c_ctrl.c.obj,regi2c_analog_cali_reg_read, | ||||
| libesp_hw_support.a,regi2c_ctrl.c.obj,regi2c_analog_cali_reg_write, | ||||
| libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_32k_enable_external, | ||||
| libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_fast_src_set, | ||||
| libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_slow_freq_get_hz, | ||||
| libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_slow_src_get, | ||||
| libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_slow_src_set, | ||||
| libesp_hw_support.a,rtc_clk.c.obj,rtc_dig_clk8m_disable, | ||||
| libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_cpu_freq_set_config_fast, | ||||
| libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_8m_enable, | ||||
| libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_8md256_enabled, | ||||
| libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_bbpll_configure, | ||||
| libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_bbpll_enable, | ||||
| libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_cpu_freq_get_config, | ||||
| libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_cpu_freq_mhz_to_config, | ||||
| libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_cpu_freq_set_config, | ||||
| libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_cpu_freq_to_8m, | ||||
| libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_cpu_freq_to_pll_mhz, | ||||
| libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_cpu_freq_set_xtal, | ||||
| libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_xtal_freq_get, | ||||
| libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_cpu_freq_to_xtal, | ||||
| libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_bbpll_disable, | ||||
| libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_apb_freq_update, | ||||
| libesp_hw_support.a,rtc_clk.c.obj,clk_ll_rtc_slow_get_src,FALSE | ||||
| libesp_hw_support.a,rtc_init.c.obj,rtc_vddsdio_set_config, | ||||
| libesp_hw_support.a,rtc_module.c.obj,rtc_isr, | ||||
| libesp_hw_support.a,rtc_module.c.obj,rtc_isr_noniram_disable, | ||||
| libesp_hw_support.a,rtc_module.c.obj,rtc_isr_noniram_enable, | ||||
| libesp_hw_support.a,rtc_sleep.c.obj,rtc_sleep_pu, | ||||
| libesp_hw_support.a,rtc_sleep.c.obj,rtc_sleep_finish, | ||||
| libesp_hw_support.a,rtc_sleep.c.obj,rtc_sleep_get_default_config, | ||||
| libesp_hw_support.a,rtc_sleep.c.obj,rtc_sleep_init, | ||||
| libesp_hw_support.a,rtc_sleep.c.obj,rtc_sleep_low_init, | ||||
| libesp_hw_support.a,rtc_sleep.c.obj,rtc_sleep_start, | ||||
| libesp_hw_support.a,rtc_time.c.obj,rtc_clk_cal, | ||||
| libesp_hw_support.a,rtc_time.c.obj,rtc_clk_cal_internal, | ||||
| libesp_hw_support.a,rtc_time.c.obj,rtc_time_get, | ||||
| libesp_hw_support.a,rtc_time.c.obj,rtc_time_us_to_slowclk, | ||||
| libesp_hw_support.a,rtc_time.c.obj,rtc_time_slowclk_to_us, | ||||
| libesp_hw_support.a,sleep_modes.c.obj,periph_ll_periph_enabled, | ||||
| libesp_hw_support.a,sleep_modes.c.obj,flush_uarts, | ||||
| libesp_hw_support.a,sleep_modes.c.obj,suspend_uarts, | ||||
| libesp_hw_support.a,sleep_modes.c.obj,resume_uarts, | ||||
| libesp_hw_support.a,sleep_modes.c.obj,esp_sleep_start, | ||||
| libesp_hw_support.a,sleep_modes.c.obj,esp_deep_sleep_start, | ||||
| libesp_hw_support.a,sleep_modes.c.obj,esp_light_sleep_inner, | ||||
| libesp_phy.a,phy_init.c.obj,esp_phy_common_clock_enable, | ||||
| libesp_phy.a,phy_init.c.obj,esp_phy_common_clock_disable, | ||||
| libesp_phy.a,phy_init.c.obj,esp_wifi_bt_power_domain_on, | ||||
| libesp_phy.a,phy_override.c.obj,phy_i2c_enter_critical, | ||||
| libesp_phy.a,phy_override.c.obj,phy_i2c_exit_critical, | ||||
| libesp_pm.a,pm_locks.c.obj,esp_pm_lock_acquire, | ||||
| libesp_pm.a,pm_locks.c.obj,esp_pm_lock_release, | ||||
| libesp_pm.a,pm_impl.c.obj,get_lowest_allowed_mode, | ||||
| libesp_pm.a,pm_impl.c.obj,esp_pm_impl_switch_mode, | ||||
| libesp_pm.a,pm_impl.c.obj,on_freq_update, | ||||
| libesp_pm.a,pm_impl.c.obj,vApplicationSleep,CONFIG_FREERTOS_USE_TICKLESS_IDLE | ||||
| libesp_pm.a,pm_impl.c.obj,do_switch, | ||||
| libesp_ringbuf.a,ringbuf.c.obj,prvCheckItemAvail, | ||||
| libesp_ringbuf.a,ringbuf.c.obj,prvGetFreeSize, | ||||
| libesp_ringbuf.a,ringbuf.c.obj,prvReceiveGenericFromISR, | ||||
| libesp_ringbuf.a,ringbuf.c.obj,xRingbufferGetMaxItemSize, | ||||
| libesp_rom.a,esp_rom_systimer.c.obj,systimer_hal_init, | ||||
| libesp_rom.a,esp_rom_systimer.c.obj,systimer_hal_set_alarm_period, | ||||
| libesp_rom.a,esp_rom_systimer.c.obj,systimer_hal_set_alarm_target, | ||||
| libesp_rom.a,esp_rom_systimer.c.obj,systimer_hal_set_tick_rate_ops, | ||||
| libesp_rom.a,esp_rom_uart.c.obj,esp_rom_uart_set_clock_baudrate, | ||||
| libesp_system.a,brownout.c.obj,rtc_brownout_isr_handler, | ||||
| libesp_system.a,cache_err_int.c.obj,esp_cache_err_get_cpuid, | ||||
| libesp_system.a,cpu_start.c.obj,call_start_cpu0, | ||||
| libesp_system.a,crosscore_int.c.obj,esp_crosscore_int_send, | ||||
| libesp_system.a,crosscore_int.c.obj,esp_crosscore_int_send_yield, | ||||
| libesp_system.a,esp_system.c.obj,esp_restart, | ||||
| libesp_system.a,esp_system.c.obj,esp_system_abort, | ||||
| libesp_system.a,reset_reason.c.obj,esp_reset_reason_set_hint, | ||||
| libesp_system.a,reset_reason.c.obj,esp_reset_reason_get_hint, | ||||
| libesp_system.a,ubsan.c.obj,__ubsan_include, | ||||
| libesp_timer.a,esp_timer.c.obj,esp_timer_get_next_alarm_for_wake_up, | ||||
| libesp_timer.a,esp_timer.c.obj,timer_list_unlock,!CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD | ||||
| libesp_timer.a,esp_timer.c.obj,timer_list_lock,!CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD | ||||
| libesp_timer.a,esp_timer.c.obj,timer_armed, | ||||
| libesp_timer.a,esp_timer.c.obj,timer_remove, | ||||
| libesp_timer.a,esp_timer.c.obj,timer_insert,!CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD | ||||
| libesp_timer.a,esp_timer.c.obj,esp_timer_start_once, | ||||
| libesp_timer.a,esp_timer.c.obj,esp_timer_start_periodic, | ||||
| libesp_timer.a,esp_timer.c.obj,esp_timer_stop, | ||||
| libesp_timer.a,esp_timer.c.obj,esp_timer_get_expiry_time, | ||||
| libesp_timer.a,esp_timer_impl_systimer.c.obj,esp_timer_impl_get_time,!CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD | ||||
| libesp_timer.a,esp_timer_impl_systimer.c.obj,esp_timer_impl_set_alarm_id,!CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD | ||||
| libesp_timer.a,esp_timer_impl_systimer.c.obj,esp_timer_impl_update_apb_freq, | ||||
| libesp_timer.a,esp_timer_impl_systimer.c.obj,esp_timer_impl_get_min_period_us, | ||||
| libesp_timer.a,ets_timer_legacy.c.obj,timer_initialized, | ||||
| libesp_timer.a,ets_timer_legacy.c.obj,ets_timer_arm_us, | ||||
| libesp_timer.a,ets_timer_legacy.c.obj,ets_timer_arm, | ||||
| libesp_timer.a,ets_timer_legacy.c.obj,ets_timer_disarm, | ||||
| libesp_timer.a,system_time.c.obj,esp_system_get_time, | ||||
| libesp_wifi.a,esp_adapter.c.obj,semphr_take_from_isr_wrapper, | ||||
| libesp_wifi.a,esp_adapter.c.obj,wifi_realloc, | ||||
| libesp_wifi.a,esp_adapter.c.obj,coex_event_duration_get_wrapper, | ||||
| libesp_wifi.a,esp_adapter.c.obj,coex_schm_interval_set_wrapper, | ||||
| libesp_wifi.a,esp_adapter.c.obj,esp_empty_wrapper, | ||||
| libesp_wifi.a,esp_adapter.c.obj,wifi_calloc, | ||||
| libesp_wifi.a,esp_adapter.c.obj,wifi_zalloc_wrapper, | ||||
| libesp_wifi.a,esp_adapter.c.obj,env_is_chip_wrapper, | ||||
| libesp_wifi.a,esp_adapter.c.obj,is_from_isr_wrapper, | ||||
| libesp_wifi.a,esp_adapter.c.obj,semphr_give_from_isr_wrapper, | ||||
| libesp_wifi.a,esp_adapter.c.obj,mutex_lock_wrapper, | ||||
| libesp_wifi.a,esp_adapter.c.obj,mutex_unlock_wrapper, | ||||
| libesp_wifi.a,esp_adapter.c.obj,task_ms_to_tick_wrapper, | ||||
| libesp_wifi.a,esp_adapter.c.obj,wifi_apb80m_request_wrapper, | ||||
| libesp_wifi.a,esp_adapter.c.obj,wifi_apb80m_release_wrapper, | ||||
| libesp_wifi.a,esp_adapter.c.obj,timer_arm_wrapper, | ||||
| libesp_wifi.a,esp_adapter.c.obj,wifi_malloc, | ||||
| libesp_wifi.a,esp_adapter.c.obj,timer_disarm_wrapper, | ||||
| libesp_wifi.a,esp_adapter.c.obj,timer_arm_us_wrapper, | ||||
| libesp_wifi.a,esp_adapter.c.obj,wifi_rtc_enable_iso_wrapper, | ||||
| libesp_wifi.a,esp_adapter.c.obj,wifi_rtc_disable_iso_wrapper, | ||||
| libesp_wifi.a,esp_adapter.c.obj,malloc_internal_wrapper, | ||||
| libesp_wifi.a,esp_adapter.c.obj,realloc_internal_wrapper, | ||||
| libesp_wifi.a,esp_adapter.c.obj,calloc_internal_wrapper, | ||||
| libesp_wifi.a,esp_adapter.c.obj,zalloc_internal_wrapper, | ||||
| libesp_wifi.a,esp_adapter.c.obj,coex_status_get_wrapper, | ||||
| libesp_wifi.a,esp_adapter.c.obj,coex_wifi_release_wrapper, | ||||
| libfreertos.a,list.c.obj,uxListRemove,FALSE | ||||
| libfreertos.a,list.c.obj,vListInitialise,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH | ||||
| libfreertos.a,list.c.obj,vListInitialiseItem,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH | ||||
| libfreertos.a,list.c.obj,vListInsert,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH | ||||
| libfreertos.a,list.c.obj,vListInsertEnd,FALSE | ||||
| libfreertos.a,port.c.obj,vApplicationStackOverflowHook,FALSE | ||||
| libfreertos.a,port.c.obj,vPortYieldOtherCore,FALSE | ||||
| libfreertos.a,port.c.obj,vPortYield, | ||||
| libfreertos.a,port_common.c.obj,xPortcheckValidStackMem, | ||||
| libfreertos.a,port_common.c.obj,vApplicationGetTimerTaskMemory, | ||||
| libfreertos.a,port_common.c.obj,esp_startup_start_app_common, | ||||
| libfreertos.a,port_common.c.obj,xPortCheckValidTCBMem, | ||||
| libfreertos.a,port_common.c.obj,vApplicationGetIdleTaskMemory, | ||||
| libfreertos.a,port_systick.c.obj,vPortSetupTimer, | ||||
| libfreertos.a,port_systick.c.obj,xPortSysTickHandler,FALSE | ||||
| libfreertos.a,queue.c.obj,prvCopyDataFromQueue, | ||||
| libfreertos.a,queue.c.obj,prvGetDisinheritPriorityAfterTimeout, | ||||
| libfreertos.a,queue.c.obj,prvIsQueueEmpty, | ||||
| libfreertos.a,queue.c.obj,prvNotifyQueueSetContainer, | ||||
| libfreertos.a,queue.c.obj,xQueueReceive, | ||||
| libfreertos.a,queue.c.obj,prvUnlockQueue, | ||||
| libfreertos.a,queue.c.obj,xQueueSemaphoreTake, | ||||
| libfreertos.a,queue.c.obj,xQueueReceiveFromISR, | ||||
| libfreertos.a,queue.c.obj,uxQueueMessagesWaitingFromISR, | ||||
| libfreertos.a,queue.c.obj,xQueueIsQueueEmptyFromISR, | ||||
| libfreertos.a,queue.c.obj,xQueueGiveFromISR, | ||||
| libfreertos.a,tasks.c.obj,__getreent,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH | ||||
| libfreertos.a,tasks.c.obj,pcTaskGetName,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH | ||||
| libfreertos.a,tasks.c.obj,prvAddCurrentTaskToDelayedList,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH | ||||
| libfreertos.a,tasks.c.obj,prvDeleteTLS,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH | ||||
| libfreertos.a,tasks.c.obj,pvTaskIncrementMutexHeldCount,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH | ||||
| libfreertos.a,tasks.c.obj,taskSelectHighestPriorityTaskSMP,FALSE | ||||
| libfreertos.a,tasks.c.obj,taskYIELD_OTHER_CORE,FALSE | ||||
| libfreertos.a,tasks.c.obj,vTaskGetSnapshot,CONFIG_FREERTOS_PLACE_SNAPSHOT_FUNS_INTO_FLASH | ||||
| libfreertos.a,tasks.c.obj,vTaskInternalSetTimeOutState,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH | ||||
| libfreertos.a,tasks.c.obj,vTaskPlaceOnEventList,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH | ||||
| libfreertos.a,tasks.c.obj,vTaskPlaceOnEventListRestricted,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH | ||||
| libfreertos.a,tasks.c.obj,vTaskPlaceOnUnorderedEventList,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH | ||||
| libfreertos.a,tasks.c.obj,vTaskPriorityDisinheritAfterTimeout,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH | ||||
| libfreertos.a,tasks.c.obj,vTaskReleaseEventListLock,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH | ||||
| libfreertos.a,tasks.c.obj,vTaskTakeEventListLock,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH | ||||
| libfreertos.a,tasks.c.obj,xTaskCheckForTimeOut,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH | ||||
| libfreertos.a,tasks.c.obj,xTaskGetCurrentTaskHandle,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH | ||||
| libfreertos.a,tasks.c.obj,xTaskGetSchedulerState,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH | ||||
| libfreertos.a,tasks.c.obj,xTaskGetTickCount,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH | ||||
| libfreertos.a,tasks.c.obj,xTaskPriorityDisinherit,FALSE | ||||
| libfreertos.a,tasks.c.obj,xTaskPriorityInherit,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH | ||||
| libfreertos.a,tasks.c.obj,prvGetExpectedIdleTime,FALSE | ||||
| libfreertos.a,tasks.c.obj,vTaskStepTick,FALSE | ||||
| libhal.a,brownout_hal.c.obj,brownout_hal_intr_clear, | ||||
| libhal.a,efuse_hal.c.obj,efuse_hal_chip_revision, | ||||
| libhal.a,efuse_hal.c.obj,efuse_hal_get_major_chip_version, | ||||
| libhal.a,efuse_hal.c.obj,efuse_hal_get_minor_chip_version, | ||||
| libheap.a,heap_caps.c.obj,dram_alloc_to_iram_addr, | ||||
| libheap.a,heap_caps.c.obj,heap_caps_free, | ||||
| libheap.a,heap_caps.c.obj,heap_caps_realloc_base, | ||||
| libheap.a,heap_caps.c.obj,heap_caps_realloc, | ||||
| libheap.a,heap_caps.c.obj,heap_caps_calloc_base, | ||||
| libheap.a,heap_caps.c.obj,heap_caps_calloc, | ||||
| libheap.a,heap_caps.c.obj,heap_caps_malloc_base, | ||||
| libheap.a,heap_caps.c.obj,heap_caps_malloc, | ||||
| libheap.a,heap_caps.c.obj,heap_caps_malloc_default, | ||||
| libheap.a,heap_caps.c.obj,heap_caps_realloc_default, | ||||
| libheap.a,heap_caps.c.obj,find_containing_heap, | ||||
| libheap.a,multi_heap.c.obj,_multi_heap_lock, | ||||
| libheap.a,multi_heap.c.obj,multi_heap_in_rom_init, | ||||
| liblog.a,log_freertos.c.obj,esp_log_timestamp, | ||||
| liblog.a,log_freertos.c.obj,esp_log_impl_lock, | ||||
| liblog.a,log_freertos.c.obj,esp_log_impl_unlock, | ||||
| liblog.a,log_freertos.c.obj,esp_log_impl_lock_timeout, | ||||
| liblog.a,log_freertos.c.obj,esp_log_early_timestamp, | ||||
| liblog.a,log.c.obj,esp_log_write, | ||||
| libmbedcrypto.a,esp_mem.c.obj,esp_mbedtls_mem_calloc,!CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC | ||||
| libmbedcrypto.a,esp_mem.c.obj,esp_mbedtls_mem_free,!CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC | ||||
| libnewlib.a,assert.c.obj,__assert_func, | ||||
| libnewlib.a,assert.c.obj,newlib_include_assert_impl, | ||||
| libnewlib.a,heap.c.obj,_calloc_r, | ||||
| libnewlib.a,heap.c.obj,_free_r, | ||||
| libnewlib.a,heap.c.obj,_malloc_r, | ||||
| libnewlib.a,heap.c.obj,_realloc_r, | ||||
| libnewlib.a,heap.c.obj,calloc, | ||||
| libnewlib.a,heap.c.obj,cfree, | ||||
| libnewlib.a,heap.c.obj,free, | ||||
| libnewlib.a,heap.c.obj,malloc, | ||||
| libnewlib.a,heap.c.obj,newlib_include_heap_impl, | ||||
| libnewlib.a,heap.c.obj,realloc, | ||||
| libnewlib.a,locks.c.obj,_lock_try_acquire_recursive, | ||||
| libnewlib.a,locks.c.obj,lock_release_generic, | ||||
| libnewlib.a,locks.c.obj,_lock_release, | ||||
| libnewlib.a,locks.c.obj,_lock_release_recursive, | ||||
| libnewlib.a,locks.c.obj,__retarget_lock_init, | ||||
| libnewlib.a,locks.c.obj,__retarget_lock_init_recursive, | ||||
| libnewlib.a,locks.c.obj,__retarget_lock_close, | ||||
| libnewlib.a,locks.c.obj,__retarget_lock_close_recursive, | ||||
| libnewlib.a,locks.c.obj,check_lock_nonzero, | ||||
| libnewlib.a,locks.c.obj,__retarget_lock_acquire, | ||||
| libnewlib.a,locks.c.obj,lock_init_generic, | ||||
| libnewlib.a,locks.c.obj,__retarget_lock_acquire_recursive, | ||||
| libnewlib.a,locks.c.obj,__retarget_lock_try_acquire, | ||||
| libnewlib.a,locks.c.obj,__retarget_lock_try_acquire_recursive, | ||||
| libnewlib.a,locks.c.obj,__retarget_lock_release, | ||||
| libnewlib.a,locks.c.obj,__retarget_lock_release_recursive, | ||||
| libnewlib.a,locks.c.obj,_lock_close, | ||||
| libnewlib.a,locks.c.obj,lock_acquire_generic, | ||||
| libnewlib.a,locks.c.obj,_lock_acquire, | ||||
| libnewlib.a,locks.c.obj,_lock_acquire_recursive, | ||||
| libnewlib.a,locks.c.obj,_lock_try_acquire, | ||||
| libnewlib.a,reent_init.c.obj,esp_reent_init, | ||||
| libnewlib.a,time.c.obj,_times_r, | ||||
| libnewlib.a,time.c.obj,_gettimeofday_r, | ||||
| libpp.a,pp_debug.o,wifi_gpio_debug, | ||||
| libpthread.a,pthread.c.obj,pthread_mutex_lock_internal, | ||||
| libpthread.a,pthread.c.obj,pthread_mutex_lock, | ||||
| libpthread.a,pthread.c.obj,pthread_mutex_unlock, | ||||
| libriscv.a,interrupt.c.obj,intr_handler_get, | ||||
| libriscv.a,interrupt.c.obj,intr_handler_set, | ||||
| libriscv.a,interrupt.c.obj,intr_matrix_route, | ||||
| libspi_flash.a,flash_brownout_hook.c.obj,spi_flash_needs_reset_check,FALSE | ||||
| libspi_flash.a,flash_brownout_hook.c.obj,spi_flash_set_erasing_flag,FALSE | ||||
| libspi_flash.a,flash_ops.c.obj,spi_flash_guard_set,CONFIG_SPI_FLASH_ROM_IMPL | ||||
| libspi_flash.a,flash_ops.c.obj,spi_flash_malloc_internal,CONFIG_SPI_FLASH_ROM_IMPL | ||||
| libspi_flash.a,flash_ops.c.obj,spi_flash_rom_impl_init,CONFIG_SPI_FLASH_ROM_IMPL | ||||
| libspi_flash.a,flash_ops.c.obj,esp_mspi_pin_init,CONFIG_SPI_FLASH_ROM_IMPL | ||||
| libspi_flash.a,flash_ops.c.obj,spi_flash_init_chip_state,CONFIG_SPI_FLASH_ROM_IMPL | ||||
| libspi_flash.a,spi_flash_os_func_app.c.obj,delay_us,CONFIG_SPI_FLASH_ROM_IMPL | ||||
| libspi_flash.a,spi_flash_os_func_app.c.obj,get_buffer_malloc,CONFIG_SPI_FLASH_ROM_IMPL | ||||
| libspi_flash.a,spi_flash_os_func_app.c.obj,release_buffer_malloc,CONFIG_SPI_FLASH_ROM_IMPL | ||||
| libspi_flash.a,spi_flash_os_func_app.c.obj,main_flash_region_protected,CONFIG_SPI_FLASH_ROM_IMPL | ||||
| libspi_flash.a,spi_flash_os_func_app.c.obj,main_flash_op_status,CONFIG_SPI_FLASH_ROM_IMPL | ||||
| libspi_flash.a,spi_flash_os_func_app.c.obj,spi1_flash_os_check_yield,CONFIG_SPI_FLASH_ROM_IMPL | ||||
| libspi_flash.a,spi_flash_os_func_app.c.obj,spi1_flash_os_yield,CONFIG_SPI_FLASH_ROM_IMPL | ||||
| libspi_flash.a,spi_flash_os_func_noos.c.obj,start,CONFIG_SPI_FLASH_ROM_IMPL | ||||
| libspi_flash.a,spi_flash_os_func_noos.c.obj,end,CONFIG_SPI_FLASH_ROM_IMPL | ||||
| libspi_flash.a,spi_flash_os_func_noos.c.obj,delay_us,CONFIG_SPI_FLASH_ROM_IMPL | ||||
| 
 | 
| @@ -0,0 +1,24 @@ | ||||
| library,path | ||||
| libble_app.a,$IDF_PATH/components/bt/controller/lib_esp32c2/esp32c2-bt-lib/libble_app.a | ||||
| libpp.a,$IDF_PATH/components/esp_wifi/lib/esp32c2/libpp.a | ||||
| libbootloader_support.a,./esp-idf/bootloader_support/libbootloader_support.a | ||||
| libbt.a,./esp-idf/bt/libbt.a | ||||
| libdriver.a,./esp-idf/driver/libdriver.a | ||||
| libesp_app_format.a,./esp-idf/esp_app_format/libesp_app_format.a | ||||
| libesp_hw_support.a,./esp-idf/esp_hw_support/libesp_hw_support.a | ||||
| libesp_phy.a,./esp-idf/esp_phy/libesp_phy.a | ||||
| libesp_pm.a,./esp-idf/esp_pm/libesp_pm.a | ||||
| libesp_ringbuf.a,./esp-idf/esp_ringbuf/libesp_ringbuf.a | ||||
| libesp_rom.a,./esp-idf/esp_rom/libesp_rom.a | ||||
| libesp_system.a,./esp-idf/esp_system/libesp_system.a | ||||
| libesp_timer.a,./esp-idf/esp_timer/libesp_timer.a | ||||
| libesp_wifi.a,./esp-idf/esp_wifi/libesp_wifi.a | ||||
| libfreertos.a,./esp-idf/freertos/libfreertos.a | ||||
| libhal.a,./esp-idf/hal/libhal.a | ||||
| libheap.a,./esp-idf/heap/libheap.a | ||||
| liblog.a,./esp-idf/log/liblog.a | ||||
| libmbedcrypto.a,./esp-idf/mbedtls/mbedtls/library/libmbedcrypto.a | ||||
| libnewlib.a,./esp-idf/newlib/libnewlib.a | ||||
| libpthread.a,./esp-idf/pthread/libpthread.a | ||||
| libriscv.a,./esp-idf/riscv/libriscv.a | ||||
| libspi_flash.a,./esp-idf/spi_flash/libspi_flash.a | ||||
| 
 | 
| @@ -0,0 +1,66 @@ | ||||
| library,object,path | ||||
| libbootloader_support.a,bootloader_flash.c.obj,esp-idf/bootloader_support/CMakeFiles/__idf_bootloader_support.dir/bootloader_flash/src/bootloader_flash.c.obj | ||||
| libbootloader_support.a,flash_encrypt.c.obj,esp-idf/bootloader_support/CMakeFiles/__idf_bootloader_support.dir/src/flash_encrypt.c.obj | ||||
| libbt.a,bt_osi_mem.c.obj,esp-idf/bt/CMakeFiles/__idf_bt.dir/porting/mem/bt_osi_mem.c.obj | ||||
| libbt.a,bt.c.obj,esp-idf/bt/CMakeFiles/__idf_bt.dir/controller/esp32c2/bt.c.obj | ||||
| libbt.a,npl_os_freertos.c.obj,esp-idf/bt/CMakeFiles/__idf_bt.dir/porting/npl/freertos/src/npl_os_freertos.c.obj | ||||
| libbt.a,nimble_port.c.obj,esp-idf/bt/CMakeFiles/__idf_bt.dir/host/nimble/nimble/porting/nimble/src/nimble_port.c.obj | ||||
| libdriver.a,gpio.c.obj,esp-idf/driver/CMakeFiles/__idf_driver.dir/gpio/gpio.c.obj | ||||
| libesp_app_format.a,esp_app_desc.c.obj,esp-idf/esp_app_format/CMakeFiles/__idf_esp_app_format.dir/esp_app_desc.c.obj | ||||
| libesp_hw_support.a,cpu.c.obj,esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/cpu.c.obj | ||||
| libesp_hw_support.a,esp_clk.c.obj,esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/esp_clk.c.obj | ||||
| libesp_hw_support.a,esp_memory_utils.c.obj,esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/esp_memory_utils.c.obj | ||||
| libesp_hw_support.a,hw_random.c.obj,esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/hw_random.c.obj | ||||
| libesp_hw_support.a,intr_alloc.c.obj,esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/intr_alloc.c.obj | ||||
| libesp_hw_support.a,periph_ctrl.c.obj,esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/periph_ctrl.c.obj | ||||
| libesp_hw_support.a,regi2c_ctrl.c.obj,esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/regi2c_ctrl.c.obj | ||||
| libesp_hw_support.a,rtc_clk.c.obj,esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/port/esp32c2/rtc_clk.c.obj | ||||
| libesp_hw_support.a,rtc_init.c.obj,esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/port/esp32c2/rtc_init.c.obj | ||||
| libesp_hw_support.a,rtc_module.c.obj,esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/rtc_module.c.obj | ||||
| libesp_hw_support.a,rtc_sleep.c.obj,esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/port/esp32c2/rtc_sleep.c.obj | ||||
| libesp_hw_support.a,rtc_time.c.obj,esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/port/esp32c2/rtc_time.c.obj | ||||
| libesp_hw_support.a,sleep_modes.c.obj,esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/sleep_modes.c.obj | ||||
| libesp_phy.a,phy_init.c.obj,esp-idf/esp_phy/CMakeFiles/__idf_esp_phy.dir/src/phy_init.c.obj | ||||
| libesp_phy.a,phy_override.c.obj,esp-idf/esp_phy/CMakeFiles/__idf_esp_phy.dir/src/phy_override.c.obj | ||||
| libesp_pm.a,pm_locks.c.obj,esp-idf/esp_pm/CMakeFiles/__idf_esp_pm.dir/pm_locks.c.obj | ||||
| libesp_pm.a,pm_impl.c.obj,esp-idf/esp_pm/CMakeFiles/__idf_esp_pm.dir/pm_impl.c.obj | ||||
| libesp_ringbuf.a,ringbuf.c.obj,esp-idf/esp_ringbuf/CMakeFiles/__idf_esp_ringbuf.dir/ringbuf.c.obj | ||||
| libesp_rom.a,esp_rom_systimer.c.obj,esp-idf/esp_rom/CMakeFiles/__idf_esp_rom.dir/patches/esp_rom_systimer.c.obj | ||||
| libesp_rom.a,esp_rom_uart.c.obj,esp-idf/esp_rom/CMakeFiles/__idf_esp_rom.dir/patches/esp_rom_uart.c.obj | ||||
| libesp_system.a,brownout.c.obj,esp-idf/esp_system/CMakeFiles/__idf_esp_system.dir/port/brownout.c.obj | ||||
| libesp_system.a,cache_err_int.c.obj,esp-idf/esp_system/CMakeFiles/__idf_esp_system.dir/port/soc/esp32c2/cache_err_int.c.obj | ||||
| libesp_system.a,cpu_start.c.obj,esp-idf/esp_system/CMakeFiles/__idf_esp_system.dir/port/cpu_start.c.obj | ||||
| libesp_system.a,crosscore_int.c.obj,esp-idf/esp_system/CMakeFiles/__idf_esp_system.dir/crosscore_int.c.obj | ||||
| libesp_system.a,esp_system.c.obj,esp-idf/esp_system/CMakeFiles/__idf_esp_system.dir/esp_system.c.obj | ||||
| libesp_system.a,reset_reason.c.obj,esp-idf/esp_system/CMakeFiles/__idf_esp_system.dir/port/soc/esp32c2/reset_reason.c.obj | ||||
| libesp_system.a,ubsan.c.obj,esp-idf/esp_system/CMakeFiles/__idf_esp_system.dir/ubsan.c.obj | ||||
| libesp_timer.a,esp_timer.c.obj,esp-idf/esp_timer/CMakeFiles/__idf_esp_timer.dir/src/esp_timer.c.obj | ||||
| libesp_timer.a,esp_timer_impl_systimer.c.obj,esp-idf/esp_timer/CMakeFiles/__idf_esp_timer.dir/src/esp_timer_impl_systimer.c.obj | ||||
| libesp_timer.a,ets_timer_legacy.c.obj,esp-idf/esp_timer/CMakeFiles/__idf_esp_timer.dir/src/ets_timer_legacy.c.obj | ||||
| libesp_timer.a,system_time.c.obj,esp-idf/esp_timer/CMakeFiles/__idf_esp_timer.dir/src/system_time.c.obj | ||||
| libesp_wifi.a,esp_adapter.c.obj,esp-idf/esp_wifi/CMakeFiles/__idf_esp_wifi.dir/esp32c2/esp_adapter.c.obj | ||||
| libfreertos.a,list.c.obj,esp-idf/freertos/CMakeFiles/__idf_freertos.dir/FreeRTOS-Kernel/list.c.obj | ||||
| libfreertos.a,port.c.obj,esp-idf/freertos/CMakeFiles/__idf_freertos.dir/FreeRTOS-Kernel/portable/riscv/port.c.obj | ||||
| libfreertos.a,port_common.c.obj,esp-idf/freertos/CMakeFiles/__idf_freertos.dir/FreeRTOS-Kernel/portable/port_common.c.obj | ||||
| libfreertos.a,port_systick.c.obj,esp-idf/freertos/CMakeFiles/__idf_freertos.dir/FreeRTOS-Kernel/portable/port_systick.c.obj | ||||
| libfreertos.a,queue.c.obj,esp-idf/freertos/CMakeFiles/__idf_freertos.dir/FreeRTOS-Kernel/queue.c.obj | ||||
| libfreertos.a,tasks.c.obj,esp-idf/freertos/CMakeFiles/__idf_freertos.dir/FreeRTOS-Kernel/tasks.c.obj | ||||
| libhal.a,brownout_hal.c.obj,esp-idf/hal/CMakeFiles/__idf_hal.dir/esp32c2/brownout_hal.c.obj | ||||
| libhal.a,efuse_hal.c.obj,esp-idf/hal/CMakeFiles/__idf_hal.dir/efuse_hal.c.obj | ||||
| libhal.a,efuse_hal.c.obj,esp-idf/hal/CMakeFiles/__idf_hal.dir/esp32c2/efuse_hal.c.obj | ||||
| libheap.a,heap_caps.c.obj,esp-idf/heap/CMakeFiles/__idf_heap.dir/heap_caps.c.obj | ||||
| libheap.a,multi_heap.c.obj,./esp-idf/heap/CMakeFiles/__idf_heap.dir/multi_heap.c.obj | ||||
| liblog.a,log_freertos.c.obj,esp-idf/log/CMakeFiles/__idf_log.dir/log_freertos.c.obj | ||||
| liblog.a,log.c.obj,esp-idf/log/CMakeFiles/__idf_log.dir/log.c.obj | ||||
| libmbedcrypto.a,esp_mem.c.obj,esp-idf/mbedtls/mbedtls/library/CMakeFiles/mbedcrypto.dir/$IDF_PATH/components/mbedtls/port/esp_mem.c.obj | ||||
| libnewlib.a,assert.c.obj,esp-idf/newlib/CMakeFiles/__idf_newlib.dir/assert.c.obj | ||||
| libnewlib.a,heap.c.obj,esp-idf/newlib/CMakeFiles/__idf_newlib.dir/heap.c.obj | ||||
| libnewlib.a,locks.c.obj,esp-idf/newlib/CMakeFiles/__idf_newlib.dir/locks.c.obj | ||||
| libnewlib.a,reent_init.c.obj,esp-idf/newlib/CMakeFiles/__idf_newlib.dir/reent_init.c.obj | ||||
| libnewlib.a,time.c.obj,esp-idf/newlib/CMakeFiles/__idf_newlib.dir/time.c.obj | ||||
| libpthread.a,pthread.c.obj,esp-idf/pthread/CMakeFiles/__idf_pthread.dir/pthread.c.obj | ||||
| libriscv.a,interrupt.c.obj,esp-idf/riscv/CMakeFiles/__idf_riscv.dir/interrupt.c.obj | ||||
| libspi_flash.a,flash_brownout_hook.c.obj,esp-idf/spi_flash/CMakeFiles/__idf_spi_flash.dir/flash_brownout_hook.c.obj | ||||
| libspi_flash.a,flash_ops.c.obj,esp-idf/spi_flash/CMakeFiles/__idf_spi_flash.dir/flash_ops.c.obj | ||||
| libspi_flash.a,spi_flash_os_func_app.c.obj,esp-idf/spi_flash/CMakeFiles/__idf_spi_flash.dir/spi_flash_os_func_app.c.obj | ||||
| libspi_flash.a,spi_flash_os_func_noos.c.obj,esp-idf/spi_flash/CMakeFiles/__idf_spi_flash.dir/spi_flash_os_func_noos.c.obj | ||||
| 
 | 
| @@ -0,0 +1,311 @@ | ||||
| #!/usr/bin/env python3 | ||||
| # | ||||
| # SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD | ||||
| # SPDX-License-Identifier: Apache-2.0 | ||||
|  | ||||
|  | ||||
| import logging | ||||
| import argparse | ||||
| import csv | ||||
| import os | ||||
| import subprocess | ||||
| import sys | ||||
| import re | ||||
| from io import StringIO | ||||
| import configuration | ||||
|  | ||||
| sys.path.append(os.environ['IDF_PATH'] + '/tools/ldgen') | ||||
| sys.path.append(os.environ['IDF_PATH'] + '/tools/ldgen/ldgen') | ||||
| from entity import EntityDB | ||||
|  | ||||
| espidf_objdump = None | ||||
|  | ||||
| def lib_secs(lib, file, lib_path): | ||||
|     new_env = os.environ.copy() | ||||
|     new_env['LC_ALL'] = 'C' | ||||
|     dump = StringIO(subprocess.check_output([espidf_objdump, '-h', lib_path], env=new_env).decode()) | ||||
|     dump.name = lib | ||||
|  | ||||
|     sections_infos = EntityDB() | ||||
|     sections_infos.add_sections_info(dump) | ||||
|  | ||||
|     secs = sections_infos.get_sections(lib, file.split('.')[0] + '.c') | ||||
|     if len(secs) == 0: | ||||
|         secs = sections_infos.get_sections(lib, file.split('.')[0]) | ||||
|         if len(secs) == 0: | ||||
|             raise ValueError('Failed to get sections from lib %s'%(lib_path)) | ||||
|      | ||||
|     return secs | ||||
|  | ||||
| def filter_secs(secs_a, secs_b): | ||||
|     new_secs = list() | ||||
|     for s_a in secs_a: | ||||
|         for s_b in secs_b: | ||||
|             if s_b in s_a: | ||||
|                 new_secs.append(s_a) | ||||
|     return new_secs | ||||
|  | ||||
| def strip_secs(secs_a, secs_b): | ||||
|     secs = list(set(secs_a) - set(secs_b)) | ||||
|     secs.sort() | ||||
|     return secs | ||||
|  | ||||
| def func2sect(func): | ||||
|     if ' ' in func: | ||||
|         func_l = func.split(' ') | ||||
|     else: | ||||
|         func_l = list() | ||||
|         func_l.append(func) | ||||
|      | ||||
|     secs = list() | ||||
|     for l in func_l: | ||||
|         if '.iram1.' not in l: | ||||
|             secs.append('.literal.%s'%(l,)) | ||||
|             secs.append('.text.%s'%(l, )) | ||||
|         else: | ||||
|             secs.append(l) | ||||
|     return secs | ||||
|  | ||||
| class filter_c: | ||||
|     def __init__(self, file): | ||||
|         lines = open(file).read().splitlines() | ||||
|         self.libs_desc = '' | ||||
|         self.libs = '' | ||||
|         for l in lines: | ||||
|             if ') .iram1 EXCLUDE_FILE(*' in l and ') .iram1.*)' in l: | ||||
|                 desc = '\(EXCLUDE_FILE\((.*)\) .iram1 ' | ||||
|                 self.libs_desc = re.search(desc, l)[1] | ||||
|                 self.libs = self.libs_desc.replace('*', '') | ||||
|                 return | ||||
|      | ||||
|     def match(self, lib): | ||||
|         if lib in self.libs: | ||||
|             print('Remove lib %s'%(lib)) | ||||
|             return True | ||||
|         return False | ||||
|      | ||||
|     def add(self): | ||||
|         return self.libs_desc | ||||
|  | ||||
| class target_c: | ||||
|     def __init__(self, lib, lib_path, file, fsecs): | ||||
|         self.lib   = lib | ||||
|         self.file  = file | ||||
|  | ||||
|         self.lib_path  = lib_path | ||||
|         self.fsecs = func2sect(fsecs) | ||||
|         self.desc  = '*%s:%s.*'%(lib, file.split('.')[0]) | ||||
|  | ||||
|         secs = lib_secs(lib, file, lib_path) | ||||
|         if '.iram1.' in self.fsecs[0]: | ||||
|             self.secs = filter_secs(secs, ('.iram1.', )) | ||||
|         else: | ||||
|             self.secs = filter_secs(secs, ('.iram1.', '.text.', '.literal.')) | ||||
|         self.isecs = strip_secs(self.secs, self.fsecs) | ||||
|  | ||||
|     def __str__(self): | ||||
|         s = 'lib=%s\nfile=%s\lib_path=%s\ndesc=%s\nsecs=%s\nfsecs=%s\nisecs=%s\n'%(\ | ||||
|             self.lib, self.file, self.lib_path, self.desc, self.secs, self.fsecs,\ | ||||
|             self.isecs) | ||||
|         return s | ||||
|  | ||||
| class relink_c: | ||||
|     def __init__(self, input, library_file, object_file, function_file, sdkconfig_file, missing_function_info): | ||||
|         self.filter = filter_c(input) | ||||
|          | ||||
|         libraries = configuration.generator(library_file, object_file, function_file, sdkconfig_file, missing_function_info, espidf_objdump) | ||||
|         self.targets = list() | ||||
|         for i in libraries.libs: | ||||
|             lib = libraries.libs[i] | ||||
|  | ||||
|             if self.filter.match(lib.name): | ||||
|                 continue | ||||
|  | ||||
|             for j in lib.objs: | ||||
|                 obj = lib.objs[j] | ||||
|                 self.targets.append(target_c(lib.name, lib.path, obj.name, | ||||
|                                              ' '.join(obj.sections()))) | ||||
|         # for i in self.targets: | ||||
|         #     print(i) | ||||
|         self.__transform__() | ||||
|  | ||||
|     def __transform__(self): | ||||
|         iram1_exclude = list() | ||||
|         iram1_include = list() | ||||
|         flash_include = list() | ||||
|  | ||||
|         for t in self.targets: | ||||
|             secs = filter_secs(t.fsecs, ('.iram1.', )) | ||||
|             if len(secs) > 0: | ||||
|                 iram1_exclude.append(t.desc) | ||||
|  | ||||
|             secs = filter_secs(t.isecs, ('.iram1.', )) | ||||
|             if len(secs) > 0: | ||||
|                 iram1_include.append('    %s(%s)'%(t.desc, ' '.join(secs))) | ||||
|  | ||||
|             secs = t.fsecs | ||||
|             if len(secs) > 0: | ||||
|                 flash_include.append('    %s(%s)'%(t.desc, ' '.join(secs))) | ||||
|  | ||||
|         self.iram1_exclude = '    *(EXCLUDE_FILE(%s %s) .iram1.*) *(EXCLUDE_FILE(%s %s) .iram1)' % \ | ||||
|                              (self.filter.add(), ' '.join(iram1_exclude), \ | ||||
|                               self.filter.add(), ' '.join(iram1_exclude)) | ||||
|         self.iram1_include = '\n'.join(iram1_include) | ||||
|         self.flash_include = '\n'.join(flash_include) | ||||
|  | ||||
|         logging.debug('IRAM1 Exclude: %s'%(self.iram1_exclude)) | ||||
|         logging.debug('IRAM1 Include: %s'%(self.iram1_include)) | ||||
|         logging.debug('Flash Include: %s'%(self.flash_include)) | ||||
|  | ||||
|     def __replace__(self, lines): | ||||
|         def is_iram_desc(l): | ||||
|             if '*(.iram1 .iram1.*)' in l or (') .iram1 EXCLUDE_FILE(*' in l and ') .iram1.*)' in l): | ||||
|                 return True | ||||
|             return False | ||||
|  | ||||
|         iram_start = False | ||||
|         flash_done = False | ||||
|  | ||||
|         for i in range(0, len(lines) - 1): | ||||
|             l = lines[i] | ||||
|             if '.iram0.text :' in l: | ||||
|                 logging.debug('start to process .iram0.text') | ||||
|                 iram_start = True | ||||
|             elif '.dram0.data :' in l: | ||||
|                 logging.debug('end to process .iram0.text') | ||||
|                 iram_start = False | ||||
|             elif is_iram_desc(l): | ||||
|                 if iram_start: | ||||
|                     lines[i] = '%s\n%s\n'%(self.iram1_exclude, self.iram1_include) | ||||
|             elif '(.stub .gnu.warning' in l: | ||||
|                 if not flash_done: | ||||
|                     lines[i] = '%s\n\n%s'%(self.flash_include, l) | ||||
|             elif self.flash_include in l: | ||||
|                 flash_done = True | ||||
|             else: | ||||
|                 if iram_start: | ||||
|                     new_l = self._replace_func(l) | ||||
|                     if new_l: | ||||
|                         lines[i] = new_l | ||||
|  | ||||
|         return lines | ||||
|  | ||||
|     def _replace_func(self, l): | ||||
|         for t in self.targets: | ||||
|             if t.desc in l: | ||||
|                 S = '.literal .literal.* .text .text.*' | ||||
|                 if S in l: | ||||
|                     if len(t.isecs) > 0: | ||||
|                         return l.replace(S, ' '.join(t.isecs)) | ||||
|                     else: | ||||
|                         return ' ' | ||||
|                  | ||||
|                 S = '%s(%s)'%(t.desc, ' '.join(t.fsecs)) | ||||
|                 if S in l: | ||||
|                     return ' ' | ||||
|  | ||||
|                 replaced = False | ||||
|                 for s in t.fsecs: | ||||
|                     s2 = s + ' ' | ||||
|                     if s2 in l: | ||||
|                         l = l.replace(s2, '') | ||||
|                         replaced = True | ||||
|                     s2 = s + ')' | ||||
|                     if s2 in l: | ||||
|                         l = l.replace(s2, ')') | ||||
|                         replaced = True | ||||
|                 if '( )' in l or '()' in l: | ||||
|                     return ' '  | ||||
|                 if replaced: | ||||
|                     return l | ||||
|             else: | ||||
|                 index = '*%s:(EXCLUDE_FILE'%(t.lib) | ||||
|                 if index in l and t.file.split('.')[0] not in l: | ||||
|                     for m in self.targets: | ||||
|                         index = '*%s:(EXCLUDE_FILE'%(m.lib) | ||||
|                         if index in l and m.file.split('.')[0] not in l: | ||||
|                             l = l.replace('EXCLUDE_FILE(', 'EXCLUDE_FILE(%s '%(m.desc)) | ||||
|                             if len(m.isecs) > 0: | ||||
|                                 l += '\n    %s(%s)'%(m.desc, ' '.join(m.isecs)) | ||||
|                     return l | ||||
|  | ||||
|         return False | ||||
|  | ||||
|     def save(self, input, output): | ||||
|         lines = open(input).read().splitlines() | ||||
|         lines = self.__replace__(lines) | ||||
|         open(output, 'w+').write('\n'.join(lines)) | ||||
|  | ||||
| def main(): | ||||
|     argparser = argparse.ArgumentParser(description='Relinker script generator') | ||||
|  | ||||
|     argparser.add_argument( | ||||
|         '--input', '-i', | ||||
|         help='Linker template file', | ||||
|         type=str) | ||||
|  | ||||
|     argparser.add_argument( | ||||
|         '--output', '-o', | ||||
|         help='Output linker script', | ||||
|         type=str) | ||||
|  | ||||
|     argparser.add_argument( | ||||
|         '--library', '-l', | ||||
|         help='Library description directory', | ||||
|         type=str) | ||||
|  | ||||
|     argparser.add_argument( | ||||
|         '--object', '-b', | ||||
|         help='Object description file', | ||||
|         type=str) | ||||
|  | ||||
|     argparser.add_argument( | ||||
|         '--function', '-f', | ||||
|         help='Function description file', | ||||
|         type=str) | ||||
|  | ||||
|     argparser.add_argument( | ||||
|         '--sdkconfig', '-s', | ||||
|         help='sdkconfig file', | ||||
|         type=str) | ||||
|  | ||||
|     argparser.add_argument( | ||||
|         '--objdump', '-g', | ||||
|         help='GCC objdump command', | ||||
|         type=str) | ||||
|      | ||||
|     argparser.add_argument( | ||||
|         '--debug', '-d', | ||||
|         help='Debug level(option is \'debug\')', | ||||
|         default='no', | ||||
|         type=str) | ||||
|      | ||||
|     argparser.add_argument( | ||||
|         '--missing_function_info', | ||||
|         help='Print error information instead of throwing exception when missing function', | ||||
|         default=False, | ||||
|         type=bool) | ||||
|  | ||||
|     args = argparser.parse_args() | ||||
|  | ||||
|     if args.debug == 'debug': | ||||
|         logging.basicConfig(level=logging.DEBUG) | ||||
|  | ||||
|     logging.debug('input:    %s'%(args.input)) | ||||
|     logging.debug('output:   %s'%(args.output)) | ||||
|     logging.debug('library:  %s'%(args.library)) | ||||
|     logging.debug('object:   %s'%(args.object)) | ||||
|     logging.debug('function: %s'%(args.function)) | ||||
|     logging.debug('sdkconfig:%s'%(args.sdkconfig)) | ||||
|     logging.debug('objdump:  %s'%(args.objdump)) | ||||
|     logging.debug('debug:    %s'%(args.debug)) | ||||
|     logging.debug('missing_function_info: %s'%(args.missing_function_info)) | ||||
|  | ||||
|     global espidf_objdump | ||||
|     espidf_objdump = args.objdump | ||||
|  | ||||
|     relink = relink_c(args.input, args.library, args.object, args.function, args.sdkconfig, args.missing_function_info) | ||||
|     relink.save(args.input, args.output) | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     main() | ||||
		Reference in New Issue
	
	Block a user