qemu-discuss
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: breakpoints don't work for kernel debugging with qemu and gdb


From: Alex Bennée
Subject: Re: breakpoints don't work for kernel debugging with qemu and gdb
Date: Thu, 18 Feb 2021 11:18:08 +0000
User-agent: mu4e 1.5.8; emacs 28.0.50

ckim@etri.re.kr writes:

> Hello all,
>
>  
>
> Thanks for the helps always..
>
> Today I wanted to debug/analyze linux kernel on qemu and ran qemu but the
> breakpoints don't seem to work.
>
> When I type 'cont' it just goes with booting until it errors. (I wanted to
> see what happens near the error location, not sure I'll be able to figure it
> out though.. )
>
>  
>
> The command I launched qemu was (just ignore the directories):
>
> ../build/aarch64-softmmu/qemu-system-aarch64 -M virt -cpu cortex-a72 -kernel
> ../../../LinuxDevDrv/linux-5.4.21/arch/arm64/boot/Image -initrd
> ../../../LinuxDevDrv/linux-5.4.21/testinitrd/myinitrd.img --append
> "root=/dev/ram init=/init" -m 2048M -nographic -s -S -singlestep
>
>  
>
> And the command I launched gdb-multiarch is
>
> gdb-multiarch ../../../LinuxDevDrv/linux-5.4.21/vmlinux -x gdbsetup
>
>  
>
> file 'gdbsetup' contains
>
> set architecture aarch64
>
> set serial baud 115200
>
> target remote :1234
>
>  
>
> I searched the internet and tried things.
>
> For kernel build, CONFIG_DEBUG_INFO, CONFIG_DEBUG_KERNEL,
> CONFIG_MAGIC_SYSRQ, CONFIG_DEBUG_FS, CONFIG_HAVE_HW_BREAKPOINT,
> CONFIG_HAVE_MIXED_BREAKPOINTS_REGS were all set to 'y',
>
> But CONFIG_MIXED_BREAKPOINTS_REGS was set to 'no. (just because I couldn't
> find the option location. It's searched with MIXED_BREAKPOINTS but I don't
> know the whereabout.). I also set CONFIG_KGDB to 'y'.
>
> I tried hbreak and softbreak(break). Gdb responds as if breakpoints are well
> set. But when I type 'cont' the virtual machine just boots without stopping
> at breakpoints.

Are you sure you've set breakpoints at places that will be hit?

Is your kernel using any form of address space randomisation?

AFAICT it all should be working (at least in the current HEAD):

  QEMU CMD: /home/alex/lsrc/qemu.git/builds/arm.all/qemu-system-aarch64 
-monitor none -display none -chardev file,path=memory.out,id=output  -M virt 
-cpu max -display none -semihosting-config 
enable=on,target=native,chardev=output -kernel tests/tcg/aarch64-softmmu/memory 
-gdb unix:path=/tmp/tmpm5iiz3uvqemu-gdbstub/gdbstub.socket,server
  GDB CMD: /home/alex/src/tools/binutils-gdb.git/builds/all/install/bin/gdb 
tests/tcg/aarch64-softmmu/memory -q -n -batch -ex 'set confirm off' -ex 'target 
remote /tmp/tmpm5iiz3uvqemu-gdbstub/gdbstub.socket' -x 
/home/alex/lsrc/qemu.git/tests/tcg/multiarch/gdbstub/memory.py
  __start () at /home/alex/lsrc/qemu.git/tests/tcg/aarch64/system/boot.S:91
  91              adr     x0, vector_table
  ATTACHED: aarch64
  Checking we can step the first few instructions
  92              msr     vbar_el1, x0
  95              adrp    x0, ttb
  96              add     x0, x0, :lo12:ttb
  PASS: single step in boot code
  Setup catch-all for _exit
  Breakpoint 1 at 0x4000386c: file 
/home/alex/lsrc/qemu.git/tests/tcg/aarch64/system/boot.S, line 201.
  Breakpoint 2 at 0x4000228c: file 
/home/alex/lsrc/qemu.git/tests/tcg/multiarch/system/memory.c, line 456.

  Breakpoint 2, main () at 
/home/alex/lsrc/qemu.git/tests/tcg/multiarch/system/memory.c:456
  456         bool ok = true;
  PASS: break @ 0x4000228c <main+8> ({int (void)} 0x40002284 <main> 1 hits)
  Hardware access (read/write) watchpoint 3: test_data[128]

  Hardware access (read/write) watchpoint 3: test_data[128]

  Old value = 0 '\000'
  New value = 128 '\200'
  init_test_data_u8 (unused_offset=0) at 
/home/alex/lsrc/qemu.git/tests/tcg/multiarch/system/memory.c:66
  66              pdot(i);
  PASS: awatch for test_data[128]
  Hardware read watchpoint 4: test_data[128]

  Hardware read watchpoint 4: test_data[128]

  Value = 128 '\200'
  0x00000000400016ac in read_test_data_u16 (offset=0) at 
/home/alex/lsrc/qemu.git/tests/tcg/multiarch/system/memory.c:186
  186             word = *ptr++;
  PASS: rwatch for test_data[128]
  Hardware watchpoint 5: test_data[128]

  Hardware watchpoint 5: test_data[128]

  Old value = 128 '\200'
  New value = 127 '\177'
  init_test_data_u16 (offset=1) at 
/home/alex/lsrc/qemu.git/tests/tcg/multiarch/system/memory.c:125
  125             pdot(i);
  PASS: watch for test_data[128]
  PASS: didn't reach backstop
  [Inferior 1 (process 1) killed]


>
>  
>
> Can anyone help me with this? Any advice will be appreciated.
>
> Thanks!
>
>  
>
> Chan Kim
>
>  


-- 
Alex Bennée



reply via email to

[Prev in Thread] Current Thread [Next in Thread]