2017-01-01 07:50:51 +01:00
|
|
|
# Copyright 2003-2017 Free Software Foundation, Inc.
|
2003-08-03 03:57:13 +02:00
|
|
|
|
|
|
|
# This program is free software; you can redistribute it and/or modify
|
|
|
|
# it under the terms of the GNU General Public License as published by
|
2007-08-23 20:14:19 +02:00
|
|
|
# the Free Software Foundation; either version 3 of the License, or
|
2003-08-03 03:57:13 +02:00
|
|
|
# (at your option) any later version.
|
2007-08-23 20:14:19 +02:00
|
|
|
#
|
2003-08-03 03:57:13 +02:00
|
|
|
# This program is distributed in the hope that it will be useful,
|
|
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
# GNU General Public License for more details.
|
2007-08-23 20:14:19 +02:00
|
|
|
#
|
2003-08-03 03:57:13 +02:00
|
|
|
# You should have received a copy of the GNU General Public License
|
2007-08-23 20:14:19 +02:00
|
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
2003-08-03 03:57:13 +02:00
|
|
|
|
|
|
|
# This file was written by Elena Zannoni (ezannoni@cygnus.com)
|
|
|
|
|
|
|
|
|
2017-10-12 19:20:25 +02:00
|
|
|
# This testcase cannot use runto_main because of the different prompt
|
|
|
|
# we get when using annotation level 2.
|
2003-08-03 03:57:13 +02:00
|
|
|
#
|
2017-10-12 19:20:25 +02:00
|
|
|
if ![target_can_use_run_cmd] {
|
2003-08-03 03:57:13 +02:00
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# test running programs
|
|
|
|
#
|
|
|
|
|
test suite update - gdb.base/[ab]
Convert files gdb.base/[ab]*.exp to use standard_output_file et al.
* a2-run.exp, all-bin.exp, annota1.exp, annota3.exp, anon.exp,
args.exp, arithmet.exp, arrayidx.exp, assign.exp, async-shell.exp,
async.exp, attach-pie-misread.exp, attach-pie-noexec.exp,
attach-twice.exp, attach.exp, auxv.exp, bang.exp, bfp-test.exp,
bigcore.exp, bitfields.exp, bitfields2.exp, break-entry.exp,
break-interp.exp, break-on-linker-gcd-function.exp,
breakpoint-shadow.exp: Use standard_testfile,
standard_output_file, prepare_for_testing, clean_restart.
2013-06-27 20:47:53 +02:00
|
|
|
standard_testfile .c
|
2003-08-03 03:57:13 +02:00
|
|
|
|
2006-03-07 16:23:33 +01:00
|
|
|
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug nowarnings}] != "" } {
|
2016-12-01 21:47:50 +01:00
|
|
|
untested "failed to compile"
|
2006-08-10 07:27:22 +02:00
|
|
|
return -1
|
2003-08-03 03:57:13 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
test suite update - gdb.base/[ab]
Convert files gdb.base/[ab]*.exp to use standard_output_file et al.
* a2-run.exp, all-bin.exp, annota1.exp, annota3.exp, anon.exp,
args.exp, arithmet.exp, arrayidx.exp, assign.exp, async-shell.exp,
async.exp, attach-pie-misread.exp, attach-pie-noexec.exp,
attach-twice.exp, attach.exp, auxv.exp, bang.exp, bfp-test.exp,
bigcore.exp, bitfields.exp, bitfields2.exp, break-entry.exp,
break-interp.exp, break-on-linker-gcd-function.exp,
breakpoint-shadow.exp: Use standard_testfile,
standard_output_file, prepare_for_testing, clean_restart.
2013-06-27 20:47:53 +02:00
|
|
|
clean_restart ${binfile}
|
2003-08-03 03:57:13 +02:00
|
|
|
|
|
|
|
# The commands we test here produce many lines of output; disable "press
|
|
|
|
# <return> to continue" prompts.
|
2010-05-26 20:05:25 +02:00
|
|
|
gdb_test_no_output "set height 0"
|
2003-08-03 03:57:13 +02:00
|
|
|
|
|
|
|
#
|
Fix fail in gdb.base/annota1.exp and gdb.base/annota3.exp
Hi,
I am seeing the fail below on aarch64-linux with gcc 4.9.2,
break main
Breakpoint 1 at 0x4006e8: file binutils-gdb/gdb/testsuite/gdb.base/annota1.c, line 14.^M
(gdb) FAIL: gdb.base/annota1.exp: breakpoint main
the test expects the breakpoint is set on line 15. Let us look at
the main function,
12 int
13 main (void)
14 {
15 int my_array[3] = { 1, 2, 3 }; /* break main */
16
17 value = 7;
18
19 #ifdef SIGUSR1
20 signal (SIGUSR1, handle_USR1);
21 #endif
(gdb) disassemble main
Dump of assembler code for function main:
0x00000000004006e0 <+0>: stp x29, x30, [sp,#-48]!
0x00000000004006e4 <+4>: mov x29, sp
0x00000000004006e8 <+8>: adrp x0, 0x411000 <signal@got.plt>
0x00000000004006ec <+12>: add x0, x0, #0x40
the breakpoint is set on the right address after skipping prologue, but
0x00000000004006e8 is mapped to the line 14, as shown below,
(gdb) maintenance info line-table
objfile: /home/yao.qi/source/build-aarch64/gdb/testsuite/outputs/gdb.base/annota1/annota1 ((struct objfile *) 0x2b0e1850)
compunit_symtab: ((struct compunit_symtab *) 0x2b0ded50)
symtab: /home/yao.qi/source/binutils-gdb/gdb/testsuite/gdb.base/annota1.c ((struct symtab *) 0x2b0dedd0)
linetable: ((struct linetable *) 0x2b12c8b0):
INDEX LINE ADDRESS
0 7 0x00000000004006d0
1 8 0x00000000004006d8
2 14 0x00000000004006e0
3 14 0x00000000004006e8
4 15 0x00000000004006fc
so GDB does nothing wrong. Program hits breakpoint on either line 14
or line 15 is right to me. With anther gcc (4.9.3), the line-table looks
correct, and no test fail. Instead of setting breakpoint on main and
assuming the line is what we get from the source, we can set breakpoint
on that line. On the other hand, the test prints the values of the
array and check, so we need to set breakpoint on the line setting the
values of array and "next", rather than setting the breakpoint on main.
gdb/testsuite:
2016-04-22 Yao Qi <yao.qi@linaro.org>
* gdb.base/annota1.exp: Set breakpoint on line $main_line.
* gdb.base/annota3.exp: Likewise.
2016-04-22 16:35:07 +02:00
|
|
|
# break in main
|
2003-08-03 03:57:13 +02:00
|
|
|
#
|
2012-02-28 23:40:48 +01:00
|
|
|
|
|
|
|
set main_line [gdb_get_line_number "break main"]
|
|
|
|
|
Fix fail in gdb.base/annota1.exp and gdb.base/annota3.exp
Hi,
I am seeing the fail below on aarch64-linux with gcc 4.9.2,
break main
Breakpoint 1 at 0x4006e8: file binutils-gdb/gdb/testsuite/gdb.base/annota1.c, line 14.^M
(gdb) FAIL: gdb.base/annota1.exp: breakpoint main
the test expects the breakpoint is set on line 15. Let us look at
the main function,
12 int
13 main (void)
14 {
15 int my_array[3] = { 1, 2, 3 }; /* break main */
16
17 value = 7;
18
19 #ifdef SIGUSR1
20 signal (SIGUSR1, handle_USR1);
21 #endif
(gdb) disassemble main
Dump of assembler code for function main:
0x00000000004006e0 <+0>: stp x29, x30, [sp,#-48]!
0x00000000004006e4 <+4>: mov x29, sp
0x00000000004006e8 <+8>: adrp x0, 0x411000 <signal@got.plt>
0x00000000004006ec <+12>: add x0, x0, #0x40
the breakpoint is set on the right address after skipping prologue, but
0x00000000004006e8 is mapped to the line 14, as shown below,
(gdb) maintenance info line-table
objfile: /home/yao.qi/source/build-aarch64/gdb/testsuite/outputs/gdb.base/annota1/annota1 ((struct objfile *) 0x2b0e1850)
compunit_symtab: ((struct compunit_symtab *) 0x2b0ded50)
symtab: /home/yao.qi/source/binutils-gdb/gdb/testsuite/gdb.base/annota1.c ((struct symtab *) 0x2b0dedd0)
linetable: ((struct linetable *) 0x2b12c8b0):
INDEX LINE ADDRESS
0 7 0x00000000004006d0
1 8 0x00000000004006d8
2 14 0x00000000004006e0
3 14 0x00000000004006e8
4 15 0x00000000004006fc
so GDB does nothing wrong. Program hits breakpoint on either line 14
or line 15 is right to me. With anther gcc (4.9.3), the line-table looks
correct, and no test fail. Instead of setting breakpoint on main and
assuming the line is what we get from the source, we can set breakpoint
on that line. On the other hand, the test prints the values of the
array and check, so we need to set breakpoint on the line setting the
values of array and "next", rather than setting the breakpoint on main.
gdb/testsuite:
2016-04-22 Yao Qi <yao.qi@linaro.org>
* gdb.base/annota1.exp: Set breakpoint on line $main_line.
* gdb.base/annota3.exp: Likewise.
2016-04-22 16:35:07 +02:00
|
|
|
gdb_test "break ${srcfile}:${main_line}" \
|
2012-02-28 23:40:48 +01:00
|
|
|
"Breakpoint.*at.* file .*$srcfile, line $main_line\\." \
|
2003-08-03 03:57:13 +02:00
|
|
|
"breakpoint main"
|
|
|
|
|
|
|
|
|
|
|
|
# NOTE: this prompt is OK only when the annotation level is > 1
|
|
|
|
|
|
|
|
# NOTE: When this prompt is in use the gdb_test procedure cannot be
|
|
|
|
# used because it assumes that the last char after the gdb_prompt is a
|
|
|
|
# white space. This is not true with this annotated prompt. So we must
|
|
|
|
# use send_gdb and gdb_expect or gdb_expect_list.
|
|
|
|
|
|
|
|
set old_gdb_prompt $gdb_prompt
|
|
|
|
set gdb_prompt "\r\n\032\032pre-prompt\r\n$gdb_prompt \r\n\032\032prompt\r\n"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# set the annotation level to 3
|
|
|
|
#
|
|
|
|
# of course, this will test:
|
|
|
|
# annotate-pre-prompt
|
|
|
|
# annotate-prompt
|
|
|
|
# annotate-post-prompt (in the next block)
|
|
|
|
#
|
|
|
|
send_gdb "set annotate 3\n"
|
|
|
|
gdb_expect_list "annotation set at level 3" "\r\n$gdb_prompt$" {
|
|
|
|
"set annotate 3"
|
|
|
|
}
|
|
|
|
|
2007-07-02 00:37:52 +02:00
|
|
|
#
|
|
|
|
# if construct:
|
|
|
|
#
|
2010-05-26 20:05:25 +02:00
|
|
|
gdb_test_multiple "if 1" "start if construct" {
|
2007-07-02 00:37:52 +02:00
|
|
|
-re "^if 1\r\n\r\n\032\032post-prompt\r\n\r\n\032\032pre-commands\r\n >\r\n\032\032commands\r\n$" {
|
|
|
|
pass "start if construct"
|
|
|
|
}
|
|
|
|
}
|
2010-05-26 20:05:25 +02:00
|
|
|
|
|
|
|
gdb_test_multiple "end" "end if construct" {
|
2007-07-02 00:37:52 +02:00
|
|
|
-re "^end\r\n\r\n\032\032post-commands\r\n$gdb_prompt$" {
|
|
|
|
pass "end if construct"
|
|
|
|
}
|
|
|
|
}
|
2010-05-26 20:05:25 +02:00
|
|
|
|
2003-08-03 03:57:13 +02:00
|
|
|
#
|
|
|
|
# info break:
|
|
|
|
#
|
|
|
|
send_gdb "info break\n"
|
2012-02-28 23:40:48 +01:00
|
|
|
gdb_expect_list "breakpoint info" "$gdb_prompt$" [concat {
|
2003-08-03 03:57:13 +02:00
|
|
|
"\r\n\032\032post-prompt\r\n"
|
2012-02-28 23:40:48 +01:00
|
|
|
"Num Type Disp Enb Address +What\r\n" } [list \
|
|
|
|
"1 breakpoint keep y 0x\[0-9a-zA-Z\]+ +in main at .*annota3.c:$main_line\r\n"]]
|
2003-08-03 03:57:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# run to a break point will test:
|
|
|
|
#
|
|
|
|
#exp_internal 1
|
|
|
|
send_gdb "run\n"
|
2012-02-28 23:40:48 +01:00
|
|
|
gdb_expect_list "run until main breakpoint" "$gdb_prompt$" [concat {
|
2003-08-03 03:57:13 +02:00
|
|
|
"\r\n\032\032post-prompt\r\n"
|
2007-01-04 21:53:50 +01:00
|
|
|
"Starting program: .*annota3(|\.exe) \r\n"
|
2003-08-03 03:57:13 +02:00
|
|
|
"\r\n\032\032starting\r\n"
|
|
|
|
"\r\n\032\032breakpoint 1\r\n"
|
|
|
|
"\r\n"
|
2006-07-17 09:29:47 +02:00
|
|
|
"Breakpoint 1, "
|
2012-02-28 23:40:48 +01:00
|
|
|
"\r\n\032\032frame-begin 0 0x\[0-9a-z\]+\r\n" } [list \
|
|
|
|
"main \\(\\) at .*annota3.c:$main_line\r\n"] [list \
|
|
|
|
"\r\n\032\032source.*annota3.c:$main_line:.*:beg:0x\[0-9a-z\]+\r\n"] {
|
2003-08-03 03:57:13 +02:00
|
|
|
"\r\n\032\032stopped\r\n"
|
2012-02-28 23:40:48 +01:00
|
|
|
}]
|
2003-08-03 03:57:13 +02:00
|
|
|
#exp_internal 0
|
|
|
|
#exit 0
|
|
|
|
|
|
|
|
#
|
|
|
|
# Let's do a next, to get to a point where the array is initialized
|
|
|
|
# We don't care about the annotated output for this operation, it is the same as
|
|
|
|
# the one produced by run above
|
|
|
|
#
|
|
|
|
send_gdb "next\n"
|
|
|
|
gdb_expect_list "go after array init line" "$gdb_prompt$" {
|
|
|
|
"\r\n\032\032post-prompt\r\n"
|
|
|
|
"\r\n\032\032starting\r\n"
|
|
|
|
"\r\n\032\032source .*annota3.c:\[0-9\]+:\[0-9\]+:beg:0x\[0-9a-z\]+\r\n"
|
|
|
|
"\r\n\032\032stopped\r\n"
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# printing the array:
|
|
|
|
#
|
|
|
|
send_gdb "print my_array\n"
|
|
|
|
gdb_expect_list "print array" "$gdb_prompt$" {
|
|
|
|
"\r\n\032\032post-prompt\r\n"
|
|
|
|
".*= .1, 2, 3.\r\n"
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# this should generate an error message, so to test:
|
|
|
|
# annotate-error-begin
|
|
|
|
# FIXME: annotate-error not tested
|
|
|
|
#
|
|
|
|
|
|
|
|
#exp_internal 1
|
|
|
|
send_gdb "print non_existent_value\n"
|
|
|
|
gdb_expect_list "print non_existent_value" "$gdb_prompt$" {
|
|
|
|
"\r\n\032\032post-prompt\r\n"
|
|
|
|
"\r\n\032\032error-begin\r\n"
|
|
|
|
"No symbol \"non_existent_value\" in current context.\r\n"
|
|
|
|
"\r\n\032\032error\r\n"
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# break at signal handler
|
|
|
|
#
|
|
|
|
send_gdb "break handle_USR1\n"
|
|
|
|
gdb_expect_list "breakpoint handle_USR1" "$gdb_prompt$" {
|
|
|
|
"\r\n\032\032post-prompt\r\n"
|
|
|
|
"Breakpoint.*at 0x\[0-9a-z\]+: file.*annota3.c, line.*\r\n"
|
|
|
|
}
|
|
|
|
|
|
|
|
#
|
|
|
|
# break at printf. When we are stopped at printf, we can test
|
|
|
|
#
|
|
|
|
send_gdb "break printf\n"
|
|
|
|
gdb_expect_list "breakpoint printf" "$gdb_prompt$" {
|
|
|
|
"\r\n\032\032post-prompt\r\n"
|
|
|
|
"Breakpoint.*at 0x\[0-9a-z\]+.*"
|
|
|
|
}
|
|
|
|
|
|
|
|
#
|
|
|
|
# get to printf
|
|
|
|
#
|
|
|
|
send_gdb "continue\n"
|
|
|
|
gdb_expect_list "continue to printf" "$gdb_prompt$" {
|
|
|
|
"\r\n\032\032post-prompt\r\n"
|
|
|
|
"Continuing.\r\n"
|
|
|
|
"\r\n\032\032starting\r\n"
|
|
|
|
"\r\n\032\032breakpoint 3\r\n"
|
|
|
|
"\r\n"
|
|
|
|
"Breakpoint 3, \[^\r\n\]*\r\n"
|
|
|
|
"\r\n\032\032stopped\r\n"
|
|
|
|
}
|
|
|
|
|
|
|
|
send_gdb "backtrace\n"
|
|
|
|
gdb_expect_list "backtrace from shlibrary" "$gdb_prompt$" {
|
|
|
|
"\r\n\032\032post-prompt\r\n"
|
2008-05-16 14:48:08 +02:00
|
|
|
"#0 .* .*printf(@\[^ ]*)? \[^\r\n\]*\r\n"
|
2003-08-03 03:57:13 +02:00
|
|
|
"#1 .* main \[^\r\n\]*\r\n"
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# test printing a frame with some arguments:
|
|
|
|
#
|
|
|
|
|
2004-07-20 02:24:41 +02:00
|
|
|
if [target_info exists gdb,nosignals] {
|
|
|
|
unsupported "send SIGUSR1"
|
|
|
|
unsupported "backtrace @ signal handler"
|
|
|
|
} else {
|
|
|
|
send_gdb "signal SIGUSR1\n"
|
|
|
|
gdb_expect_list "send SIGUSR1" "$gdb_prompt$" {
|
|
|
|
"\r\n\032\032post-prompt\r\n"
|
|
|
|
"Continuing with signal SIGUSR1.\r\n"
|
|
|
|
"\r\n\032\032starting\r\n"
|
|
|
|
"\r\n\032\032breakpoint 2\r\n"
|
2006-07-17 09:29:47 +02:00
|
|
|
"\r\n"
|
|
|
|
"Breakpoint 2, "
|
|
|
|
"\r\n\032\032frame-begin 0 0x\[0-9a-z\]+\r\n"
|
|
|
|
"handle_USR1 \\(sig=\[0-9\]+\\) at .*annota3.c:\[0-9\]+\r\n"
|
2004-07-20 02:24:41 +02:00
|
|
|
"\r\n\032\032source .*annota3.c:\[0-9\]+:\[0-9\]+:beg:0x\[0-9a-z\]+\r\n"
|
|
|
|
"\r\n\032\032stopped\r\n"
|
|
|
|
}
|
2003-08-03 03:57:13 +02:00
|
|
|
|
2004-07-20 02:24:41 +02:00
|
|
|
#
|
|
|
|
# test:
|
|
|
|
#
|
|
|
|
send_gdb "backtrace\n"
|
|
|
|
gdb_expect_list "backtrace @ signal handler" "$gdb_prompt$" {
|
|
|
|
"#0 +handle_USR1 \[^\r\n\]+\r\n"
|
|
|
|
"#1 +.signal handler called.\r\n"
|
2008-05-16 14:48:08 +02:00
|
|
|
"#2 .* .*printf(@\[^ \]*)? \[^\r\n\]+\r\n"
|
2004-07-20 02:24:41 +02:00
|
|
|
"#3 .* main \[^\r\n\]+\r\n"
|
|
|
|
}
|
2003-08-03 03:57:13 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
#
|
|
|
|
# delete all the breakpoints
|
|
|
|
#
|
|
|
|
send_gdb "delete 1\n"
|
|
|
|
gdb_expect_list "delete bp 1" "$gdb_prompt$" {
|
|
|
|
"\r\n\032\032post-prompt\r\n"
|
|
|
|
}
|
|
|
|
|
|
|
|
send_gdb "delete 2\n"
|
|
|
|
gdb_expect_list "delete bp 2" "$gdb_prompt$" {
|
|
|
|
"\r\n\032\032post-prompt\r\n"
|
|
|
|
}
|
|
|
|
|
|
|
|
send_gdb "delete 3\n"
|
|
|
|
gdb_expect_list "delete bp 3" "$gdb_prompt$" {
|
|
|
|
"\r\n\032\032post-prompt\r\n"
|
|
|
|
}
|
|
|
|
|
|
|
|
#
|
Fix fail in gdb.base/annota1.exp and gdb.base/annota3.exp
Hi,
I am seeing the fail below on aarch64-linux with gcc 4.9.2,
break main
Breakpoint 1 at 0x4006e8: file binutils-gdb/gdb/testsuite/gdb.base/annota1.c, line 14.^M
(gdb) FAIL: gdb.base/annota1.exp: breakpoint main
the test expects the breakpoint is set on line 15. Let us look at
the main function,
12 int
13 main (void)
14 {
15 int my_array[3] = { 1, 2, 3 }; /* break main */
16
17 value = 7;
18
19 #ifdef SIGUSR1
20 signal (SIGUSR1, handle_USR1);
21 #endif
(gdb) disassemble main
Dump of assembler code for function main:
0x00000000004006e0 <+0>: stp x29, x30, [sp,#-48]!
0x00000000004006e4 <+4>: mov x29, sp
0x00000000004006e8 <+8>: adrp x0, 0x411000 <signal@got.plt>
0x00000000004006ec <+12>: add x0, x0, #0x40
the breakpoint is set on the right address after skipping prologue, but
0x00000000004006e8 is mapped to the line 14, as shown below,
(gdb) maintenance info line-table
objfile: /home/yao.qi/source/build-aarch64/gdb/testsuite/outputs/gdb.base/annota1/annota1 ((struct objfile *) 0x2b0e1850)
compunit_symtab: ((struct compunit_symtab *) 0x2b0ded50)
symtab: /home/yao.qi/source/binutils-gdb/gdb/testsuite/gdb.base/annota1.c ((struct symtab *) 0x2b0dedd0)
linetable: ((struct linetable *) 0x2b12c8b0):
INDEX LINE ADDRESS
0 7 0x00000000004006d0
1 8 0x00000000004006d8
2 14 0x00000000004006e0
3 14 0x00000000004006e8
4 15 0x00000000004006fc
so GDB does nothing wrong. Program hits breakpoint on either line 14
or line 15 is right to me. With anther gcc (4.9.3), the line-table looks
correct, and no test fail. Instead of setting breakpoint on main and
assuming the line is what we get from the source, we can set breakpoint
on that line. On the other hand, the test prints the values of the
array and check, so we need to set breakpoint on the line setting the
values of array and "next", rather than setting the breakpoint on main.
gdb/testsuite:
2016-04-22 Yao Qi <yao.qi@linaro.org>
* gdb.base/annota1.exp: Set breakpoint on line $main_line.
* gdb.base/annota3.exp: Likewise.
2016-04-22 16:35:07 +02:00
|
|
|
# break in main, after value is initialized. This is in preparation
|
2003-08-03 03:57:13 +02:00
|
|
|
# to test the annotate output for the display command.
|
|
|
|
#
|
Fix fail in gdb.base/annota1.exp and gdb.base/annota3.exp
Hi,
I am seeing the fail below on aarch64-linux with gcc 4.9.2,
break main
Breakpoint 1 at 0x4006e8: file binutils-gdb/gdb/testsuite/gdb.base/annota1.c, line 14.^M
(gdb) FAIL: gdb.base/annota1.exp: breakpoint main
the test expects the breakpoint is set on line 15. Let us look at
the main function,
12 int
13 main (void)
14 {
15 int my_array[3] = { 1, 2, 3 }; /* break main */
16
17 value = 7;
18
19 #ifdef SIGUSR1
20 signal (SIGUSR1, handle_USR1);
21 #endif
(gdb) disassemble main
Dump of assembler code for function main:
0x00000000004006e0 <+0>: stp x29, x30, [sp,#-48]!
0x00000000004006e4 <+4>: mov x29, sp
0x00000000004006e8 <+8>: adrp x0, 0x411000 <signal@got.plt>
0x00000000004006ec <+12>: add x0, x0, #0x40
the breakpoint is set on the right address after skipping prologue, but
0x00000000004006e8 is mapped to the line 14, as shown below,
(gdb) maintenance info line-table
objfile: /home/yao.qi/source/build-aarch64/gdb/testsuite/outputs/gdb.base/annota1/annota1 ((struct objfile *) 0x2b0e1850)
compunit_symtab: ((struct compunit_symtab *) 0x2b0ded50)
symtab: /home/yao.qi/source/binutils-gdb/gdb/testsuite/gdb.base/annota1.c ((struct symtab *) 0x2b0dedd0)
linetable: ((struct linetable *) 0x2b12c8b0):
INDEX LINE ADDRESS
0 7 0x00000000004006d0
1 8 0x00000000004006d8
2 14 0x00000000004006e0
3 14 0x00000000004006e8
4 15 0x00000000004006fc
so GDB does nothing wrong. Program hits breakpoint on either line 14
or line 15 is right to me. With anther gcc (4.9.3), the line-table looks
correct, and no test fail. Instead of setting breakpoint on main and
assuming the line is what we get from the source, we can set breakpoint
on that line. On the other hand, the test prints the values of the
array and check, so we need to set breakpoint on the line setting the
values of array and "next", rather than setting the breakpoint on main.
gdb/testsuite:
2016-04-22 Yao Qi <yao.qi@linaro.org>
* gdb.base/annota1.exp: Set breakpoint on line $main_line.
* gdb.base/annota3.exp: Likewise.
2016-04-22 16:35:07 +02:00
|
|
|
send_gdb "break ${srcfile}:${main_line}\n"
|
|
|
|
gdb_expect_list "break in main" "$gdb_prompt$" [concat {
|
2012-02-28 23:40:48 +01:00
|
|
|
"\r\n\032\032post-prompt\r\n" } [list \
|
|
|
|
"Breakpoint 4 at 0x\[0-9a-z\]+: file .*annota3.c, line $main_line.\r\n"]]
|
2003-08-03 03:57:13 +02:00
|
|
|
|
|
|
|
#
|
|
|
|
# display the value
|
|
|
|
#
|
|
|
|
send_gdb "display value\n"
|
|
|
|
gdb_expect_list "set up display" "$gdb_prompt$" {
|
|
|
|
"\r\n\032\032post-prompt\r\n"
|
|
|
|
"1: value = 7\r\n"
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# should ask query. Test annotate-query.
|
|
|
|
# we don't care about anything else here, only the query.
|
|
|
|
|
|
|
|
send_gdb "run\n"
|
|
|
|
gdb_expect {
|
|
|
|
-re "pre-query.*already.*\\(y or n\\).*query\r\n" {
|
|
|
|
send_gdb "y\n"
|
|
|
|
gdb_expect {
|
|
|
|
-re ".*post-query.*$gdb_prompt$" \
|
|
|
|
{ pass "re-run" }
|
|
|
|
-re ".*$gdb_prompt$" { fail "re-run" }
|
|
|
|
timeout { fail "re-run (timeout)" }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
-re ".*$gdb_prompt$" { fail "re-run" }
|
|
|
|
timeout { fail "re-run (timeout)" }
|
|
|
|
}
|
|
|
|
|
|
|
|
#
|
|
|
|
# Test that breakpoints-invalid is issued once and only once for
|
|
|
|
# breakpoint ignore count changes, after annotation stopped.
|
2005-09-29 01:44:02 +02:00
|
|
|
# NOTE: breakpoints-invalid annotations have been removed from
|
|
|
|
# level 3 but keep these tests for continuity and comparison
|
|
|
|
# with annota1.exp.
|
2012-02-28 23:40:48 +01:00
|
|
|
|
|
|
|
set value_inc_line [gdb_get_line_number "increment value"]
|
|
|
|
|
|
|
|
send_gdb "break $value_inc_line\n"
|
|
|
|
gdb_expect_list "break at value++" "$gdb_prompt$" [concat {
|
|
|
|
"\r\n\032\032post-prompt\r\n" } [list \
|
|
|
|
"Breakpoint 5 at 0x\[0-9a-z\]+: file .*annota3.c, line $value_inc_line.\r\n"]]
|
2003-08-03 03:57:13 +02:00
|
|
|
|
|
|
|
send_gdb "ignore 5 4\n"
|
|
|
|
gdb_expect_list "ignore 5 4" "$gdb_prompt$" {
|
|
|
|
"\r\n\032\032post-prompt\r\n"
|
|
|
|
"Will ignore next 4 crossings of breakpoint 5"
|
|
|
|
"\r\n"
|
|
|
|
}
|
|
|
|
|
|
|
|
send_gdb "continue\n"
|
2012-02-28 23:40:48 +01:00
|
|
|
gdb_expect_list "annotate ignore count change" "$gdb_prompt$" [concat {
|
2003-08-03 03:57:13 +02:00
|
|
|
"\r\n\032\032post-prompt\r\n"
|
|
|
|
"\r\n\032\032breakpoint 5\r\n"
|
2006-07-17 09:29:47 +02:00
|
|
|
"\r\n"
|
|
|
|
"Breakpoint 5, "
|
2012-02-28 23:40:48 +01:00
|
|
|
"\r\n\032\032frame-begin 0 0x\[0-9a-z\]+\r\n" } [list \
|
|
|
|
"main \\(\\) at .*annota3.c:$value_inc_line\r\n"] [list \
|
|
|
|
"\r\n\032\032source .*annota3.c:$value_inc_line:\[0-9\]+:beg:0x\[0-9a-z\]+\r\n"] {
|
2003-08-03 03:57:13 +02:00
|
|
|
"1: value = 11\r\n"
|
|
|
|
"\r\n\032\032stopped\r\n"
|
2012-02-28 23:40:48 +01:00
|
|
|
}]
|
2003-08-03 03:57:13 +02:00
|
|
|
|
|
|
|
# check that ignore command is working, or the above can provide
|
|
|
|
# misleading assurance ...
|
|
|
|
|
|
|
|
send_gdb "next\n"
|
|
|
|
gdb_expect_list "next to exit loop" "$gdb_prompt$" {
|
|
|
|
"\r\n\032\032post-prompt\r\n"
|
|
|
|
"\r\n\032\032starting\r\n"
|
|
|
|
"\r\n\032\032source.*annota3.c:\[0-9\]+:\[0-9\]+:beg:0x\[0-9a-z\]+\r\n"
|
|
|
|
"1: value = 12\r\n"
|
|
|
|
"\r\n\032\032stopped\r\n"
|
|
|
|
}
|
|
|
|
|
2012-02-28 23:40:48 +01:00
|
|
|
set after_loop_line [gdb_get_line_number "after loop"]
|
|
|
|
|
2003-08-03 03:57:13 +02:00
|
|
|
send_gdb "next\n"
|
2012-02-28 23:40:48 +01:00
|
|
|
gdb_expect_list "breakpoint ignore count" "$gdb_prompt$" [concat {
|
2003-08-03 03:57:13 +02:00
|
|
|
"\r\n\032\032post-prompt\r\n"
|
2012-02-28 23:40:48 +01:00
|
|
|
"\r\n\032\032starting\r\n" } [list \
|
|
|
|
"\r\n\032\032source.*annota3.c:$after_loop_line:\[0-9\]+:beg:0x\[0-9a-z\]+\r\n"] {
|
2003-08-03 03:57:13 +02:00
|
|
|
"1: value = 12\r\n"
|
|
|
|
"\r\n\032\032stopped\r\n"
|
2012-02-28 23:40:48 +01:00
|
|
|
}]
|
2003-08-03 03:57:13 +02:00
|
|
|
|
2011-09-08 16:56:34 +02:00
|
|
|
# Get the inferior's PID for later.
|
|
|
|
|
|
|
|
set test "get inferior pid"
|
|
|
|
set pid -1
|
|
|
|
gdb_test_multiple "info inferior 1" "$test" {
|
|
|
|
-re "process (\[0-9\]*).*$gdb_prompt$" {
|
|
|
|
set pid $expect_out(1,string)
|
|
|
|
pass "$test"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2003-08-03 03:57:13 +02:00
|
|
|
# Send a signal that is not handled
|
2004-07-20 02:24:41 +02:00
|
|
|
|
|
|
|
if [target_info exists gdb,nosignals] {
|
|
|
|
unsupported "signal sent"
|
|
|
|
} else {
|
|
|
|
send_gdb "signal SIGTRAP\n"
|
|
|
|
gdb_expect_list "signal sent" "$gdb_prompt$" {
|
|
|
|
"\r\n\032\032post-prompt\r\n"
|
|
|
|
"Continuing with signal SIGTRAP.\r\n"
|
|
|
|
"\r\n\032\032starting\r\n"
|
|
|
|
"\r\n\032\032signalled\r\n"
|
|
|
|
"\r\nProgram terminated with signal SIGTRAP, Trace.breakpoint trap.\r\n"
|
|
|
|
"The program no longer exists.\r\n"
|
|
|
|
"\r\n\032\032stopped\r\n"
|
|
|
|
}
|
2003-08-03 03:57:13 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2004-07-12 23:39:35 +02:00
|
|
|
# Check for production of a core file and remove it!
|
2003-08-03 03:57:13 +02:00
|
|
|
|
2004-07-12 23:39:35 +02:00
|
|
|
set test "cleanup core file"
|
2011-09-08 16:56:34 +02:00
|
|
|
if { [remote_file host exists core] } {
|
|
|
|
remote_file host delete core
|
|
|
|
pass "$test (removed)"
|
|
|
|
} elseif { $pid != -1 && [remote_file host exists core.$pid] } {
|
|
|
|
remote_file host delete core.$pid
|
|
|
|
pass "$test (removed)"
|
2003-08-03 03:57:13 +02:00
|
|
|
} else {
|
2011-09-08 16:56:34 +02:00
|
|
|
pass "$test (not dumped)"
|
2003-08-03 03:57:13 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
# restore the original prompt for the rest of the testsuite
|
|
|
|
|
|
|
|
set gdb_prompt $old_gdb_prompt
|