Подавление секции '.ARM.exidx' с помощью clang / llvm - PullRequest
0 голосов
/ 22 марта 2020

Я пытаюсь скомпилировать голую программу ARM Cortex-M3 с clang. (Код и скрипт компоновщика работают нормально с g cc.)

Моя проблема в том, что clang, кажется, испускает секцию .ARM.exidx независимо от того, нужна она или нет.

Так как для мой код g cc не выдал раздел .ARM.exidx, поэтому мой скрипт компоновщика не указывает для него регион. Однако кажется, что clang испускает его, как указано в этом сообщении об ошибке:

ld.lld: error: no memory region specified for section '.ARM.exidx'
clang: error: ld.lld command failed with exit code 1 (use -v to see invocation)

Есть ли способ избежать создания этого раздела, когда он не нужен?

Я пробовал опции -fno-unwind-tables и -fno-exceptions но, похоже, это известная ошибка, что они не работают должным образом. Посмотрите эти запросы на извлечение: D31139 и D31140


В настоящее время я работаю над этой проблемой со следующим определением раздела в сценарии компоновщика:

    /DISCARD/ :
    {
        *(.ARM.exidx)
    }

Кажется, это немного fr agile, хотя, так как раздел будет отсутствовать, если из-за каких-либо изменений в коде, раздел потребуется позже.

...