Пишу программу RAM-загрузчик для прошивки флешки непопулярного МК через J-Link Commander или через J-Flash - https://wiki.segger.com/Adding_Support_for_New_Devices
В этой программе надо разделить код в ELF-файле на 3 секции, название которых PrgCode, PrgData, DevDscr. Для этого я написал скрипт линкера (он в листенге ниже). При написании опирался на мануал - https://www.iar.com/support/tech-notes/link...ap-file-v.5.xx/
/*
* Define a memory region that covers the entire 4 GB
* addressible space of the processor.
*/
define memory mem with size = 4G;
/*
* Define a region for the on-chip SRAM
*/
define region RAM_region = mem:[from 0x20000000 to 0x2002FFFF];
/*
* Indicate that the read/write values should be
* initialized by copying from flash.
*/
initialize manually with packing=none { readwrite };
"PrgData":
place in RAM_region { readwrite };
"PrgCode":
place in RAM_region { readonly };
"DevDscr":
place in RAM_region { readonly section DevDscr };
После получения ELF-файла я проверял названия секций утилитой arm-none-eabi-readelf.exe из пакета GNU Tools ARM. К сожалению, я наблюдал, что имена секций МЕНЯЛИСЬ! К секциям приписывался один из суффиксов rw, ro, zi (см. таблицу ниже)
Section Headers:
[Nr] Name Type Addr Off Size ES Flg Lk Inf Al
[ 0] NULL 00000000 00392c 000000 00 0 0 4
[ 1] .shstrtab STRTAB 00000000 00392c 0000e0 00 0 0 4
[ 2] .strtab STRTAB 00000000 003a0c 0002a2 00 0 0 4
[ 3] .symtab SYMTAB 00000000 003cb0 000330 10 2 37 4
[ 4] PrgData zi NOBITS 20000000 000034 00003c 01 WA 0 0 4
[ 5] PrgCode ro PROGBITS 2000003c 000034 000100 01 AX 0 0 4
[ 6] DevDscr ro PROGBITS 2000013c 000134 0010a0 01 A 0 0 4
Из-за это верхний уровень (J-Link Commander, J-Flash) ломается - не может распарсить ELF-файл, чтобы найти функции прошивки флеша.
Пожалуйста, помогите найти способ предотвратить такой калечение имён секций.