Я разрабатываю проект с использованием микроконтроллера TI Tiva (TM4C123GH6PM), TivaWare (был StellarisWare) и GCC 4.8.2 (-14ubuntu1 + 6) в Linux.arm-none-eabi-ld: раздел .ARM.exidx перекрывает раздел .data
Хотя ссылки я начал получать эти сообщения об ошибке:
arm-none-eabi-ld: section .ARM.exidx loaded at [00000000000027d8,00000000000027df] overlaps section .data loaded at [00000000000027d7,00000000000027d8]
я сделал некоторое погуглите, но я ничего не нашел, кажется, чтобы помочь.
Я нашел этот вопрос, который находится на одной и ту же тему, но я не делаю какой-либо stacktracing: When is .ARM.exidx is used
Кажется, этот раздел в основном используются при отладке C++ кода. Но я не использую C++ ...
Я попытался сбрасывать все мои объектные файлы с помощью
-h
, чтобы показать включенные разделы. Единственным файлом, содержащим ARM.exidx, является libgcc.a.Ошибка появляется без видимого patten (по крайней мере, что я мог найти).
Например, в main.c:
while(1){
debug_getc()
uartA_getc()
}
производит эту ошибку. в то время как
while(1){
debug_getc();
//uartA_getc();
}
while(1){
debug_getc();
//uartA_getc();
}
нет. (Обе функции в своем собственном файле объект, но делать вещи похожи. Эта ошибка не ограничивается эти два. I'v столкнулся с этим на некоторых других местах тоже.)
Я пытался добавить
.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
Поместите их с '.text'; они являются постоянными данными afaik, если их нужно читать/писать, а затем помещать их в '.data'. Вы должны инициализировать их, они не похожи на '.bss', и вам нужно« NOLOAD », если бы они были. Вам могут не понадобиться разделы * idx *, если вы не используете исключения C++ или какие-либо элементы трассировки языка «C». Однако они обычно не большие, поэтому я буду держать их как указано выше. Некоторым библиотечным подпрограммам «C» могут потребоваться эти разделы. –
Я не уверен, правильно ли я вас понимаю. Но вставка «.ARM.exidx» непосредственно в '.text' дает мне ошибку:' arm-none-eabi-ld: .text имеет и упорядоченное ['.ARM.exidx 'в /...../softfp/ libgcc.a (_divdi3.o)] и неупорядоченных ['.rodata.str1.1 'в ../ TivaWare/utils/ustdlib.o]' секциях. (Но, по крайней мере, у меня есть ошибка, говорящая мне, где эти вещи происходят от ** !!!! **) – Scheintod