首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >警告:在ELF段之外的可加载部分"my_section“

警告:在ELF段之外的可加载部分"my_section“
EN

Stack Overflow用户
提问于 2018-03-27 08:47:23
回答 1查看 1.9K关注 0票数 3

我已经建立了一个axf (精灵)文件使用Arm编译器v6.9为Cortex-R4。但是,当我使用Arm MCU Eclipse链接GDB插件将其加载到目标时,它无法加载我的段的初始化数据。如果我使用分段臭氧和J加载axf,它将正确地加载init数据。

如果我在axf文件上运行arm-none-eabi-gdb.exe文件,我会得到“警告: ELF段之外的可加载部分”,用于我所有初始化的段。

查看图像,初始化数据应该在图像之后加载到区域$表$$Base中的表指定的地址。

如果我们与gcc联系在一起,我们就不会遇到这个问题,因为初始化数据的处理方式不同。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-21 00:02:13

我今天面临着同样的问题,也注意到了你所描述的同样的问题:

“查看图像,初始化数据应该在图像之后加载到区域$Base中的表指定的地址。”

看起来虽然非常相似,但由手臂链接生成的ELF文件与GCC生成的ELF文件似乎有一点不同。不管怎样,我找到了一个解决办法。

在检查我的main.elf时,我注意到臂链接器将初始化数据存储在ER_RW部分中:

代码语言:javascript
复制
arm-none-eabi-readelf.exe" -S main.elf 
   There are 16 section headers, starting at offset 0x122b0:
     Section Headers:
         [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
         [ 0]                   NULL            00000000 000000 000000 00      0   0  0
         [ 1] ER_RO             PROGBITS        20000000 000034 001358 00  AX  0   0  4
         [ 2] ER_RW             PROGBITS        20002000 00138c 0000cc 00  WA  0   0  4
         [ 3] ER_ZI             NOBITS          200020cc 001458 0004e8 00  WA  0   0  4
         [ 4] .debug_abbrev     PROGBITS        00000000 001458 0005c4 00      0   0  1
         [ 5] .debug_frame      PROGBITS        00000000 001a1c 000dc4 00      0   0  1
         ...

我注意到这个问题的发生是因为GDB在addr=0x20002000上加载了addr=0x20002000,但实际上,我需要在ER_RO部分之后加载它(即在addr=0x20001358)。

解决办法是:

使用fromelf将所有部分转储到二进制文件main.bin中。Fromelf将在ER_RW后面添加ER_RO,就像它应该的那样:

代码语言:javascript
复制
fromelf.exe --bin -o main.bin main.elf

2-使用objcopy将ER_RO部分的内容替换为来自main.bin的数据。请注意,我们现在可以删除ER_RW部分,因为它已经与ER_RO合并为main.bin:

代码语言:javascript
复制
arm-none-eabi-objcopy.exe main.elf --update-section ER_RO=main.bin --remove-section=ER_RW  main.gdb.elf

新的main.gdb.elf文件现在可以由arm-none-eabi-gdb.exe加载。

这就是它的样子:

代码语言:javascript
复制
arm-none-eabi-readelf.exe" -S main.gdb2.elf
   There are 15 section headers, starting at offset 0x11c0c:

   Section Headers:
       [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
       [ 0]                   NULL            00000000 000000 000000 00      0   0  0
       [ 1] ER_RO             PROGBITS        20000000 000054 001424 00  AX  0   0  4
       [ 2] ER_ZI             NOBITS          200020cc 000000 0004e8 00  WA  0   0  4
       [ 3] .debug_abbrev     PROGBITS        00000000 001478 0005c4 00      0   0  1
       ...

使用GDB调试愉快!!;-)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49508277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档