Почему я не могу скомпилировать ARM BE8 ELF с помощью GCC? - PullRequest
0 голосов
/ 06 октября 2019

Я пытался скомпилировать следующий код для системы ARM BE8 (выполнение кода с прямым порядком байтов с доступом к данным с прямым порядком байтов).

Мой код выглядит следующим образом:

.global main
.type main, %function

main:
    ldr pc, =0x12345678

Ожидаемый вывод:

04 f0 1f e5 <- little endian opcode
12 34 56 78 <- big endian data

Я использую Makefile, сначала пытаюсь скомпилировать, используя:

arm-unknown-linux-musleabi-gcc main.S -o main.o -mbig-endian -mbe8

Затем, связывая используя:

arm-unknown-linux-musleabi-ld main.o -o main -mbig-endian

но двоичный вывод main содержит код с прямым порядком байтов вместо небольшого.

При попытке связать с помощью:

arm-unknown-linux-musleabi-ld main.o -o main -mbig-endian -mbe8

Я получаю следующую ошибку:

... is already in final BE8 format

1 Ответ

0 голосов
/ 14 ноября 2019

Я нашел проблему!

При публикации вопроса я попытался упростить строки сборки из моего оригинального Makefile. Фактическая проблема заключалась в попытке запустить ld несколько раз (для генерации нескольких типов для моего окончательного ELF).

Похоже, что -mbe8 не может работать с существующим файлом ELF с атрибутом -be8 (повторное связывание).

Решение, позволяющее перенести этот флаг только в окончательный ld команда.

...