symbol_analysis.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /*
  2. * Copyright lizhirui
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2021-05-18 lizhirui the first version
  9. * 2021-05-20 lizhirui add os debug support
  10. */
  11. #ifndef __SYMBOL_ANALYSIS_H__
  12. #define __SYMBOL_ANALYSIS_H__
  13. #include <rtthread.h>
  14. //osdebug节区头描述结构体
  15. typedef struct os_symtab_header
  16. {
  17. rt_size_t function_table_offset;//函数表的偏移地址(相对于节区起始地址,下同)
  18. rt_size_t function_table_num;//函数表中的符号数量
  19. rt_size_t object_table_offset;//对象表的偏移地址
  20. rt_size_t object_table_num;//对象表中的符号数量
  21. rt_size_t general_symbol_table_offset;//一般符号(指代类型虽为NONE但带有GLOBAL的符号)表的偏移地址
  22. rt_size_t general_symbol_table_num;//一般符号表中的符号数量
  23. rt_size_t string_table_offset;//字符串表的偏移地址
  24. rt_size_t string_table_size;//字符串表的大小(字节为单位)
  25. }os_symtab_header;
  26. //符号描述结构体
  27. typedef struct os_symtab_item
  28. {
  29. rt_size_t name_offset;//符号名称在字符串表中的偏移地址
  30. rt_size_t address;//该符号所代表的地址
  31. rt_size_t size;//该符号所代表的大小
  32. }os_symtab_item;
  33. os_symtab_item *find_symbol_table(rt_size_t symbol_table_addr,rt_size_t symbol_num,rt_size_t address);
  34. const char *get_symbol_name(os_symtab_item *symbol);
  35. void print_symbol(os_symtab_item *symbol,rt_size_t address);
  36. void print_symbol_info(rt_size_t address,rt_bool_t function);
  37. void print_stacktrace(rt_size_t epc,rt_size_t fp);
  38. #endif