The newest gdb 8.3 crash on OpenBSD

Nan Xiao xiaonan830818@gmail.com
Wed Jan 29 05:44:00 GMT 2020


Hi gdb community,

Greeting from me!

I am building the newest gdb 8.3 on OpenBSD 6.6 server (Virtual
machine, amd64). The build is OK, but the gdb will crash when I tried
to use it to debug program:

(gdb) bt
#0  0x0000000000000000 in ?? ()
#1  0x00000ec41fa1c506 in x86_dr_stopped_data_address
(state=0xec6da0e4010, addr_p=0x7f7ffffbde70) at
../../gdb/nat/x86-dregs.c:608
#2  0x00000ec41fa1c7a3 in x86_dr_stopped_by_watchpoint
(state=0xec6da0e4010) at ../../gdb/nat/x86-dregs.c:650
#3  0x00000ec41f82ae47 in
x86_nat_target<obsd_nat_target>::stopped_by_watchpoint
(this=0xec6da0e4010) at ../../gdb/x86-nat.h:100
#4  0x00000ec41f84ff71 in watchpoints_triggered (ws=<optimized out>)
at ../../gdb/breakpoint.c:4727
#5  0x00000ec41f9ccb70 in handle_signal_stop (ecs=0x7f7ffffbe2f0) at
../../gdb/infrun.c:5605
#6  0x00000ec41f9c1eeb in handle_inferior_event (ecs=0x7f7ffffbe2f0)
at ../../gdb/infrun.c:5178
#7  0x00000ec41f9c329b in fetch_inferior_event (client_data=<optimized
out>) at ../../gdb/infrun.c:3753
#8  0x00000ec41f95ce59 in gdb_do_one_event () at ../../gdb/event-loop.c:1064
#9  0x00000ec41f95d42d in start_event_loop () at ../../gdb/event-loop.c:371
#10 0x00000ec41f9f3392 in captured_command_loop () at ../../gdb/main.c:331
#11 0x00000ec41f9f2e13 in captured_main (data=<optimized out>) at
../../gdb/main.c:1182
#12 gdb_main (args=<optimized out>) at ../../gdb/main.c:1198
#13 0x00000ec41f7fc378 in main (argc=<optimized out>,
argv=0x7f7ffffbde70) at ../../gdb/gdb.c:32
(gdb) frame 1
#1  0x00000ec41fa1c506 in x86_dr_stopped_data_address
(state=0xec6da0e4010, addr_p=0x7f7ffffbde70) at
../../gdb/nat/x86-dregs.c:608
608   status = x86_dr_low_get_status ();


I tried to step-in debug it, and found it seems to access an invalid
function address:

(top-gdb) display /i $pc
1: x/i $pc
=> 0x76de4af4f5 <x86_dr_stopped_data_address(x86_debug_reg_state*,
unsigned long*)+37>:
    mov    0x394874(%rip),%r12        # 0x76de843d70
(top-gdb) ni
0x00000076de4af4fc 608   status = x86_dr_low_get_status ();
1: x/i $pc
=> 0x76de4af4fc <x86_dr_stopped_data_address(x86_debug_reg_state*,
unsigned long*)+44>: mov    0x18(%r12),%r11
(top-gdb)
0x00000076de4af501 608   status = x86_dr_low_get_status ();
1: x/i $pc
=> 0x76de4af501 <x86_dr_stopped_data_address(x86_debug_reg_state*,
unsigned long*)+49>: callq  0x76de28f150 <__llvm_retpoline_r11>
(top-gdb)

Program received signal SIGSEGV, Segmentation fault.
0x0000000000000000 in ?? ()
1: x/i $pc
=> 0x0: <error: Cannot access memory at address 0x0>

I checked the source code, but can't figure out the reasons. Anyone
can give some clues? Thanks very much in advance!

Best Regards
Nan Xiao



More information about the Gdb mailing list