diff options
author | Doug Evans <dje@google.com> | 2009-02-17 06:14:17 +0000 |
---|---|---|
committer | Doug Evans <dje@google.com> | 2009-02-17 06:14:17 +0000 |
commit | 1903f0e64bb6f600388af42a7af7aff02e70bdef (patch) | |
tree | 38b72309b83508ccf9dc30ebce511f549d2fb988 /gdb/testsuite | |
parent | ed38e4b97416eca6ee43599ce82ccf4306adca18 (diff) | |
download | gdb-1903f0e64bb6f600388af42a7af7aff02e70bdef.zip gdb-1903f0e64bb6f600388af42a7af7aff02e70bdef.tar.gz gdb-1903f0e64bb6f600388af42a7af7aff02e70bdef.tar.bz2 |
* amd64-tdep.c (amd64_skip_prefixes): Renamed from skip_prefixes.
All callers updated.
(amd64_get_insn_details): Handle more 3-byte opcode insns.
(amd64_breakpoint_p): Delete.
(amd64_displaced_step_fixup): When fixing up after stepping an int3,
don't back up pc to the start of the int3.
* i386-tdep.c: #include opcode/i386.h.
(i386_skip_prefixes): New function.
(i386_absolute_jmp_p): Constify argument.
(i386_absolute_call_p,i386_ret_p,i386_call_p,i386_syscall_p): Ditto.
(i386_breakpoint_p): Delete.
(i386_displaced_step_fixup): Handle unnecessary or redundant prefixes.
When fixing up after stepping an int3, don't back up pc to the start
of the int3.
* gdb.arch/amd64-disp-step.S (test_int3): New test.
* gdb.arch/amd64-disp-step.exp (test_int3): New test.
* gdb.arch/i386-disp-step.S (test_prefixed_abs_jump): New test.
(test_prefixed_syscall,test_int3): New tests.
* gdb.arch/i386-disp-step.exp (test_prefixed_abs_jump): New test.
(test_prefixed_syscall,test_int3): New tests.
Diffstat (limited to 'gdb/testsuite')
-rw-r--r-- | gdb/testsuite/ChangeLog | 9 | ||||
-rw-r--r-- | gdb/testsuite/gdb.arch/amd64-disp-step.S | 28 | ||||
-rw-r--r-- | gdb/testsuite/gdb.arch/amd64-disp-step.exp | 20 | ||||
-rw-r--r-- | gdb/testsuite/gdb.arch/i386-disp-step.S | 65 | ||||
-rw-r--r-- | gdb/testsuite/gdb.arch/i386-disp-step.exp | 58 |
5 files changed, 177 insertions, 3 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index e760e8a..24dc96d 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2009-02-16 Doug Evans <dje@google.com> + + * gdb.arch/amd64-disp-step.S (test_int3): New test. + * gdb.arch/amd64-disp-step.exp (test_int3): New test. + * gdb.arch/i386-disp-step.S (test_prefixed_abs_jump): New test. + (test_prefixed_syscall,test_int3): New tests. + * gdb.arch/i386-disp-step.exp (test_prefixed_abs_jump): New test. + (test_prefixed_syscall,test_int3): New tests. + 2009-02-14 Vladimir Prus <vladimir@codesourcery.com> * lib/mi-support.exp (mi_expect_stop): Adjust the order of fields. diff --git a/gdb/testsuite/gdb.arch/amd64-disp-step.S b/gdb/testsuite/gdb.arch/amd64-disp-step.S index 45eeb9b..1ce0184 100644 --- a/gdb/testsuite/gdb.arch/amd64-disp-step.S +++ b/gdb/testsuite/gdb.arch/amd64-disp-step.S @@ -23,6 +23,8 @@ main: nop +/***********************************************/ + /* test call/ret */ .global test_call @@ -33,6 +35,8 @@ test_call: test_ret_end: nop +/***********************************************/ + /* test abs-jmp/rep-ret */ test_abs_jmp_setup: @@ -48,6 +52,8 @@ test_abs_jmp_return: test_rep_ret_end: nop +/***********************************************/ + /* test syscall */ .global test_syscall @@ -58,6 +64,24 @@ test_syscall: test_syscall_end: nop +/***********************************************/ + +/* Test stepping over int3. + The prefixes are pointless, but it's possible, so we exercise it. */ + + nop + .global test_int3 +test_int3: + repz + repz + int3 + nop + .global test_int3_end +test_int3_end: + nop + +/***********************************************/ + /* test rip-relative GDB picks a spare register to hold the rip-relative address. Exercise all the possibilities (rax-rdi, sans rsp). */ @@ -118,6 +142,8 @@ test_rip_rdi_end: answer: .8byte 42 +/***********************************************/ + /* all done */ done: @@ -139,6 +165,8 @@ test_call_end: test_ret: ret +/***********************************************/ + /* subroutine to help test abs-jmp/rep-ret */ test_abs_jmp_subr: diff --git a/gdb/testsuite/gdb.arch/amd64-disp-step.exp b/gdb/testsuite/gdb.arch/amd64-disp-step.exp index 26ebe59..3b0f83b 100644 --- a/gdb/testsuite/gdb.arch/amd64-disp-step.exp +++ b/gdb/testsuite/gdb.arch/amd64-disp-step.exp @@ -141,6 +141,26 @@ gdb_test "continue" \ ########################################## +# int3 (with prefixes) +# These don't occur in normal code, but gdb should still DTRT. + +gdb_test "break test_int3" \ + "Breakpoint.*at.* file .*$srcfile, line.*" \ + "break test_int3" +gdb_test "break test_int3_end" \ + "Breakpoint.*at.* file .*$srcfile, line.*" \ + "break test_int3_end" + +gdb_test "continue" \ + "Continuing.*Breakpoint.*, test_int3 ().*" \ + "continue to test_int3" + +gdb_test "continue" \ + "Continuing.*Breakpoint.*, test_int3_end ().*" \ + "continue to test_int3_end" + +########################################## + # Test rip-relative. # GDB picks a spare register to hold the rip-relative address. # Exercise all the possibilities (rax-rdi, sans rsp). diff --git a/gdb/testsuite/gdb.arch/i386-disp-step.S b/gdb/testsuite/gdb.arch/i386-disp-step.S index a56ff1c..2d5c372 100644 --- a/gdb/testsuite/gdb.arch/i386-disp-step.S +++ b/gdb/testsuite/gdb.arch/i386-disp-step.S @@ -23,8 +23,11 @@ main: nop -/* test call/ret */ +/***********************************************/ + +/* Test call/ret. */ + nop .global test_call test_call: call test_call_subr @@ -33,16 +36,72 @@ test_call: test_ret_end: nop -/* test syscall */ +/***********************************************/ + +/* Absolute jump with leading prefixes. + These don't occur in normal code, but gdb should still DTRT. */ + + nop + .global test_prefixed_abs_jump +test_prefixed_abs_jump: + ds + jmp *test_prefixed_abs_jump_addr + .data +test_prefixed_abs_jump_addr: + .4byte test_prefixed_abs_jump_target + .text +test_prefixed_abs_jump_target: + nop + .global test_prefixed_abs_jump_end +test_prefixed_abs_jump_end: + nop + +/***********************************************/ + +/* Test syscall. */ - .global test_syscall mov $0x14,%eax /* getpid */ + .global test_syscall test_syscall: int $0x80 nop + .global test_syscall_end test_syscall_end: nop +/***********************************************/ + +/* Test syscall again, this time with a prefix. + These don't occur in normal code, but gdb should still DTRT. */ + + mov $0x14,%eax /* getpid */ + .global test_prefixed_syscall +test_prefixed_syscall: + repnz + int $0x80 + nop + .global test_prefixed_syscall_end +test_prefixed_syscall_end: + nop + +/***********************************************/ + +/* Test stepping over int3. + The prefixes are pointless, but it's possible, so we exercise it. */ + + nop + .global test_int3 +test_int3: + repz + repz + int3 + nop + .global test_int3_end +test_int3_end: + nop + +/***********************************************/ + /* all done */ pushl $0 diff --git a/gdb/testsuite/gdb.arch/i386-disp-step.exp b/gdb/testsuite/gdb.arch/i386-disp-step.exp index 06c5fb2..5fc2af8 100644 --- a/gdb/testsuite/gdb.arch/i386-disp-step.exp +++ b/gdb/testsuite/gdb.arch/i386-disp-step.exp @@ -89,6 +89,25 @@ gdb_test "continue" \ ########################################## +# Absolute jump with leading prefixes. +# These don't occur in normal code, but gdb should still DTRT. + +gdb_test "break test_prefixed_abs_jump" \ + "Breakpoint.*at.* file .*$srcfile, line.*" \ + "break test_prefixed_abs_jump" +gdb_test "break test_prefixed_abs_jump_end" \ + "Breakpoint.*at.* file .*$srcfile, line.*" \ + "break test_prefixed_abs_jump_end" + +gdb_test "continue" \ + "Continuing.*Breakpoint.*, test_prefixed_abs_jump ().*" \ + "continue to test_prefixed_abs_jump" +gdb_test "continue" \ + "Continuing.*Breakpoint.*, test_prefixed_abs_jump_end ().*" \ + "continue to test_prefixed_abs_jump_end" + +########################################## + # Test syscall. gdb_test "break test_syscall" \ @@ -107,6 +126,45 @@ gdb_test "continue" \ ########################################## +# Test prefixed syscall. +# These don't occur in normal code, but gdb should still DTRT. + +gdb_test "break test_prefixed_syscall" \ + "Breakpoint.*at.* file .*$srcfile, line.*" \ + "break test_prefixed_syscall" +gdb_test "break test_prefixed_syscall_end" \ + "Breakpoint.*at.* file .*$srcfile, line.*" \ + "break test_prefixed_syscall_end" + +gdb_test "continue" \ + "Continuing.*Breakpoint.*, test_prefixed_syscall ().*" \ + "continue to test_prefixed_syscall" +gdb_test "continue" \ + "Continuing.*Breakpoint.*, test_prefixed_syscall_end ().*" \ + "continue to test_prefixed_syscall_end" + +########################################## + +# int3 (with prefixes) +# These don't occur in normal code, but gdb should still DTRT. + +gdb_test "break test_int3" \ + "Breakpoint.*at.* file .*$srcfile, line.*" \ + "break test_int3" +gdb_test "break test_int3_end" \ + "Breakpoint.*at.* file .*$srcfile, line.*" \ + "break test_int3_end" + +gdb_test "continue" \ + "Continuing.*Breakpoint.*, test_int3 ().*" \ + "continue to test_int3" + +gdb_test "continue" \ + "Continuing.*Breakpoint.*, test_int3_end ().*" \ + "continue to test_int3_end" + +########################################## + # Done, run program to exit. gdb_continue_to_end "i386-disp-step" |