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

Я использую S5PV210, основанный на cortex-A8. Он начинается с инициализации, затем переходит к 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?


person demonguy    schedule 17.10.2014    source источник


Ответы (1)


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

person demonguy    schedule 17.10.2014