2015-05-04 1 views
1

В настоящее время я пытаюсь использовать инструментарий GCC для RISC-V, но у меня есть несколько проблем.Инициализация указателя стека

Похоже, что указатель стека не инициализируется должным образом. Я знаю, что должен инициализировать его сам, но я не могу понять, где. Я использую скрипт компоновщика по умолчанию, измененный с правильными адресами памяти, и в этом скрипте устанавливается константа _gp. Эта константа используется в исходном коду по умолчанию для инициализации регистра gp.

К сожалению, это не устанавливает регистр sp. Как настроить указатель стека, не используя собственный код запуска?

ответ

2

Это был дан ответ на github:

Среда выполнения (например, ядро ​​ОС), как ожидается, инициализируется зр перед переходом на точку входа программы. Если вы находитесь во встроенном домене с разными ограничениями, вам нужно использовать другой crt0, который устанавливает такие вещи. gp - глобальный указатель ABI к разделу малых данных. ОС не инициализирует его, потому что это свойство двоичного, а не среды исполнения (в отличие от стека)

+0

haha, я должен признать. это правильный ответ. Я задал этот вопрос на github, потому что у меня было ощущение, что это может быть ошибка. –

+0

Нет проблем с двойной публикацией в этом случае, но мы свяжем ответы, чтобы другие могли найти результат, а не вопрос без ответа. – user2548418