david/ipxe
Archived
1
0
This repository has been archived on 2020-12-06. You can view files and clone it, but cannot push or open issues or pull requests.
ipxe/src/tests/gdbstub_test.gdb
Stefan Hajnoczi 3715c8c721 [GDB] Zero-extend 16-bit segment registers
When the 16-bit segment registers are accessed using 32-bit instructions
the high order bytes are undefined on older CPUs.  We now explicitly
zero the high order bytes when snapshotting the CPU state.  This ensures
that the GDB stub reports consistent values for the segment registers.
2008-06-30 19:19:48 +01:00

117 lines
2.6 KiB
Plaintext
Executable File

#!/usr/bin/gdb -x
# Test suite for GDB remote debugging
# Run:
# make bin/gpxe.hd.tmp
# make
# gdb
# (gdb) target remote :TCPPORT
# OR
# (gdb) target remote udp:IP:UDPPORT
# (gdb) source tests/gdbstub_test.gdb
define gpxe_load_symbols
file bin/gpxe.hd.tmp
end
define gpxe_assert
if $arg0 != $arg1
echo FAIL $arg2\n
else
echo PASS $arg2\n
end
end
define gpxe_start_tests
jump gdbstub_test
end
define gpxe_test_regs_read
gpxe_assert $eax 0xea010203 "gpxe_test_regs_read eax"
gpxe_assert $ebx 0xeb040506 "gpxe_test_regs_read ebx"
gpxe_assert $ecx 0xec070809 "gpxe_test_regs_read ecx"
gpxe_assert $edx 0xed0a0b0c "gpxe_test_regs_read edx"
gpxe_assert $esi 0x510d0e0f "gpxe_test_regs_read esi"
gpxe_assert $edi 0xd1102030 "gpxe_test_regs_read edi"
end
define gpxe_test_regs_write
set $eax = 0xea112233
set $ebx = 0xeb445566
set $ecx = 0xec778899
set $edx = 0xedaabbcc
set $esi = 0x51ddeeff
set $edi = 0xd1010203
c
gpxe_assert $eax 0xea112233 "gpxe_test_regs_write eax"
gpxe_assert $ebx 0xeb445566 "gpxe_test_regs_write ebx"
gpxe_assert $ecx 0xec778899 "gpxe_test_regs_write ecx"
gpxe_assert $edx 0xedaabbcc "gpxe_test_regs_write edx"
gpxe_assert $esi 0x51ddeeff "gpxe_test_regs_write esi"
gpxe_assert $edi 0xd1010203 "gpxe_test_regs_write edi"
# This assumes segment selectors are always 0x10 or 0x8 (for code).
gpxe_assert $cs 0x08 "gpxe_test_regs_write cs"
gpxe_assert $ds 0x10 "gpxe_test_regs_write ds"
end
define gpxe_test_mem_read
c
gpxe_assert ({int}($esp+4)) 0x11223344 "gpxe_test_mem_read int"
gpxe_assert ({short}($esp+2)) 0x5566 "gpxe_test_mem_read short"
gpxe_assert ({char}($esp)) 0x77 "gpxe_test_mem_read char"
end
define gpxe_test_mem_write
set ({int}($esp+4)) = 0xaabbccdd
set ({short}($esp+2)) = 0xeeff
set ({char}($esp)) = 0x99
c
gpxe_assert ({int}($esp+4)) 0xaabbccdd "gpxe_test_mem_write int"
gpxe_assert ({short}($esp+2)) (short)0xeeff "gpxe_test_mem_write short"
gpxe_assert ({char}($esp)) (char)0x99 "gpxe_test_mem_write char"
end
define gpxe_test_step
c
si
gpxe_assert ({char}($eip-1)) (char)0x90 "gpxe_test_step" # nop = 0x90
end
define gpxe_test_awatch
awatch watch_me
c
gpxe_assert $ecx 0x600d0000 "gpxe_test_awatch read"
if $ecx == 0x600d0000
c
end
c
gpxe_assert $ecx 0x600d0001 "gpxe_test_awatch write"
if $ecx == 0x600d0001
c
end
delete
end
define gpxe_test_watch
watch watch_me
c
gpxe_assert $ecx 0x600d0002 "gpxe_test_watch"
if $ecx == 0x600d0002
c
end
delete
end
gpxe_load_symbols
gpxe_start_tests
gpxe_test_regs_read
gpxe_test_regs_write
gpxe_test_mem_read
gpxe_test_mem_write
gpxe_test_step
gpxe_test_awatch
gpxe_test_watch