[RFA/testsuite] New (Ada) testcase for watchpoint issue

Joel Brobecker brobecker@adacore.com
Fri Oct 6 01:42:00 GMT 2006


[with the patch this time...]

Here is a new testcase that reproduces the issue presented in:

        http://www.sourceware.org/ml/gdb-patches/2006-10/msg00044.html

I tried reproducing this problem in C, but didn't manage too. Perhaps
I could have tried using a GCC extension and used a nested function,
but I thought it was cleaner to do it in pure legal Ada instead.

The only difference between the example in the message above and
the example I'm posting now is that I got read of the "delay 1.0"
statement, and replaced it with something much simpler in terms
of code generation - for targets that only have software watchpoints,
that should help shorten the time it takes to run this test (as well
as removing and unnecessary delay while waiting for the inferior
to run, actually!).

2006-10-05  Joel Brobecker  <brobecker@adacore.com>

        * gdb.ada/watch_arg/watch.adb: New file.
        * gdb.ada/watch_arg.exp: New testcase.

Tested on x86-linux, all PASSES with the patch submitted in the message
mentioned above, 1 FAIL without it:

        FAIL: gdb.ada/watch_arg.exp: Continuing to second breakpoint

OK to apply?

Thanks,
-- 
Joel
-------------- next part --------------
procedure Watch is

   procedure Foo (X : access Integer) is
   begin
      X.all := 3;  -- BREAK1
   end Foo;

   X : aliased Integer := 1;

begin
   Foo (X'Access);
   X := 2;  -- BREAK2
end Watch;

-------------- next part --------------
# Copyright 2005 Free Software Foundation, Inc.
#
# 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
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# 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.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA

if $tracelevel then {
    strace $tracelevel
}

load_lib "ada.exp"

set testdir "watch_arg"
set testfile "${testdir}/watch"
set srcfile ${srcdir}/${subdir}/${testfile}.adb
set binfile ${objdir}/${subdir}/${testfile}

file mkdir ${objdir}/${subdir}/${testdir}
if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } {
  return -1
}

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}

set bp_location [gdb_get_line_number "BREAK1" ${testdir}/watch.adb]
runto "watch.adb:$bp_location"

# Insert a watchpoint on argument X

gdb_test "watch x" \
         ".*atchpoint \[0-9\]+: x" \
         "Set watchpoint on function argument X"

# Then insert a breakpoint at the location we'd like to continue to...
set bp_location [gdb_get_line_number "BREAK2" ${testdir}/watch.adb]
gdb_test "break watch.adb:$bp_location" \
         "Breakpoint \[0-9\]+ at.*: file .*watch.adb, line \[0-9\]+." \
         "insert second breakpoint in watch.adb"

# Then continue to that breakpoint, and verify that the watchpoint
# did not interfere with that.

gdb_test "cont" \
         "Breakpoint \[0-9\]+, watch \\(\\).*" \
         "Continuing to second breakpoint"




More information about the Gdb-patches mailing list