qemu-x86_64: debugging after relocation: breakpoints not working

Hi,
I failed to find the correct answer in this list. I am trying to debug u-boot from the master running inside of QEMU 5.2.0:
I start QEMU as the following:
qemu-system-x86_64 -bios u-boot.rom -serial stdio -hda sda -net none -S -s
And then attach to it using gdb 10.1:
target remote 127.0.0.1:1234 add-symbol-file /build/u-boot 0x06f49000 break board_init_r info break
Num Type Disp Enb Address What 1 breakpoint keep y 0x0000000006f5adfa in board_init_r at /home/matwey/lab/u-boot/common/board_r.c:807
cont
U-boot is running, however the breakpoint has never been triggered. I also tried to use hardware assisted break instead of regular. Breaking before the relocation works fine, so I suppose I am doing something wrong with relocation addresses.
Address 0x06f49000 is taken from `bdinfo` output:
=> bdinfo boot_params = 0x0000000000000000 DRAM bank = 0x0000000000000000 -> start = 0x0000000000000000 -> size = 0x0000000008000000 flashstart = 0x0000000000000000 flashsize = 0x0000000000000000 flashoffset = 0x0000000000000000 baudrate = 115200 bps relocaddr = 0x0000000006f49000 reloc off = 0x0000000005e39000 Build = 64-bit current eth = unknown ethaddr = (not set) IP addr = <NULL> fdt_blob = 0x0000000006d07e30 new_fdt = 0x0000000006d07e30 fdt_size = 0x0000000000000bc0 Video = vesa_video inactive lmb_dump_all: memory.cnt = 0x1 memory[0] [0x0-0x7ffffff], 0x08000000 bytes flags: 0 reserved.cnt = 0x0
Could somebody please point out to me what I do wrong? Thank you in advance.

вс, 1 авг. 2021 г. в 18:49, Matwey V. Kornilov matwey.kornilov@gmail.com:
Hi,
I failed to find the correct answer in this list. I am trying to debug u-boot from the master running inside of QEMU 5.2.0:
I start QEMU as the following:
qemu-system-x86_64 -bios u-boot.rom -serial stdio -hda sda -net none -S -s
And then attach to it using gdb 10.1:
target remote 127.0.0.1:1234 add-symbol-file /build/u-boot 0x06f49000
I figured out that the 0x06f49f78 offset works fine, breakpoints work fine now. But how should I figure out this 0xf78 in advance?
break board_init_r info break
Num Type Disp Enb Address What 1 breakpoint keep y 0x0000000006f5adfa in board_init_r at /home/matwey/lab/u-boot/common/board_r.c:807
cont
U-boot is running, however the breakpoint has never been triggered. I also tried to use hardware assisted break instead of regular. Breaking before the relocation works fine, so I suppose I am doing something wrong with relocation addresses.
Address 0x06f49000 is taken from `bdinfo` output:
=> bdinfo boot_params = 0x0000000000000000 DRAM bank = 0x0000000000000000 -> start = 0x0000000000000000 -> size = 0x0000000008000000 flashstart = 0x0000000000000000 flashsize = 0x0000000000000000 flashoffset = 0x0000000000000000 baudrate = 115200 bps relocaddr = 0x0000000006f49000 reloc off = 0x0000000005e39000 Build = 64-bit current eth = unknown ethaddr = (not set) IP addr = <NULL> fdt_blob = 0x0000000006d07e30 new_fdt = 0x0000000006d07e30 fdt_size = 0x0000000000000bc0 Video = vesa_video inactive lmb_dump_all: memory.cnt = 0x1 memory[0] [0x0-0x7ffffff], 0x08000000 bytes flags: 0 reserved.cnt = 0x0
Could somebody please point out to me what I do wrong? Thank you in advance.
-- With best regards, Matwey V. Kornilov

вс, 1 авг. 2021 г. в 20:41, Matwey V. Kornilov matwey.kornilov@gmail.com:
вс, 1 авг. 2021 г. в 18:49, Matwey V. Kornilov matwey.kornilov@gmail.com:
Hi,
I failed to find the correct answer in this list. I am trying to debug u-boot from the master running inside of QEMU 5.2.0:
I start QEMU as the following:
qemu-system-x86_64 -bios u-boot.rom -serial stdio -hda sda -net none -S -s
And then attach to it using gdb 10.1:
target remote 127.0.0.1:1234 add-symbol-file /build/u-boot 0x06f49000
I figured out that the 0x06f49f78 offset works fine, breakpoints work fine now. But how should I figure out this 0xf78 in advance?
Ok, it is the difference between .text and .text.start sections:
[ 1] .text.start PROGBITS 0000000001110000 00110000 [ 7] .text PROGBITS 0000000001110f78 00110f78
break board_init_r info break
Num Type Disp Enb Address What 1 breakpoint keep y 0x0000000006f5adfa in board_init_r at /home/matwey/lab/u-boot/common/board_r.c:807
cont
U-boot is running, however the breakpoint has never been triggered. I also tried to use hardware assisted break instead of regular. Breaking before the relocation works fine, so I suppose I am doing something wrong with relocation addresses.
Address 0x06f49000 is taken from `bdinfo` output:
=> bdinfo boot_params = 0x0000000000000000 DRAM bank = 0x0000000000000000 -> start = 0x0000000000000000 -> size = 0x0000000008000000 flashstart = 0x0000000000000000 flashsize = 0x0000000000000000 flashoffset = 0x0000000000000000 baudrate = 115200 bps relocaddr = 0x0000000006f49000 reloc off = 0x0000000005e39000 Build = 64-bit current eth = unknown ethaddr = (not set) IP addr = <NULL> fdt_blob = 0x0000000006d07e30 new_fdt = 0x0000000006d07e30 fdt_size = 0x0000000000000bc0 Video = vesa_video inactive lmb_dump_all: memory.cnt = 0x1 memory[0] [0x0-0x7ffffff], 0x08000000 bytes flags: 0 reserved.cnt = 0x0
Could somebody please point out to me what I do wrong? Thank you in advance.
-- With best regards, Matwey V. Kornilov
-- With best regards, Matwey V. Kornilov
participants (1)
-
Matwey V. Kornilov