У меня огромная память DDR (2 ГБ) с огромным временем доступа и крошечная внутренняя оперативная память (1 МБ) с крошечным временем доступа. На данный момент у меня есть целый раздел .bss в DDR. Раздел .bss содержит одну часто используемую переменную из внешней библиотеки. Как я могу перевести его с медленной DDR на быструю RAM? Невозможно поместить весь .bss в ОЗУ, а также я не могу модифицировать внешнюю библиотеку.
Disassembly of section .bss:
8000008c <some_variable>
.bss (NOLOAD) : {
. = ALIGN(4);
__bss_start = .;
*(.bss)
*(.bss.*)
*(.gnu.linkonce.b.*)
*(COMMON)
. = ALIGN(4);
__bss_end = .;
} > DDR
Я пробовал что-то подобное, но это не работает.
.bssFAST (NOLOAD) : {
. = ALIGN(4);
file.o:some_variable(.bss)
. = ALIGN(4);
} > RAM
I tried someting like that, but its not work.
Это не сработало: компоновщик не работает на уровне переменных, он работает на разделы.
Если раздел foo.o
s .bss
не слишком велик, вы можете переместить весь этот раздел в .bssFAST
.
Если вы не можете этого сделать, ваш единственный другой выбор — бинарное исправление foo.o
таким образом, чтобы:
.bssFAST
(objcopy --add-section
должен работать) иsome_variable
так, чтобы он был в этом новом разделе (это должно быть относительно просто — обновление .st_shndx
должно сделать это).