Как распечатать регистры в ядре Linux?

Я хочу распечатать значения пары регистров из кода ядра Linux, работающего на ARM. В частности, у меня есть следующая сборка в linux -

e3c52007        bic     r2, r5, #7      ; 0x7
e1520003        cmp     r2, r3
0a000003        beq     c011fa60 <smem_find+0x40>

Как распечатать значения r2, r3 и r5 в kmsg? Я не хочу использовать имена переменных и хочу получать значения из регистров.


person Anz    schedule 27.09.2011    source источник
comment
Я не могу правильно вспомнить, но я думаю, что dump_stack также может печатать значения регистров. У меня слишком много кода, чтобы проверить прямо сейчас, чтобы найти это: P   -  person Jesus Ramos    schedule 27.09.2011


Ответы (2)


Я не так хорошо знаком с разработкой ядра и простыми способами отладки, но я думаю, что это сработает.

size_t r2, r3, r5;

asm ("str r2, %[r2]\n"
     "str r3, %[r3]\n"
     "str r5, %[r5]\n"
 : [r2]"=m" (r2), [r3]"=m" (r3), [r5]"=m" (r5));
 printk("r2=%u r3=%u r4=%u\n", r2, r3, r5);

Изменить: теперь со сборкой ARM вместо x86: p

person DipSwitch    schedule 27.09.2011
comment
printk вместо kprintf ofc :‹ - person DipSwitch; 28.09.2011

Вы можете позвонить show_regs(struct pt_regs * regs). Эта функция отобразит все регистры в структуре pt_regs.

person Breno Leitão    schedule 28.06.2017