Почему -fpie не работает в голых металлических кодах и не вызывает дикий указатель?
Я использую S5PV210, который основан на Cortex-A8.It начинается с initialaztion, а затем перейти к 0x20000000 SDRAM и запустить мои коды. Так что мне просто нужно поставить мою основную функцию на 0x20000000.
Насколько я знаю, есть два способа сделать это. Первый - использовать -Ttext=0x20000000, чтобы.text начинался с 0x20000000. И второе - использовать -fpie -pie для генерации независимых от позиции кодов. И я использую последний.
Это работает большую часть времени, но я застрял в одном из моих проектов. Симптом заключается в том, что printf("123") будет печатать вечные беспорядочные коды и никогда не вернется. Если я вернусь к использованию -Ttext=0x20000000, то все будет работать нормально.
Я попробовал несколько шагов, чтобы проанализировать это:
измените мою основную функцию, просто вызовите один printf, чтобы мои коды не вызывали никаких других функций, например:
int main () {printf("123"); в то время как (1); вернуть 0; }
Поскольку -fpie -pie большую часть времени работает очень хорошо, я начал комментировать некоторые другие функции и, наконец, обнаружил, что если я прокомментирую достаточно кодов, printf снова будет работать.
Теперь я в замешательстве, -fpie и -pie действительно работают?
1 ответ
ХОРОШО. Я сделал глупую ошибку. Инициализация скопирует мои коды из NAND в SDRAM, и он имеет предельный размер 5 КБ.....