Начальное состояние программных регистров и стека в Linux ARM

В настоящее время я играю со сборкой ARM на Linux в качестве учебного упражнения. Я использую «голую» сборку, то есть не libcrt или libgcc. Кто-нибудь может указать мне информацию о том, в каком состоянии находится указатель стека и другие регистры в начале программы до вызова первой инструкции? Очевидно, что pc / r15 указывает на _start, а остальные, по-видимому, инициализируются равными 0, с двумя исключениями; sp / r13 указывает на адрес далеко за пределами моей программы, а r1 указывает на чуть более высокий адрес.

Итак, на некоторые твердые вопросы:

Какое значение в r1?Является ли значение в sp легитимным стеком, выделенным ядром?Если нет, то каков предпочтительный метод выделения стека; используя brk или выделить статический раздел .bss?

Любые указатели будут оценены.

Ответы на вопрос(4)

Ваш ответ на вопрос