Trace32命令从ELF文件中读取符号内容

时间:2016-11-28 03:55:50

标签: elf debug-symbols readelf trace32 lauterbach

问题情景: 简单来说,我们是否有一个Trace32命令从加载到目标的ELF文件中读取符号(及其内容)?我们有这种特殊情况,其中ELF文件的特定于应用程序的调试符号是ELF中'.noload'部分的一部分,这意味着符号/内容是ELF文件的一部分(使用readelf -a xxxx读取时可用)。 elf_file_name)但不是生成的最终二进制图像的一部分,即ELF文件中的'.noload'部分在生成闪存到目标内存的xxx.bin时被剥离。

  • “.noload”部分中的调试符号是静态分配的值,这些值在运行时不会更改。
  • 当我尝试读取'.noload'部分的调试符号部分时(在编译成二进制文件并加载到Trace32之后),我看到trace32弹出窗口中标记'MMU fail',这意味着trace32正在尝试读取符号内容来自内存,但无法访问,因为'.noload'部分的符号部分根本没有加载,尽管它们已映射地址。

任何输入
- 我需要一个trace32命令的帮助,它可以直接读取ELF文件中的符号内容而不是目标内存 - 还不确定我是否可以在练习脚本中使用'readelf'?如果我们对上述查询没有任何解决方案,可以在这个方向提供任何帮助吗?

1 个答案:

答案 0 :(得分:7)

使用命令

Data.LOAD.Elf myfile.elf [<optional address offset>] /NoCODE

选项/ NoCODE指示TRACE32仅从您的ELF加载debgug符号,但不向目标加载任何代码。您可以使用命令sYmbol.Browse查看符号。

但是,如果您使用TRACE32将应用程序加载到目标,则不必先从ELF创建二进制文件。使用TRACE32,您还可以将ELF的PROGBITS部分直接加载到目标。 在这种情况下,您只需使用不带/ NoCODE选项的Data.LOAD.Elf命令(启用闪存编程后)。

由于您使用的是MMU,因此可能需要使用命令SYStem.Option.MMUSPACES ON激活逻辑内存空间ID。然后用

加载符号
Data.LOAD.Elf myfile.elf <space-ID>:<offset> /NoCODE

其中&#39; space-ID&#39;与MMU用于任务的空间ID匹配,并且&#39; offset&#39;通常为零。

如果您在嵌入式Linux上调试应用程序,则应使用适用于Linux的TRACE32操作系统感知和Linux符号自动加载程序将符号加载到正确的地址。

我认为没有任何理由可以使用“readelf”#re;来自TRACE32。无论如何,您可以使用命令OS.AreaOS.Command调用任何命令行程序。