Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
qemu ну вот нисколько не предназначен для отладки ядра
насколько он соответствует реальной модели не знает никто
немного изменённое адресное пространство, которое работает не так, как реальный режим процессора
для части функций нету проекции virt-to-real
c1ae13da T load_ucode_bsp
sprintf(name, __pa_nodebug("intel-ucode/%02x-%02x-%02x"), family, model, stepping);
sprintf.c12b905b: ff 24 85 54 c6 7f c1 jmp *-0x3e8039ac(,%eax,4)
c12b905e: R_386_32 .rodata
sprintf(). void __init load_ucode_bsp(void)
{
int vendor, family;
+ char str[100];
+
+ sprintf(str, __pa_nodebug(":%d"), 1234);
if (check_loader_disabled_bsp())
return;
$ qemu-system-i386 -kernel arch/x86/boot/bzImage -s -S
$ gdb
(gdb) target remote :1235
Remote debugging using :1235
0x0000fff0 in ?? ()
(gdb) add-symbol-file vmlinux 0x1000000
add symbol table from file "vmlinux" at
.text_addr = 0x1000000
(y or n) y
Reading symbols from /home/jcmvbkbc/ws/tensilica/linux/z/vmlinux...done.
(gdb) b sprintf
Breakpoint 1 at 0x12b9150: file /home/jcmvbkbc/ws/tensilica/linux/linux-xtensa/lib/vsprintf.c, line 2120.
(gdb) c
Continuing.
Breakpoint 1, sprintf (buf=<error reading variable: can't compute CFA for this frame>, fmt=<error reading variable: can't compute CFA for this frame>) at /home/jcmvbkbc/ws/tensilica/linux/linux-xtensa/lib/vsprintf.c:2120
....
1885 switch (spec.type) {
1: x/10i $pc
=> 0x12b8e88 <vsnprintf+232>: jmp *-0x3e8039cc(,%eax,4)
(gdb) si
0x00000000 in ?? ()
1: x/10i $pc
=> 0x0: push %ebx
Может это место скомпилировать с -fPIC?
Множество разработчиков тестирует свой код не на реальных машинах, а в виртуальных, с помощью того же QEMU. Так вот там всё прекрасно работает.
Сказ об одной ошибке, так и не попавшей в релиз ядра Linux