ARM Linux: почему Linux ожидает, что регистр r0 будет установлен на ноль - PullRequest
2 голосов
/ 16 октября 2011

В руководстве по загрузке ARM Linux сказано, что регистр r0 должен быть нулевым. Почему регистр r0 должен быть нулем?

http://www.arm.linux.org.uk/developer/booting.php

CPU register settings
    r0 = 0.
    r1 = machine type number discovered in (3) above.
    r2 = physical address of tagged list in system RAM. 

Я просмотрел arch / arm / kernel / head.S, но не смог найти причину для этого.

Ответы [ 2 ]

2 голосов
/ 09 апреля 2012

Хотя я не могу найти никаких ссылок в списках рассылки ядра Linux или источниках Linux, подтверждающих это, я бы предположил, что это значение используется в качестве версии ABI для защиты ABI в будущем.

В будущих версиях ядра может потребоваться изменить аргументы, передаваемые из загрузчика: возможно, для какой-то новой функции ЦП требуется новый аргумент, или один из существующих аргументов должен быть слегка подправлен.

Это представляет серьезную проблему, когда новое ядро ​​загружается из более старого загрузчика: как ядро ​​узнает, какие аргументы передаются?Мы могли бы попытаться добиться того, чтобы новые ядра загружались только с новыми загрузчиками, но это вызовет немало головных болей в переходный период.(Загрузчики написаны людьми, не входящими в группу разработчиков ядра Linux; они также часто используются глубоко в аппаратном обеспечении, что в некоторых случаях не позволяет их легко обновить.)

Лучшее решение - зарезервировать регистр r0 быть версией ABI.Сейчас мы настаиваем на том, что r0 всегда равно 0. Если ABI когда-либо изменится, r0 может быть увеличено на единицу.Затем будущие ядра могут проверить r0, чтобы определить, с какой версией ABI он загружается, и, следовательно, как интерпретировать значения в других регистрах.

1 голос
/ 16 октября 2011

Последовательность и эффективность.Поскольку установка регистра в ноль является обычной операцией, и ARM обычно используется в стесненных условиях, может быть улучшение плотности кода.Кодировка инструкции для установки регистра в непосредственное значение длиннее, чем установка регистра в значение другого регистра.Имеет ли это большое значение на практике - это другой вопрос.

...