2008-06-02 18:51:43 +02:00
|
|
|
#!/usr/bin/gdb -x
|
|
|
|
# Test suite for GDB remote debugging
|
|
|
|
# Run:
|
2010-04-19 21:16:01 +02:00
|
|
|
# make bin/ipxe.hd.tmp
|
2008-06-02 18:51:43 +02:00
|
|
|
# make
|
2008-06-11 13:12:46 +02:00
|
|
|
# gdb
|
|
|
|
# (gdb) target remote :TCPPORT
|
|
|
|
# OR
|
|
|
|
# (gdb) target remote udp:IP:UDPPORT
|
|
|
|
# (gdb) source tests/gdbstub_test.gdb
|
2008-06-02 18:51:43 +02:00
|
|
|
|
2010-04-19 21:16:01 +02:00
|
|
|
define ipxe_load_symbols
|
|
|
|
file bin/ipxe.hd.tmp
|
2008-06-02 18:51:43 +02:00
|
|
|
end
|
|
|
|
|
2010-04-19 21:16:01 +02:00
|
|
|
define ipxe_assert
|
2008-06-02 18:51:43 +02:00
|
|
|
if $arg0 != $arg1
|
|
|
|
echo FAIL $arg2\n
|
|
|
|
else
|
|
|
|
echo PASS $arg2\n
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2010-04-19 21:16:01 +02:00
|
|
|
define ipxe_start_tests
|
2008-06-02 18:51:43 +02:00
|
|
|
jump gdbstub_test
|
|
|
|
end
|
|
|
|
|
2010-04-19 21:16:01 +02:00
|
|
|
define ipxe_test_regs_read
|
|
|
|
ipxe_assert $eax 0xea010203 "ipxe_test_regs_read eax"
|
|
|
|
ipxe_assert $ebx 0xeb040506 "ipxe_test_regs_read ebx"
|
|
|
|
ipxe_assert $ecx 0xec070809 "ipxe_test_regs_read ecx"
|
|
|
|
ipxe_assert $edx 0xed0a0b0c "ipxe_test_regs_read edx"
|
|
|
|
ipxe_assert $esi 0x510d0e0f "ipxe_test_regs_read esi"
|
|
|
|
ipxe_assert $edi 0xd1102030 "ipxe_test_regs_read edi"
|
2008-06-02 18:51:43 +02:00
|
|
|
end
|
|
|
|
|
2010-04-19 21:16:01 +02:00
|
|
|
define ipxe_test_regs_write
|
2008-06-02 18:51:43 +02:00
|
|
|
set $eax = 0xea112233
|
|
|
|
set $ebx = 0xeb445566
|
|
|
|
set $ecx = 0xec778899
|
|
|
|
set $edx = 0xedaabbcc
|
|
|
|
set $esi = 0x51ddeeff
|
|
|
|
set $edi = 0xd1010203
|
|
|
|
c
|
2010-04-19 21:16:01 +02:00
|
|
|
ipxe_assert $eax 0xea112233 "ipxe_test_regs_write eax"
|
|
|
|
ipxe_assert $ebx 0xeb445566 "ipxe_test_regs_write ebx"
|
|
|
|
ipxe_assert $ecx 0xec778899 "ipxe_test_regs_write ecx"
|
|
|
|
ipxe_assert $edx 0xedaabbcc "ipxe_test_regs_write edx"
|
|
|
|
ipxe_assert $esi 0x51ddeeff "ipxe_test_regs_write esi"
|
|
|
|
ipxe_assert $edi 0xd1010203 "ipxe_test_regs_write edi"
|
2008-06-02 18:51:43 +02:00
|
|
|
|
|
|
|
# This assumes segment selectors are always 0x10 or 0x8 (for code).
|
2010-04-19 21:16:01 +02:00
|
|
|
ipxe_assert $cs 0x08 "ipxe_test_regs_write cs"
|
|
|
|
ipxe_assert $ds 0x10 "ipxe_test_regs_write ds"
|
2008-06-02 18:51:43 +02:00
|
|
|
end
|
|
|
|
|
2010-04-19 21:16:01 +02:00
|
|
|
define ipxe_test_mem_read
|
2008-06-02 18:51:43 +02:00
|
|
|
c
|
2010-04-19 21:16:01 +02:00
|
|
|
ipxe_assert ({int}($esp+4)) 0x11223344 "ipxe_test_mem_read int"
|
|
|
|
ipxe_assert ({short}($esp+2)) 0x5566 "ipxe_test_mem_read short"
|
|
|
|
ipxe_assert ({char}($esp)) 0x77 "ipxe_test_mem_read char"
|
2008-06-02 18:51:43 +02:00
|
|
|
end
|
|
|
|
|
2010-04-19 21:16:01 +02:00
|
|
|
define ipxe_test_mem_write
|
2008-06-02 18:51:43 +02:00
|
|
|
set ({int}($esp+4)) = 0xaabbccdd
|
|
|
|
set ({short}($esp+2)) = 0xeeff
|
|
|
|
set ({char}($esp)) = 0x99
|
|
|
|
c
|
2010-04-19 21:16:01 +02:00
|
|
|
ipxe_assert ({int}($esp+4)) 0xaabbccdd "ipxe_test_mem_write int"
|
|
|
|
ipxe_assert ({short}($esp+2)) (short)0xeeff "ipxe_test_mem_write short"
|
|
|
|
ipxe_assert ({char}($esp)) (char)0x99 "ipxe_test_mem_write char"
|
2008-06-02 18:51:43 +02:00
|
|
|
end
|
|
|
|
|
2010-04-19 21:16:01 +02:00
|
|
|
define ipxe_test_step
|
2008-06-05 16:31:48 +02:00
|
|
|
c
|
|
|
|
si
|
2010-04-19 21:16:01 +02:00
|
|
|
ipxe_assert ({char}($eip-1)) (char)0x90 "ipxe_test_step" # nop = 0x90
|
2008-06-05 16:31:48 +02:00
|
|
|
end
|
|
|
|
|
2010-04-19 21:16:01 +02:00
|
|
|
define ipxe_test_awatch
|
2008-06-12 17:56:20 +02:00
|
|
|
awatch watch_me
|
|
|
|
|
|
|
|
c
|
2010-04-19 21:16:01 +02:00
|
|
|
ipxe_assert $ecx 0x600d0000 "ipxe_test_awatch read"
|
2008-06-12 17:56:20 +02:00
|
|
|
if $ecx == 0x600d0000
|
|
|
|
c
|
|
|
|
end
|
|
|
|
|
|
|
|
c
|
2010-04-19 21:16:01 +02:00
|
|
|
ipxe_assert $ecx 0x600d0001 "ipxe_test_awatch write"
|
2008-06-12 17:56:20 +02:00
|
|
|
if $ecx == 0x600d0001
|
|
|
|
c
|
|
|
|
end
|
|
|
|
|
|
|
|
delete
|
|
|
|
end
|
|
|
|
|
2010-04-19 21:16:01 +02:00
|
|
|
define ipxe_test_watch
|
2008-06-12 17:56:20 +02:00
|
|
|
watch watch_me
|
|
|
|
c
|
2010-04-19 21:16:01 +02:00
|
|
|
ipxe_assert $ecx 0x600d0002 "ipxe_test_watch"
|
2008-06-12 17:56:20 +02:00
|
|
|
if $ecx == 0x600d0002
|
|
|
|
c
|
|
|
|
end
|
|
|
|
delete
|
|
|
|
end
|
|
|
|
|
2010-04-19 21:16:01 +02:00
|
|
|
ipxe_load_symbols
|
|
|
|
ipxe_start_tests
|
|
|
|
ipxe_test_regs_read
|
|
|
|
ipxe_test_regs_write
|
|
|
|
ipxe_test_mem_read
|
|
|
|
ipxe_test_mem_write
|
|
|
|
ipxe_test_step
|
|
|
|
ipxe_test_awatch
|
|
|
|
ipxe_test_watch
|