mirror of
https://github.com/MPSU/APS.git
synced 2025-09-16 09:40:10 +00:00
ЛР13. Исправление архитектуры в примерах вызова компилятора
This commit is contained in:
@@ -415,7 +415,7 @@ _Листинг 2. Пример содержимого файла первичн
|
||||
|
||||
Вам потребуются следующие флаги компиляции:
|
||||
|
||||
* `-march=rv32izicsr` — указание разрядности и набора расширений в архитектуре, под которую идет компиляция (у нас процессор rv32i с расширением инструкциями для взаимодействия с регистрами контроля и статуса Zicsr)
|
||||
* `-march=rv32i_zicsr` — указание разрядности и набора расширений в архитектуре, под которую идет компиляция (у нас процессор rv32i с расширением инструкциями для взаимодействия с регистрами контроля и статуса Zicsr)
|
||||
* `-mabi=ilp32` — указание двоичного интерфейса приложений. Здесь сказано, что и типы `int`, `long` и `pointer` являются 32-разрядными.
|
||||
|
||||
Есть очень [хорошее видео](https://youtu.be/29iNHEhHmd0?t=141), описывающее состав тулчейнов, именование исполняемых файлов компиляторов, как формируются ключи архитектуры и двоичного интерфейса приложений.
|
||||
@@ -423,7 +423,7 @@ _Листинг 2. Пример содержимого файла первичн
|
||||
С учетом названия исполняемого файла скачанного вами компилятора (при условии, что папку из архива вы переименовали в `riscv_cc` и скопировали в корень диска `C:`, а команду запускаете из терминала `git bash`), командой для компиляции файла [`startup.S`](startup.S) может быть:
|
||||
|
||||
```bash
|
||||
/c/riscv_cc/bin/riscv-none-elf-gcc -c -march=rv32i -mabi=ilp32 startup.S -o startup.o
|
||||
/c/riscv_cc/bin/riscv-none-elf-gcc -c -march=rv32i_zicsr -mabi=ilp32 startup.S -o startup.o
|
||||
```
|
||||
|
||||
### Компоновка объектных файлов в исполняемый
|
||||
@@ -436,7 +436,7 @@ _Листинг 2. Пример содержимого файла первичн
|
||||
|
||||
Исполняемый файл компилятора тот же самый, флаги компоновки будут следующие:
|
||||
|
||||
* `-march=rv32izicsr -mabi=ilp32` — те же самые флаги, что были при компиляции (нам все еще нужно указывать архитектуру, иначе компоновщик может скомпоновать объектные файлы со стандартными библиотеками от другой архитектуры)
|
||||
* `-march=rv32i_zicsr -mabi=ilp32` — те же самые флаги, что были при компиляции (нам все еще нужно указывать архитектуру, иначе компоновщик может скомпоновать объектные файлы со стандартными библиотеками от другой архитектуры)
|
||||
* `-Wl,--gc-sections` — указать компоновщику удалять неиспользуемые секции (сокращает объем итогового файла)
|
||||
* `-nostartfiles` — указать компоновщику не использовать стартап-файлы стандартных библиотек (сокращает объем файла и устраняет ошибки компиляции из-за конфликтов с используемым стартап-файлом).
|
||||
* `-T linker_script.ld` — передать компоновщику скрипт компоновки
|
||||
@@ -444,7 +444,7 @@ _Листинг 2. Пример содержимого файла первичн
|
||||
Пример команды компоновки:
|
||||
|
||||
```bash
|
||||
/c/riscv_cc/bin/riscv-none-elf-gcc -march=rv32i -mabi=ilp32 -Wl,--gc-sections -nostartfiles -T linker_script.ld startup.o main.o -o result.elf
|
||||
/c/riscv_cc/bin/riscv-none-elf-gcc -march=rv32i_zicsr -mabi=ilp32 -Wl,--gc-sections -nostartfiles -T linker_script.ld startup.o main.o -o result.elf
|
||||
```
|
||||
|
||||
### Экспорт секций для инициализации памяти
|
||||
|
Reference in New Issue
Block a user