Хотя я не могу найти никаких ссылок в списках рассылки ядра Linux или источниках Linux, подтверждающих это, я бы предположил, что это значение используется в качестве версии ABI для защиты ABI в будущем.
В будущих версиях ядра может потребоваться изменить аргументы, передаваемые из загрузчика: возможно, для какой-то новой функции ЦП требуется новый аргумент, или один из существующих аргументов должен быть слегка подправлен.
Это представляет серьезную проблему, когда новое ядро загружается из более старого загрузчика: как ядро узнает, какие аргументы передаются?Мы могли бы попытаться добиться того, чтобы новые ядра загружались только с новыми загрузчиками, но это вызовет немало головных болей в переходный период.(Загрузчики написаны людьми, не входящими в группу разработчиков ядра Linux; они также часто используются глубоко в аппаратном обеспечении, что в некоторых случаях не позволяет их легко обновить.)
Лучшее решение - зарезервировать регистр r0
быть версией ABI.Сейчас мы настаиваем на том, что r0
всегда равно 0. Если ABI когда-либо изменится, r0
может быть увеличено на единицу.Затем будущие ядра могут проверить r0
, чтобы определить, с какой версией ABI он загружается, и, следовательно, как интерпретировать значения в других регистрах.