Почему -fpie не работает в голых металлических кодах и не вызывает дикий указатель?

Я использую S5PV210, который основан на Cortex-A8.It начинается с initialaztion, а затем перейти к 0x20000000 SDRAM и запустить мои коды. Так что мне просто нужно поставить мою основную функцию на 0x20000000.

Насколько я знаю, есть два способа сделать это. Первый - использовать -Ttext=0x20000000, чтобы.text начинался с 0x20000000. И второе - использовать -fpie -pie для генерации независимых от позиции кодов. И я использую последний.

Это работает большую часть времени, но я застрял в одном из моих проектов. Симптом заключается в том, что printf("123") будет печатать вечные беспорядочные коды и никогда не вернется. Если я вернусь к использованию -Ttext=0x20000000, то все будет работать нормально.

Я попробовал несколько шагов, чтобы проанализировать это:

  1. измените мою основную функцию, просто вызовите один printf, чтобы мои коды не вызывали никаких других функций, например:

    int main () {printf("123"); в то время как (1); вернуть 0; }

  2. Поскольку -fpie -pie большую часть времени работает очень хорошо, я начал комментировать некоторые другие функции и, наконец, обнаружил, что если я прокомментирую достаточно кодов, printf снова будет работать.

Теперь я в замешательстве, -fpie и -pie действительно работают?

1 ответ

Решение

ХОРОШО. Я сделал глупую ошибку. Инициализация скопирует мои коды из NAND в SDRAM, и он имеет предельный размер 5 КБ.....

Другие вопросы по тегам