gpt4 book ai didi

c - arm-none-eabi-ld : section . ARM.exidx 与 .data 部分重叠

转载 作者:行者123 更新时间:2023-12-02 20:12:57 24 4
gpt4 key购买 nike

我正在 Linux 上使用 TI Tiva 微 Controller (TM4C123GH6PM)、TivaWare(原 StellarisWare)和 GCC 4.8.2 (-14ubuntu1+6) 开发一个项目。

链接时我开始收到这些错误消息:

arm-none-eabi-ld: section .ARM.exidx loaded at [00000000000027d8,00000000000027df] overlaps section .data loaded at [00000000000027d7,00000000000027d8]

我已经做了很多谷歌搜索,但我发现似乎没有任何帮助。

  1. 我发现这个问题与同一主题有关,但我没有进行任何堆栈跟踪: When is .ARM.exidx is used

  2. 看来这一段主要是用来调试C++代码的。但我没有使用 C++ ...

  3. 我尝试使用 -h 转储所有目标文件以显示包含的部分。唯一包含 ARM.exidx 的文件是 libgcc.a。

  4. 错误出现时没有明显的模式(至少我能找到)。

例如在 main.c 中:

while( 1 ){
debug_getc()
uartA_getc()
}

产生该错误。同时

while( 1 ){
debug_getc();
//uartA_getc();
}

while( 1 ){
debug_getc();
//uartA_getc();
}

没有。 (这两个函数都在自己的目标文件中,但做类似的事情。这个错误不仅限于这两个。我在其他一些地方也遇到过它。)

我尝试添加

.ARM.exidx :                     
{
*(.ARM.exidx*)
*(.gnu.linkonce.armexidx.*)
} > SRAM

到我的链接器脚本。现在错误消息消失了,但我遇到了奇怪的崩溃。

有人可以告诉我发生了什么事吗?我感觉有什么根本性的错误,但我无法弄清楚它是什么。

** ======= 引用 =============== **:

linkerscript.ld:

MEMORY
{
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000
SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000
}

SECTIONS
{
.text :
{
_text = .;
KEEP(*(.isr_vector))
*(.text*)
*(.rodata*)
_etext = .;
} > FLASH

.data : AT(ADDR(.text) + SIZEOF(.text))
{
_data = .;
*(vtable)
*(.data*)
_edata = .;
} > SRAM

.bss :
{
_bss = .;
*(.bss*)
*(COMMON)
_ebss = .;
} > SRAM

/*
.ARM.exidx :
{
*(.ARM.exidx*)
*(.gnu.linkonce.armexidx.*)
} > SRAM
*/
}

用于构建的命令:(摘录)

arm-none-eabi-gcc -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections -std=gnu99 -Wall -pedantic -DPART_TM4C123GH6PM -c -Os -DTARGET_IS_TM4C129_RA1 -I. -I../tivalib -I../TivaWare -Dgcc -o../tivalib/weather/wind.o ../tivalib/weather/wind.c

arm-none-eabi-ld -T weatherlight.ld \
--entry ResetISR \
--gc-sections \
-o weatherlight.axf weatherlight.o startup_gcc.o pwmA.o pwmB.o ../tivalib/board.o ../tivalib/debug.o ../tivalib/uartA.o ../tivalib/calc.o ../tivalib/rgb.o ../tivalib/color.o ../tivalib/data/data_sin.o ../tivalib/data/data_gamma.o ../tivalib/net/rgb/gen/solid.o ../tivalib/net/rgb/filter/filter_scale_gamma.o ../tivalib/net/rgb/filter/filter_white_balance.o ../tivalib/net/rgb/filter/filter_darken.o ../tivalib/net/rgb/filter/filter_lighten.o ../tivalib/net/val/gen/slider.o ../tivalib/net/val/gen/value_sin.o ../tivalib/net/val/gen/value_noise.o ../tivalib/net/val/gen/value_weightedsin.o ../tivalib/net/val/filter/value_filter_delay.o ../tivalib/net/val/filter/value_filter_scale_down.o ../tivalib/net/val/mixer/value_mixer.o ../tivalib/net/rgb/mixer/mixer.o ../tivalib/weather/sunny.o ../tivalib/weather/rainy.o ../tivalib/weather/cloudy.o ../tivalib/weather/wind.o ../TivaWare/utils/ustdlib.o \
../TivaWare/driverlib/gcc/libdriver.a \
/usr/lib/gcc/arm-none-eabi/4.8.2/../../../arm-none-eabi/lib/armv7e-m/softfp/libm.a \
/usr/lib/gcc/arm-none-eabi/4.8.2/../../../arm-none-eabi/lib/armv7e-m/softfp/libc.a \
/usr/lib/gcc/arm-none-eabi/4.8.2/armv7e-m/softfp/libgcc.a

最佳答案

您是否尝试过丢弃相关的输出部分?

/DISCARD/ :
{
*(.ARM.exidx*)
*(.gnu.linkonce.armexidx.*)
}

编辑:

我查看了我的一个 ARM 项目,并将这些部分放入了闪存中。

试试这个:

.ARM.exidx :
{
*(.ARM.exidx*)
*(.gnu.linkonce.armexidx.*)
} >FLASH

编辑2:

尝试在进入闪存的所有部分之后放置一个标签,并将您的 .data 部分放在那里:

SECTIONS
{
.text :
{
_text = .;
KEEP(*(.isr_vector))
*(.text*)
*(.rodata*)
_etext = .;
} > FLASH

.ARM.exidx :
{
*(.ARM.exidx*)
*(.gnu.linkonce.armexidx.*)
} > FLASH

_begin_data = .;

.data : AT ( _begin_data )
{
_data = .;
*(vtable)
*(.data*)
_edata = .;
} > SRAM

.bss :
{
_bss = .;
*(.bss*)
*(COMMON)
_ebss = .;
} > SRAM

}

关于c - arm-none-eabi-ld : section . ARM.exidx 与 .data 部分重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30778614/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com