ARM регистр r9 в ядре Linux - PullRequest
       50

ARM регистр r9 в ядре Linux

6 голосов
/ 24 октября 2011

«Стандарт вызова процедур архитектуры ARM» (AAPCS / EABI) гласит (5.1.1), что

"The role of register r9 is platform specific."

но

"A virtual platform [...] may designate r9 as an additional callee-saved
 variable register, v6."

Вопрос в том, использует ли ядро ​​Linux r9 для каких-то специальных целей? Или он используется как обычный энергонезависимый регистр?

Ответы [ 2 ]

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

Простой способ узнать, как его использует ядро, - это просто собрать ядро ​​(CROSS_COMPILE=... ARCH=arm make vmlinux), а затем разобрать его целиком,

${CROSS_COMPILE}objdump -d vmlinux.o | grep 'sb|r9'

для проверки (с использованием имен r9 и sb, поскольку это зависит от того, что именно выдает objdump).

Если вы когда-нибудь найдете его в коде пролога / эпилога (в таких инструкциях, как push {..., r9, ...}, stmfd sp!, {..., r9, ...} или их соответствующих pop / ldmfd), то он будет сохранен. В противном случае, просто еще одна царапина рег. Результат может зависеть от вашей цепочки инструментов, параметров конфигурации ядра или цели ARM.

Тем не менее, если вы скомпилируете ядро ​​Thumb-2, оно будет не сохранено вызываемым пользователем. Это связано с тем, что Thumb-2 push / pop работают только в нижнем регистре (и lr / pc дополняющим образом, push lr в паре с pop pc).

0 голосов
/ 24 октября 2011

Я думаю, что определения регистров хранятся в include / asm-arm / ptrace.h

Не уверен, что 100%, хотя ...

...