public inbox for archer-commits@sourceware.org
help / color / mirror / Atom feed
* [SCM]  archer-jankratochvil-man: Merge remote-tracking branch 'gdb/master' into archer-jankratochvil-man
@ 2013-04-05 12:37 jkratoch
  0 siblings, 0 replies; only message in thread
From: jkratoch @ 2013-04-05 12:37 UTC (permalink / raw)
  To: archer-commits

The branch, archer-jankratochvil-man has been updated
       via  8cc07613956e55777845c9a9f3935dafd6578f10 (commit)
       via  e96bd93d436e464a532a7e1161e1d201c9fc50c7 (commit)
       via  b2851906d6c59f38b5db1ae7d721d2cbeca8d8d0 (commit)
       via  b9de126054c8742203f08a94d43c5dc366d1602d (commit)
       via  2035b9113ceae4472a9940942dcf12367f1f9c2b (commit)
       via  43dfd31eb5b4c9478ddc1ce76df06c60251eafcc (commit)
       via  1f6b2f52a0c610d72b384a96f53ad4cd5d8d5268 (commit)
       via  509ca9a81d12cfdf95acd361483da5a77bded285 (commit)
      from  d8bb86660fb60b11a9abd1269e94966a3d2f98f0 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email.

- Log -----------------------------------------------------------------
commit 8cc07613956e55777845c9a9f3935dafd6578f10
Merge: d8bb866 e96bd93
Author: Jan Kratochvil <jan.kratochvil@redhat.com>
Date:   Fri Apr 5 14:37:06 2013 +0200

    Merge remote-tracking branch 'gdb/master' into archer-jankratochvil-man

commit e96bd93d436e464a532a7e1161e1d201c9fc50c7
Author: Nick Clifton <nickc@redhat.com>
Date:   Fri Apr 5 09:08:28 2013 +0000

    	* elflink.c (elf_link_add_object_symbols): Revert accidental commit.

commit b2851906d6c59f38b5db1ae7d721d2cbeca8d8d0
Author: gdbadmin <gdbadmin@sourceware.org>
Date:   Fri Apr 5 00:00:02 2013 +0000

    *** empty log message ***

commit b9de126054c8742203f08a94d43c5dc366d1602d
Author: Alan Modra <amodra@bigpond.net.au>
Date:   Thu Apr 4 23:00:05 2013 +0000

    daily update

commit 2035b9113ceae4472a9940942dcf12367f1f9c2b
Author: Sandra Loosemore <sandra@codesourcery.com>
Date:   Thu Apr 4 21:01:40 2013 +0000

    2013-04-04  Sandra Loosemore  <sandra@codesourcery.com>
    
    	gdb/testsuite/
    
    	* gdb.cp/cplabel.exp: Allow empty directory in file reported
    	for breakpoint location.

commit 43dfd31eb5b4c9478ddc1ce76df06c60251eafcc
Author: Sandra Loosemore <sandra@codesourcery.com>
Date:   Thu Apr 4 20:59:11 2013 +0000

    2013-04-04  Sandra Loosemore  <sandra@codesourcery.com>
    
    	gdb/testsuite/
    
    	* gdb.linespec/linespec.exp: Make dir/file:line tests
    	conditional for non-remote hosts only.

commit 1f6b2f52a0c610d72b384a96f53ad4cd5d8d5268
Author: Pedro Alves <palves@redhat.com>
Date:   Thu Apr 4 19:22:37 2013 +0000

    tracepoint->step_count fixes
    
    If a tracepoint's actions list includes a while-stepping action, and
    then the actions are changed to a list without any while-stepping
    action, the tracepoint's step_count will be left with a stale value.
    For example:
    
     (gdb) trace subr
     Tracepoint 1 at 0x4004d9: file ../../../src/gdb/testsuite//actions-changed.c, line 31.
     (gdb) actions
     Enter actions for tracepoint 1, one per line.
     End with a line saying just "end".
     >collect $reg
     >end
     (gdb) set debug remote 1
     (gdb) tstart
     Sending packet: $QTinit#59...Packet received: OK
     Sending packet: $QTDP:1:00000000004004d9:E:0:0-#a3...Packet received: OK
     Sending packet: $QTDP:-1:00000000004004d9:R03FFFFFFFFFFFFFFFFFF#2b...Packet received: OK
     (gdb) tstop
     Sending packet: $QTStop#4b...Packet received: OK
     Sending packet: $QTNotes:#e8...Packet received: OK
     (gdb) actions
     Enter actions for tracepoint 1, one per line.
     End with a line saying just "end".
     >collect $reg
     >while-stepping 1
       >collect $reg
       >end
     >end
     (gdb) tstart
     Sending packet: $QTinit#59...Packet received: OK
     Sending packet: $QTDP:1:00000000004004d9:E:1:0-#a4...Packet received: OK
     Sending packet: $QTDP:-1:00000000004004d9:R03FFFFFFFFFFFFFFFFFF-#58...Packet received: OK
     Sending packet: $QTDP:-1:00000000004004d9:SR03FFFFFFFFFFFFFFFFFF#7e...Packet received: OK
     (gdb) tstop
     Sending packet: $QTStop#4b...Packet received: OK
     Sending packet: $QTNotes:#e8...Packet received: OK
     (gdb) actions
     Enter actions for tracepoint 1, one per line.
     End with a line saying just "end".
     >collect $regs
     >end
     (gdb) tstart
     Sending packet: $QTinit#59...Packet received: OK
     Sending packet: $QTDP:1:00000000004004d9:E:1:0-#a4...Packet received: OK
     Sending packet: $QTDP:-1:00000000004004d9:R03FFFFFFFFFFFFFFFFFF#2b...Packet received: OK
    
    The last "$QTDP:1:00000000004004d9:E:1:0-#a4" should be "$QTDP:1:00000000004004d9:E:0:0-#a3".
    In pseudo-diff:
    
      -$QTDP:1:00000000004004d9:E:1:0-#a4
      +$QTDP:1:00000000004004d9:E:0:0-#a3
    
    A related issue is that the "commands" command actually supports
    setting commands to a range of breakpoints/tracepoints at once.  But,
    hacking "maint info breakpoints" to print t->step_count, reveals:
    
     (gdb) trace main
     Tracepoint 5 at 0x45a2ab: file ../../src/gdb/gdb.c, line 29.
     (gdb) trace main
     Note: breakpoint 5 also set at pc 0x45a2ab.
     Tracepoint 6 at 0x45a2ab: file ../../src/gdb/gdb.c, line 29.
     (gdb) commands 5-6
     Type commands for breakpoint(s) 5-6, one per line.
     End with a line saying just "end".
     > while-stepping 5
      >end
     > end
     (gdb) maint info breakpoints 5
     Num     Type           Disp Enb Address            What
     5       tracepoint     keep y   0x000000000045a2ab in main at ../../src/gdb/gdb.c:29 inf 1
             step_count=5
             ^^^^^^^^^^^^
             while-stepping 5
             end
             not installed on target
     (gdb) maint info breakpoints 6
     Num     Type           Disp Enb Address            What
     6       tracepoint     keep y   0x000000000045a2ab in main at ../../src/gdb/gdb.c:29 inf 1
             step_count=0
             ^^^^^^^^^^^^
             while-stepping 5
             end
             not installed on target
     (gdb)
    
    that tracepoint 6 doesn't end up with the correct step_count.
    
    The issue is that here:
    
     static void
     do_map_commands_command (struct breakpoint *b, void *data)
     {
      struct commands_info *info = data;
    
      if (info->cmd == NULL)
        {
          struct command_line *l;
    
          if (info->control != NULL)
    	l = copy_command_lines (info->control->body_list[0]);
          else
    	{
    	  struct cleanup *old_chain;
    	  char *str;
    
    	  str = xstrprintf (_("Type commands for breakpoint(s) "
    			      "%s, one per line."),
    			    info->arg);
    
    	  old_chain = make_cleanup (xfree, str);
    
    	  l = read_command_lines (str,
    				  info->from_tty, 1,
    				  (is_tracepoint (b)
    				   ? check_tracepoint_command : 0),
    				  b);
    
    	  do_cleanups (old_chain);
    	}
    
          info->cmd = alloc_counted_command_line (l);
        }
    
    validate_actionline is never called for tracepoints other than the
    first (the copy_command_lines path).  Right below, we have:
    
      /* If a breakpoint was on the list more than once, we don't need to
         do anything.  */
      if (b->commands != info->cmd)
        {
          validate_commands_for_breakpoint (b, info->cmd->commands);
          incref_counted_command_line (info->cmd);
          decref_counted_command_line (&b->commands);
          b->commands = info->cmd;
          observer_notify_breakpoint_modified (b);
        }
    
    And validate_commands_for_breakpoint looks like the right place to put
    a call; if we reset step_count there too, we have a nice central fix
    for the first issue as well, because trace_actions_command calls
    breakpoint_set_commands that also calls
    validate_commands_for_breakpoint.
    
    We end up calling validate_actionline twice for the first tracepoint,
    since read_command_lines calls it too, through
    check_tracepoint_command, but that should be harmless.
    
    2013-04-04  Pedro Alves  <palves@redhat.com>
    	    Hui Zhu  <hui@codesourcery.com>
    
    	* breakpoint.c (validate_commands_for_breakpoint): If validating a
    	tracepoint, reset its STEP_COUNT and call validate_actionline.
    
    2013-04-04  Stan Shebs  <stan@codesourcery.com>
    	    Pedro Alves  <palves@redhat.com>
    
    	* gdb.trace/Makefile.in (PROGS): Add actions-changed.
    	* gdb.trace/actions-changed.c: New file.
    	* gdb.trace/actions-changed.exp: New file.
    	* lib/trace-support.exp (gdb_trace_setactions): Rename to ...
    	(gdb_trace_setactions_command): ... this.  Add "actions_command"
    	parameter, and handle it.
    	(gdb_trace_setactions, gdb_trace_setcommands): New procedures.

commit 509ca9a81d12cfdf95acd361483da5a77bded285
Author: Alan Modra <amodra@bigpond.net.au>
Date:   Thu Apr 4 14:38:01 2013 +0000

    	* bfd.c (bfd_error_type, bfd_errmsgs): Add bfd_error_missing_dso.
    	* bfd-in2.h: Regenerate.
    	* elflink.c (elf_link_add_object_symbols): Use new error.

-----------------------------------------------------------------------

Summary of changes:
 bfd/ChangeLog                               |   10 ++
 bfd/bfd-in2.h                               |    1 +
 bfd/bfd.c                                   |    2 +
 bfd/elflink.c                               |    7 +-
 bfd/version.h                               |    2 +-
 gdb/ChangeLog                               |    6 +
 gdb/breakpoint.c                            |   23 +++-
 gdb/testsuite/ChangeLog                     |   21 ++++
 gdb/testsuite/gdb.cp/cplabel.exp            |    2 +-
 gdb/testsuite/gdb.linespec/linespec.exp     |   20 ++-
 gdb/testsuite/gdb.trace/Makefile.in         |    6 +-
 gdb/testsuite/gdb.trace/actions-changed.c   |   66 ++++++++++
 gdb/testsuite/gdb.trace/actions-changed.exp |  174 +++++++++++++++++++++++++++
 gdb/testsuite/lib/trace-support.exp         |   24 +++-
 gdb/version.in                              |    2 +-
 15 files changed, 338 insertions(+), 28 deletions(-)
 create mode 100644 gdb/testsuite/gdb.trace/actions-changed.c
 create mode 100644 gdb/testsuite/gdb.trace/actions-changed.exp

First 500 lines of diff:
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index c2a14b0..806aa48 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,13 @@
+2013-04-05  Nick Clifton  <nickc@redhat.com>
+
+	* elflink.c (elf_link_add_object_symbols): Revert accidental commit.
+
+2013-04-04  Alan Modra  <amodra@gmail.com>
+
+	* bfd.c (bfd_error_type, bfd_errmsgs): Add bfd_error_missing_dso.
+	* bfd-in2.h: Regenerate.
+	* elflink.c (elf_link_add_object_symbols): Use new error.
+
 2013-04-03  Nick Clifton  <nickc@redhat.com>
 
 	* elf32-v850.c (v850_elf_is_target_special_symbol): New function.
diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
index 55ebb79..5c4e9c4 100644
--- a/bfd/bfd-in2.h
+++ b/bfd/bfd-in2.h
@@ -6111,6 +6111,7 @@ typedef enum bfd_error
   bfd_error_no_armap,
   bfd_error_no_more_archived_files,
   bfd_error_malformed_archive,
+  bfd_error_missing_dso,
   bfd_error_file_not_recognized,
   bfd_error_file_ambiguously_recognized,
   bfd_error_no_contents,
diff --git a/bfd/bfd.c b/bfd/bfd.c
index d77b90f..db4a536 100644
--- a/bfd/bfd.c
+++ b/bfd/bfd.c
@@ -374,6 +374,7 @@ CODE_FRAGMENT
 .  bfd_error_no_armap,
 .  bfd_error_no_more_archived_files,
 .  bfd_error_malformed_archive,
+.  bfd_error_missing_dso,
 .  bfd_error_file_not_recognized,
 .  bfd_error_file_ambiguously_recognized,
 .  bfd_error_no_contents,
@@ -406,6 +407,7 @@ const char *const bfd_errmsgs[] =
   N_("Archive has no index; run ranlib to add one"),
   N_("No more archived files"),
   N_("Malformed archive"),
+  N_("DSO missing from command line"),
   N_("File format not recognized"),
   N_("File format is ambiguous"),
   N_("Section has no contents"),
diff --git a/bfd/elflink.c b/bfd/elflink.c
index 38add1a..99a1ddf 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -4437,17 +4437,12 @@ error_free_dyn:
 		 --no-add-needed is used and the reference was not
 		 a weak one.  */
 	      if (old_bfd != NULL
-		  && h->ref_regular_nonweak
 		  && (elf_dyn_lib_class (abfd) & DYN_NO_NEEDED) != 0)
 		{
 		  (*_bfd_error_handler)
 		    (_("%B: undefined reference to symbol '%s'"),
 		     old_bfd, name);
-		  (*_bfd_error_handler)
-		    (_("note: '%s' is defined in DSO %B"
-		       " so try adding it to the linker command line"),
-		     abfd, name);
-		  bfd_set_error (bfd_error_invalid_operation);
+		  bfd_set_error (bfd_error_missing_dso);
 		  goto error_free_vers;
 		}
 
diff --git a/bfd/version.h b/bfd/version.h
index 4dad5de..51fc7f1 100644
--- a/bfd/version.h
+++ b/bfd/version.h
@@ -1,4 +1,4 @@
-#define BFD_VERSION_DATE 20130404
+#define BFD_VERSION_DATE 20130405
 #define BFD_VERSION @bfd_version@
 #define BFD_VERSION_STRING  @bfd_version_package@ @bfd_version_string@
 #define REPORT_BUGS_TO @report_bugs_to@
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 024cd9d..30315af 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2013-04-04  Pedro Alves  <palves@redhat.com>
+	    Hui Zhu  <hui@codesourcery.com>
+
+	* breakpoint.c (validate_commands_for_breakpoint): If validating a
+	tracepoint, reset its STEP_COUNT and call validate_actionline.
+
 2013-04-03  Doug Evans  <dje@google.com>
 
 	* dwarf2read.c (read_die_and_siblings_1): Renamed from
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index ff161a0..5ba1f2f 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -1142,12 +1142,25 @@ validate_commands_for_breakpoint (struct breakpoint *b,
 {
   if (is_tracepoint (b))
     {
-      /* We need to verify that each top-level element of commands is
-	 valid for tracepoints, that there's at most one
-	 while-stepping element, and that while-stepping's body has
-	 valid tracing commands excluding nested while-stepping.  */
+      struct tracepoint *t = (struct tracepoint *) b;
       struct command_line *c;
       struct command_line *while_stepping = 0;
+
+      /* Reset the while-stepping step count.  The previous commands
+         might have included a while-stepping action, while the new
+         ones might not.  */
+      t->step_count = 0;
+
+      /* We need to verify that each top-level element of commands is
+	 valid for tracepoints, that there's at most one
+	 while-stepping element, and that the while-stepping's body
+	 has valid tracing commands excluding nested while-stepping.
+	 We also need to validate the tracepoint action line in the
+	 context of the tracepoint --- validate_actionline actually
+	 has side effects, like setting the tracepoint's
+	 while-stepping STEP_COUNT, in addition to checking if the
+	 collect/teval actions parse and make sense in the
+	 tracepoint's context.  */
       for (c = commands; c; c = c->next)
 	{
 	  if (c->control_type == while_stepping_control)
@@ -1165,6 +1178,8 @@ validate_commands_for_breakpoint (struct breakpoint *b,
 	      else
 		while_stepping = c;
 	    }
+
+	  validate_actionline (c->line, b);
 	}
       if (while_stepping)
 	{
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index fc2e96a..e7da305 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,24 @@
+2013-04-04  Sandra Loosemore  <sandra@codesourcery.com>
+
+	* gdb.cp/cplabel.exp: Allow empty directory in file reported
+	for breakpoint location.
+
+2013-04-04  Sandra Loosemore  <sandra@codesourcery.com>
+
+	* gdb.linespec/linespec.exp: Make dir/file:line tests
+	conditional for non-remote hosts only.
+
+2013-04-04  Stan Shebs  <stan@codesourcery.com>
+	    Pedro Alves  <palves@redhat.com>
+
+	* gdb.trace/Makefile.in (PROGS): Add actions-changed.
+	* gdb.trace/actions-changed.c: New file.
+	* gdb.trace/actions-changed.exp: New file.
+	* lib/trace-support.exp (gdb_trace_setactions): Rename to ...
+	(gdb_trace_setactions_command): ... this.  Add "actions_command"
+	parameter, and handle it.
+	(gdb_trace_setactions, gdb_trace_setcommands): New procedures.
+
 2013-04-04  Yao Qi  <yao@codesourcery.com>
 
 	* gdb.server/server-kill.exp: Use command 'tstatus' instead of
diff --git a/gdb/testsuite/gdb.cp/cplabel.exp b/gdb/testsuite/gdb.cp/cplabel.exp
index 1bfe61b..d3a6118 100644
--- a/gdb/testsuite/gdb.cp/cplabel.exp
+++ b/gdb/testsuite/gdb.cp/cplabel.exp
@@ -35,6 +35,6 @@ foreach m $methods {
     foreach l $labels {
 	set line [gdb_get_line_number "$m:$l"]
 	gdb_test "break foo::$m:$l" \
-	    "Breakpoint $decimal at $hex: file .*/$srcfile, line $line\."
+	    "Breakpoint $decimal at $hex: file .*$srcfile, line $line\."
     }
 }
diff --git a/gdb/testsuite/gdb.linespec/linespec.exp b/gdb/testsuite/gdb.linespec/linespec.exp
index 0b70346..741ada0 100644
--- a/gdb/testsuite/gdb.linespec/linespec.exp
+++ b/gdb/testsuite/gdb.linespec/linespec.exp
@@ -43,13 +43,19 @@ if {$l1 != $l2} {
     error "somebody incompatibly modified the source files needed by linespec.exp"
 }
 
-gdb_test "break one/thefile.cc:$l1" \
-    "Breakpoint $decimal at $hex: file .*thefile.cc, line $l1." \
-    "single-location break using dir/file:line"
-
-gdb_test "clear one/thefile.cc:$l1" \
-    "Deleted breakpoint $decimal *" \
-    "clear breakpoint using dir/file:line"
+# Copying files to a remote host loses the directory prefix during
+# compilation.
+if { [is_remote host] } {
+    untested "breakpoints using dir/file:line"
+} else {
+    gdb_test "break one/thefile.cc:$l1" \
+        "Breakpoint $decimal at $hex: file .*thefile.cc, line $l1." \
+        "single-location break using dir/file:line"
+
+    gdb_test "clear one/thefile.cc:$l1" \
+        "Deleted breakpoint $decimal *" \
+        "clear breakpoint using dir/file:line"
+}
 
 gdb_test "break thefile.cc:$l1" \
     "Breakpoint $decimal at $hex: thefile.cc:$l1. \[(\]2 locations\[)\]" \
diff --git a/gdb/testsuite/gdb.trace/Makefile.in b/gdb/testsuite/gdb.trace/Makefile.in
index 8a7d523..2e23223 100644
--- a/gdb/testsuite/gdb.trace/Makefile.in
+++ b/gdb/testsuite/gdb.trace/Makefile.in
@@ -3,9 +3,9 @@ srcdir = @srcdir@
 
 .PHONY: all clean mostlyclean distclean realclean
 
-PROGS = ax backtrace deltrace disconnected-tracing infotrace packetlen \
-	passc-dyn passcount report save-trace tfile tfind tracecmd tsv \
-	unavailable while-dyn while-stepping
+PROGS = actions-changed ax backtrace deltrace disconnected-tracing \
+	infotrace packetlen passc-dyn passcount report save-trace tfile \
+	tfind tracecmd tsv unavailable while-dyn while-stepping
 
 all info install-info dvi install uninstall installcheck check:
 	@echo "Nothing to be done for $@..."
diff --git a/gdb/testsuite/gdb.trace/actions-changed.c b/gdb/testsuite/gdb.trace/actions-changed.c
new file mode 100644
index 0000000..bac24a7
--- /dev/null
+++ b/gdb/testsuite/gdb.trace/actions-changed.c
@@ -0,0 +1,66 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2013 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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+int
+end (int i)
+{
+}
+
+int
+subr2 (int parm)
+{
+  int keeping, busy;
+
+  keeping = parm + parm;
+  busy = keeping * keeping;
+
+  return busy;
+}
+
+int
+subr (int parm)
+{
+  int keeping, busy;
+
+  keeping = parm + parm;
+  busy = keeping * keeping;
+
+  return busy;
+}
+
+main()
+{
+  subr (1);
+  end (1);
+
+  subr (2);
+  end (2);
+
+  subr (3);
+  end (3);
+
+  subr (4);
+  end (4);
+
+  subr (5);
+  subr2 (5);
+  end (5);
+
+  subr (6);
+  subr2 (6);
+  end (6);
+}
diff --git a/gdb/testsuite/gdb.trace/actions-changed.exp b/gdb/testsuite/gdb.trace/actions-changed.exp
new file mode 100644
index 0000000..e850da2
--- /dev/null
+++ b/gdb/testsuite/gdb.trace/actions-changed.exp
@@ -0,0 +1,174 @@
+# Copyright 2013 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 3 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, see <http://www.gnu.org/licenses/>.
+
+load_lib trace-support.exp
+
+standard_testfile
+
+if {[prepare_for_testing $testfile.exp $testfile $srcfile debug]} {
+    return -1
+}
+
+proc test_actions_changed { } {
+    gdb_breakpoint "end"
+
+    gdb_test "trace subr" "Tracepoint .*" \
+	"tracepoint at subr"
+
+    # The first set of tests are regression tests for a GDB bug where
+    # the while-stepping count of a tracepoint would be left stale if
+    # the tracepoint's actions were redefined, and the new action list
+    # had no while-stepping action.
+
+    # First pass, define simple action.
+    with_test_prefix "1" {
+	gdb_trace_setactions "define simple action" \
+	    "" \
+	    "collect parm" "^$"
+
+	gdb_test_no_output "tstart"
+
+	gdb_test "continue" ".*Breakpoint \[0-9\]+, end \\(i=1\\) .*" \
+	    "advance through tracing"
+
+	gdb_test "tstatus" ".*Collected 1 trace frame.*" \
+	    "collected 1 trace frame"
+
+	gdb_test_no_output "tstop"
+    }
+
+    # Redefine action, run second trace.
+    with_test_prefix "2" {
+	gdb_trace_setactions "redefine simple action" \
+	    "" \
+	    "collect keeping, busy" "^$"
+
+	gdb_test_no_output "tstart"
+
+	gdb_test "continue" ".*Breakpoint \[0-9\]+, end \\(i=2\\) .*" \
+	    "advance through tracing"
+
+	gdb_test "tstatus" ".*Collected 1 trace frame.*" \
+	    "collected 1 trace frame"
+
+	gdb_test_no_output "tstop"
+    }
+
+    # Redefine to stepping action, run third trace.
+    with_test_prefix "3" {
+	gdb_trace_setactions "redefine to stepping action" \
+	    "" \
+	    "collect parm" "^$" \
+	    "while-stepping 5" "^$" \
+	    "collect parm" "^$" \
+	    "end" "^$"
+
+	gdb_test_no_output "tstart"
+
+	gdb_test "continue" ".*Breakpoint \[0-9\]+, end \\(i=3\\) .*" \
+	    "advance through tracing"
+
+	gdb_test "tstatus" ".*Collected 6 trace frames.*" \
+	    "collected 6 trace frames"
+
+	gdb_test_no_output "tstop"
+    }
+
+    # Redefine to non-stepping, run fourth trace.
+    with_test_prefix "4" {
+	gdb_trace_setactions "redefine to non-stepping action" \
+	    "" \
+	    "collect parm" "^$"
+
+	gdb_test_no_output "tstart"
+
+	gdb_test "continue" ".*Breakpoint \[0-9\]+, end \\(i=4\\) .*" \
+	    "advance through tracing"
+
+	gdb_test "tstatus" ".*Collected 1 trace frame.*" \
+	    "collected 1 trace frame"
+
+	gdb_test_no_output "tstop"
+    }
+
+    # The following tests are related to the above, but use two
+    # tracepoints.  They are regression tests for a GDB bug where only
+    # the first tracepoint would end up with the step count set.
+
+    # Store the first tracepoint's number.
+    gdb_test_no_output "set \$prev_tpnum=\$tpnum" "store previous \$tpnum"
+
+    # And here's the second tracepoint.
+    gdb_test "trace subr2" "Tracepoint .*" "tracepoint at subr2"
+
+    # Set a stepping action in both tracepoints, with the "commands"
+    # command.
+    with_test_prefix "5" {
+	gdb_trace_setcommands \
+	    "redefine 2 tracepoints to stepping action, using commands" \
+	    "\$prev_tpnum-\$tpnum" \
+	    "collect parm" "^$" \
+	    "while-stepping 5" "^$" \
+	    "collect parm" "^$" \
+	    "end" "^$"
+
+	gdb_test_no_output "tstart"
+
+	gdb_test "continue" ".*Breakpoint \[0-9\]+, end \\(i=5\\) .*" \
+	    "advance through tracing"
+
+	gdb_test "tstatus" ".*Collected 12 trace frames.*" \
+	    "collected 12 trace frames"
+
+	gdb_test_no_output "tstop"
+    }
+
+    # Redefine the actions of both tracepoints to non-stepping, also
+    # using the "commands" command.
+    with_test_prefix "6" {
+	gdb_trace_setcommands \
+	    "redefine 2 tracepoints to non-stepping action, using commands" \
+	    "\$prev_tpnum-\$tpnum" \
+	    "collect parm" "^$"
+
+	gdb_test_no_output "tstart"
+
+	gdb_test "continue" ".*Breakpoint \[0-9\]+, end \\(i=6\\) .*" \
+	    "advance through tracing"
+
+	gdb_test "tstatus" ".*Collected 2 trace frame.*" \
+	    "collected 2 trace frames"
+
+	gdb_test_no_output "tstop"
+    }
+}
+
+# Check whether the target supports tracepoints.
+
+clean_restart $testfile
+
+if ![runto_main] {
+    fail "Can't run to main to check for trace support"
+    return -1
+}
+
+if ![gdb_target_supports_trace] {
+    unsupported "Current target does not support trace"
+    return -1;
+}
+
+test_actions_changed
+
+return 0
diff --git a/gdb/testsuite/lib/trace-support.exp b/gdb/testsuite/lib/trace-support.exp
index 10482b8..2601ad8 100644
--- a/gdb/testsuite/lib/trace-support.exp
+++ b/gdb/testsuite/lib/trace-support.exp
@@ -86,23 +86,23 @@ proc gdb_delete_tracepoints {} {
     }
 }
 
-#
-# Procedure: gdb_trace_setactions
 #   Define actions for a tracepoint.
 #   Arguments:
+#       actions_command -- the command used to create the actions.
+#                          either "actions" or "commands".
 #	testname   -- identifying string for pass/fail output
-#	tracepoint -- to which tracepoint do these actions apply? (optional)
+#	tracepoint -- to which tracepoint(s) do these actions apply? (optional)
 #	args       -- list of actions to be defined.
 #   Returns:


hooks/post-receive
--
Repository for Project Archer.


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2013-04-05 12:37 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-04-05 12:37 [SCM] archer-jankratochvil-man: Merge remote-tracking branch 'gdb/master' into archer-jankratochvil-man jkratoch

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).