ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
21 ноября
1456261 Топик полностью
il-2 (15.08.2024 17:27, просмотров: 91) ответил VladislavS. на Как в библиотеке вообще можно сделать релаксацию? Неизвестно что и куда линкер потом расположит.
Уже убедиля. Все нормально. Делается релаксация библиотечного кода, если переменные расположены в области досягаемости. Кстати, я задаю global pointer таким образом: 

.data :

{

. = ALIGN(4);

PROVIDE(_data_vma = .);

PROVIDE( __global_pointer$ = . + (((_fastdata_end - .) > 0x1000) ? _fastdata_end - . - 0x800 : 0x800) );

*(.gnu.linkonce.r.*)

*(.data .data.*)

*(.gnu.linkonce.d.*)

. = ALIGN(8);

*(.sdata .sdata.*)

*(.gnu.linkonce.s.*)

*(.fastdata .fastdata.*);

. = ALIGN(4);

PROVIDE( _edata = .);

} >RAM AT>FLASH

/* GCC v8 use _edata..._end for init BSS section to 0 (_start) */

/* GCC v12 use __bss_start..._end for init BSS section to 0 (_start) */

.bss :

{

. = ALIGN(4);

PROVIDE( __bss_start = .);

*(.fastdata_z .fastdata_z.*);

. = ALIGN(4);

PROVIDE( _fastdata_end = . );

*(.sbss*)

...

Секции .fastdata и .fastdata_z служат для гарантированного размещения своих переменных в доступной области GP. Остальные - как повезет.