Как создать цепочку инструментов newlib RISC-V с модифицированным скриптом компоновщика?

Я пытаюсь создать цепочку инструментов кросс-компиляции GCC/newlib, ориентированную на встроенную ОС на RISC-V. Для этого мне нужно изменить виртуальные адреса, по которым связаны двоичные файлы.

Один из способов добиться этого — изменить сценарий компоновщика по умолчанию, который поставляется с цепочкой инструментов. Я пытаюсь найти лучшее место в задействованных компонентах (newlib, binutils, gcc), где я могу настроить сценарий компоновщика по умолчанию, который поставляется с набором инструментов.

Для некоторых платформ newlib уже предоставляет частичные или полные скрипты компоновщика. Кажется, для RISC-V используется сценарий компоновщика по умолчанию, созданный binutils.

У меня все в порядке с исправлением binutils, но я не могу найти, как на самом деле построен скрипт компоновщика RISC-V или как я мог бы что-то изменить в нем. Любые указатели приветствуются!


person Julian Stecklina    schedule 06.01.2021    source источник


Ответы (1)


Различные сценарии компоновщика для riscv собираются из:
binutils/ld/scripttempl/elf.sc
binutils/ld/emulparams/elf32lriscv*
binutils/ld/emulparams/elf64lriscv*

Вам нужно будет изменить эти файлы или создать свои собственные и изменить файлы Makefile.

person yflelion    schedule 07.01.2021
comment
Поправьте, могу только дописать: афаик по умолчанию начинается с 0x0000 и из-за этого в генераторах в разделе bootrom в Rocket-Chip лежит кастомный LD script начинается с 0x80000000, а также можно просмотреть текущий LD скрипт через печать riscv64-unknown-elf -ld --подробный. Если вам нужно пользовательское расположение памяти, вы должны вручную указать его в этих файлах или предоставить собственный скрипт ld. - person Алексей Хилаев; 13.01.2021