mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-05 00:04:22 +08:00
2011-05-05 Yao Qi <yao@codesourcery.com>
* gdb.arch/arm-disp-step.S(test_ldr_literal): New. (test_adr_32bit, test_pop_pc): New. * gdb.arch/arm-disp-step.exp (test_ldr_literal): New. (test_adr_32bit, test_pop_pc): New.
This commit is contained in:
parent
e41e646212
commit
0c51be18c4
@ -1,3 +1,10 @@
|
|||||||
|
2011-05-05 Yao Qi <yao@codesourcery.com>
|
||||||
|
|
||||||
|
* gdb.arch/arm-disp-step.S(test_ldr_literal): New.
|
||||||
|
(test_adr_32bit, test_pop_pc): New.
|
||||||
|
* gdb.arch/arm-disp-step.exp (test_ldr_literal): New.
|
||||||
|
(test_adr_32bit, test_pop_pc): New.
|
||||||
|
|
||||||
2011-05-04 Joseph Myers <joseph@codesourcery.com>
|
2011-05-04 Joseph Myers <joseph@codesourcery.com>
|
||||||
|
|
||||||
* gdb.base/a2-run.exp (strongarm-*-coff): Don't handle target.
|
* gdb.base/a2-run.exp (strongarm-*-coff): Don't handle target.
|
||||||
|
@ -48,6 +48,20 @@ test_ret_end:
|
|||||||
bl test_ldm_stm_pc
|
bl test_ldm_stm_pc
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Test ldrX literal in ARM */
|
||||||
|
#if !defined (__thumb__)
|
||||||
|
bl test_ldr_literal
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Test 32-bit adr in ARM */
|
||||||
|
#if !defined(__thumb__)
|
||||||
|
bl test_adr_32bit
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(__thumb__)
|
||||||
|
bl test_pop_pc
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Test str in ARM mode and Thumb-2 */
|
/* Test str in ARM mode and Thumb-2 */
|
||||||
#if !defined(__thumb__)
|
#if !defined(__thumb__)
|
||||||
bl test_str_pc
|
bl test_str_pc
|
||||||
@ -123,6 +137,71 @@ test_ldm_stm_pc_ret:
|
|||||||
.size test_ldm_stm_pc, .-test_ldm_stm_pc
|
.size test_ldm_stm_pc, .-test_ldm_stm_pc
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if !defined (__thumb__)
|
||||||
|
.global test_ldr_literal
|
||||||
|
.type test_ldr_literal, %function
|
||||||
|
test_ldr_literal:
|
||||||
|
ldrh r0, [pc]
|
||||||
|
.global test_ldrsb_literal
|
||||||
|
test_ldrsb_literal:
|
||||||
|
ldrsb r0, [pc]
|
||||||
|
.global test_ldrsh_literal
|
||||||
|
test_ldrsh_literal:
|
||||||
|
ldrsh r0, [pc]
|
||||||
|
.global test_ldr_literal_end
|
||||||
|
test_ldr_literal_end:
|
||||||
|
bx lr
|
||||||
|
.size test_ldr_literal, .-test_ldr_literal
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined(__thumb__)
|
||||||
|
.global test_adr_32bit
|
||||||
|
#if defined(__thumb2__)
|
||||||
|
.code 16
|
||||||
|
.thumb_func
|
||||||
|
#endif
|
||||||
|
test_adr_32bit:
|
||||||
|
adr r0, .L6
|
||||||
|
nop
|
||||||
|
.L6:
|
||||||
|
nop
|
||||||
|
.global test_adr_32bit_after
|
||||||
|
test_adr_32bit_after:
|
||||||
|
adr r0, .L6
|
||||||
|
|
||||||
|
.global test_adr_32bit_end
|
||||||
|
test_adr_32bit_end:
|
||||||
|
bx lr
|
||||||
|
.size test_adr_32bit, .-test_adr_32bit
|
||||||
|
#endif
|
||||||
|
|
||||||
|
.global test_pop_pc
|
||||||
|
.type test_pop_pc, %function
|
||||||
|
#if defined(__thumb__)
|
||||||
|
.code 16
|
||||||
|
.thumb_func
|
||||||
|
#endif
|
||||||
|
|
||||||
|
test_pop_pc:
|
||||||
|
ldr r1, .L5
|
||||||
|
#if defined(__thumb__)
|
||||||
|
movs r0, #1
|
||||||
|
orrs r1, r0
|
||||||
|
#endif
|
||||||
|
push {r1}
|
||||||
|
push {r1}
|
||||||
|
.global test_pop_pc_1
|
||||||
|
test_pop_pc_1:
|
||||||
|
pop {r1, pc}
|
||||||
|
.global test_pop_pc_ret
|
||||||
|
test_pop_pc_ret:
|
||||||
|
bx lr
|
||||||
|
.align 2
|
||||||
|
.L5:
|
||||||
|
.word test_pop_pc_ret
|
||||||
|
.size test_pop_pc, .-test_pop_pc
|
||||||
|
|
||||||
#if !defined(__thumb__)
|
#if !defined(__thumb__)
|
||||||
#if defined (__thumb2__)
|
#if defined (__thumb2__)
|
||||||
.code 16
|
.code 16
|
||||||
|
@ -68,6 +68,42 @@ proc test_ldm_stm_pc {} {
|
|||||||
gdb_continue_to_breakpoint "continue to test_ldm_stm_pc_ret" \
|
gdb_continue_to_breakpoint "continue to test_ldm_stm_pc_ret" \
|
||||||
".*bx lr.*"
|
".*bx lr.*"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#########################################
|
||||||
|
# Test ldrX literal
|
||||||
|
proc test_ldr_literal {} {
|
||||||
|
global srcfile
|
||||||
|
global gdb_prompt
|
||||||
|
|
||||||
|
gdb_test_multiple "break *test_ldr_literal" "break test_ldr_literal" {
|
||||||
|
-re "Breakpoint.*at.* file .*$srcfile, line.*\r\n$gdb_prompt $" {
|
||||||
|
pass "break test_ldr_literal"
|
||||||
|
}
|
||||||
|
-re "No symbol.*\r\n$gdb_prompt $" {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gdb_test "break *test_ldrsb_literal" \
|
||||||
|
"Breakpoint.*at.* file .*$srcfile, line.*" \
|
||||||
|
"break test_ldrsb_literal"
|
||||||
|
gdb_test "break *test_ldrsh_literal" \
|
||||||
|
"Breakpoint.*at.* file .*$srcfile, line.*" \
|
||||||
|
"break test_ldrsh_literal"
|
||||||
|
gdb_test "break *test_ldr_literal_end" \
|
||||||
|
"Breakpoint.*at.* file .*$srcfile, line.*" \
|
||||||
|
"break test_test_ldr_literal_end"
|
||||||
|
|
||||||
|
gdb_continue_to_breakpoint "continue to test_ldr_literal" \
|
||||||
|
".*ldrh.*r0\,.*\[pc\].*"
|
||||||
|
gdb_continue_to_breakpoint "continue to test_ldrsb_literal" \
|
||||||
|
".*ldrsb.*r0\,.*\[pc\].*"
|
||||||
|
gdb_continue_to_breakpoint "continue to test_ldrsh_literal" \
|
||||||
|
".*ldrsh.*r0\,.*\[pc\].*"
|
||||||
|
gdb_continue_to_breakpoint "continue to test_ldr_literal_ret" \
|
||||||
|
".*bx lr.*"
|
||||||
|
}
|
||||||
|
|
||||||
##########################################
|
##########################################
|
||||||
# Test call/ret.
|
# Test call/ret.
|
||||||
proc test_call_ret {} {
|
proc test_call_ret {} {
|
||||||
@ -126,6 +162,52 @@ proc test_ldr_from_pc {} {
|
|||||||
".*bx lr.*"
|
".*bx lr.*"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
proc test_adr_32bit {} {
|
||||||
|
global srcfile
|
||||||
|
global gdb_prompt
|
||||||
|
|
||||||
|
gdb_test_multiple "break *test_adr_32bit" "break test_adr_32bit" {
|
||||||
|
-re "Breakpoint.*at.* file .*$srcfile, line.*\r\n$gdb_prompt $" {
|
||||||
|
pass "break test_adr"
|
||||||
|
}
|
||||||
|
-re "No symbol.*\r\n$gdb_prompt $" {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gdb_test "break *test_adr_32bit_after" \
|
||||||
|
"Breakpoint.*at.* file .*$srcfile, line.*" \
|
||||||
|
"break test_adr_32bit_after"
|
||||||
|
|
||||||
|
gdb_test "break *test_adr_32bit_end" \
|
||||||
|
"Breakpoint.*at.* file .*$srcfile, line.*" \
|
||||||
|
"break test_adr_32bit_end"
|
||||||
|
|
||||||
|
gdb_continue_to_breakpoint "test_adr_32bit" \
|
||||||
|
".*adr.*r0\,.*\.L6.*"
|
||||||
|
gdb_continue_to_breakpoint "test_adr_32bit_after" \
|
||||||
|
".*adr.*r0\,.*\.L6.*"
|
||||||
|
gdb_continue_to_breakpoint "test_adr_32bit_end" \
|
||||||
|
".*bx lr.*"
|
||||||
|
}
|
||||||
|
|
||||||
|
#########################################
|
||||||
|
# Test pop to PC
|
||||||
|
proc test_pop_pc {} {
|
||||||
|
global srcfile
|
||||||
|
gdb_test "break *test_pop_pc_1" \
|
||||||
|
"Breakpoint.*at.* file .*$srcfile, line.*" \
|
||||||
|
"break test_pop_pc"
|
||||||
|
gdb_test "break *test_pop_pc_ret" \
|
||||||
|
"Breakpoint.*at.* file .*$srcfile, line.*" \
|
||||||
|
"break test_pop_pc_ret"
|
||||||
|
|
||||||
|
gdb_continue_to_breakpoint "continue to test_pop_pc" \
|
||||||
|
".*b.*\{r1\, pc\}.*"
|
||||||
|
gdb_continue_to_breakpoint "continue to test_pop_pc_ret" \
|
||||||
|
".*bx lr.*"
|
||||||
|
}
|
||||||
|
|
||||||
###########################################
|
###########################################
|
||||||
|
|
||||||
proc test_str_pc {} {
|
proc test_str_pc {} {
|
||||||
@ -201,6 +283,12 @@ test_ldr_from_pc
|
|||||||
|
|
||||||
test_ldm_stm_pc
|
test_ldm_stm_pc
|
||||||
|
|
||||||
|
test_ldr_literal
|
||||||
|
|
||||||
|
test_adr_32bit
|
||||||
|
|
||||||
|
test_pop_pc
|
||||||
|
|
||||||
test_str_pc
|
test_str_pc
|
||||||
##########################################
|
##########################################
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user