Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Chris Moller <cmoller@redhat.com>
To: tromey@redhat.com
Cc: Jan Kratochvil <jan.kratochvil@redhat.com>,
	        Vladimir Prus <vladimir@codesourcery.com>,
	        Joel Brobecker <brobecker@adacore.com>,
	gdb-patches@sourceware.org
Subject: Re: pr 11067 patch resurrected from the dead
Date: Thu, 11 Mar 2010 15:44:00 -0000	[thread overview]
Message-ID: <4B990FAE.2090600@redhat.com> (raw)
In-Reply-To: <m3hbp7wls9.fsf@fleche.redhat.com>

[-- Attachment #1: Type: text/plain, Size: 1520 bytes --]

On 02/23/10 18:54, Tom Tromey wrote:
>>>>>> "Jan" == Jan Kratochvil<jan.kratochvil@redhat.com>  writes:
>>>>>>              
>
> Finally catching up on this thread...
>
> Jan>  I would prefer the value_print_options way but rather:
>    

Okay, folks, I dusted this off and spun another simple patch using 
value_print_options.  Given an enum:

    enum tt {
       T0,
       T1,
       T2
    };

    enum tt tf = T1;

If you do

    p /f tf

you'll get

    $1 = T1 = (enum tt)1

of instead of the

    $2 = T1

you'd get without the /f flag.  (It's "/f" because 'f' isn't otherwise 
used for enums--'f' for "fancy" or something like that.)

It also doesn't differentiate between printing single enums and enums in 
more complex things like arrays.  Given

    enum tt ta[] = { T1, T0, T2 };

The result would be:

    p /f ta
    $3 = {T1 = (enum tt)1, T0 = (enum tt)0, T2 = (enum tt)2}

As an alternative, maybe it could print something like

    $2 = (enum tt)1 <T1>

which kind looks like the result of printing a character.

As you can see in the attached check summary diff, this patch doesn't do 
a thing to MI or anything else.

If people like this, great.  Otherwise, I'll leave it dead and buried.

> Yes, I think value_print_options is preferable to checking
> ui_out_is_mi_like_p.  My reason is that getting the ui-out object
> involves looking at some global state, whereas value_print_options is
> local to the call hierarchy.  This means that it is simpler to reason
> about and modify.
>
> Tom
>    


[-- Attachment #2: pr11067.patch --]
[-- Type: text/x-patch, Size: 3815 bytes --]

Index: printcmd.c
===================================================================
RCS file: /cvs/src/src/gdb/printcmd.c,v
retrieving revision 1.173
diff -u -r1.173 printcmd.c
--- printcmd.c	5 Mar 2010 20:18:14 -0000	1.173
+++ printcmd.c	11 Mar 2010 15:20:44 -0000
@@ -373,6 +373,46 @@
 		 current_language);
       return;
     }
+  
+  if (TYPE_CODE (type) == TYPE_CODE_ENUM
+      && options->format == 'f')
+    {
+      unsigned flen, i;
+      LONGEST val;
+
+      flen = TYPE_NFIELDS (type);
+      val = unpack_long (type, valaddr);
+
+      for (i = 0; i < flen; i++)
+        {
+          if (val == TYPE_FIELD_BITPOS (type, i))
+            {
+              break;
+            }
+        }
+      if (i < flen)
+	{
+	  char *enum_name;
+
+	  if (TYPE_NAME (type))
+	    enum_name = TYPE_NAME (type);
+	  else if (TYPE_TAG_NAME(type))
+	    enum_name = TYPE_TAG_NAME(type);
+	  else
+	    enum_name = "<anonymous>";
+
+	  fprintf_filtered (stream, "%s = (enum %s)%s",
+			    TYPE_FIELD_NAME (type, i),
+			    enum_name,
+			    plongest (val));
+	}
+      else
+	{
+	  warning (_("Enum fancy formatting failed, using simple format."));
+	  print_longest (stream, 'd', 0, val);
+	}
+      return;
+    }
 
   if (len > sizeof(LONGEST) &&
       (TYPE_CODE (type) == TYPE_CODE_INT
Index: testsuite/gdb.base/Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.base/Makefile.in,v
retrieving revision 1.5
diff -u -r1.5 Makefile.in
--- testsuite/gdb.base/Makefile.in	15 Sep 2009 03:30:08 -0000	1.5
+++ testsuite/gdb.base/Makefile.in	11 Mar 2010 15:20:45 -0000
@@ -12,7 +12,8 @@
 	scope section_command setshow setvar shmain sigall signals \
 	solib solib_sl so-impl-ld so-indr-cl \
 	step-line step-test structs structs2 \
-	twice-tmp varargs vforked-prog watchpoint whatis catch-syscall
+	twice-tmp varargs vforked-prog watchpoint whatis catch-syscall \
+	pr11067
 
 MISCELLANEOUS = coremmap.data ../foobar.baz \
 	shr1.sl shr2.sl solib_sl.sl solib1.sl solib2.sl
Index: testsuite/gdb.base/pr11067.c
===================================================================
RCS file: testsuite/gdb.base/pr11067.c
diff -N testsuite/gdb.base/pr11067.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ testsuite/gdb.base/pr11067.c	11 Mar 2010 15:20:45 -0000
@@ -0,0 +1,18 @@
+#include <stdio.h>
+
+typedef enum { E0, E1, E2 } ex_e;
+ex_e ef = E2;
+
+enum tt {
+  T0,
+  T1,
+  T2
+};
+
+enum tt tf = T1;
+
+int
+main()
+{
+  return 0;
+}
Index: testsuite/gdb.base/pr11067.exp
===================================================================
RCS file: testsuite/gdb.base/pr11067.exp
diff -N testsuite/gdb.base/pr11067.exp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ testsuite/gdb.base/pr11067.exp	11 Mar 2010 15:20:45 -0000
@@ -0,0 +1,28 @@
+# Copyright 2010 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/>.
+
+set testfile pr11067
+set srcfile ${testfile}.c
+if [prepare_for_testing $testfile.exp $testfile $srcfile {debug}] {
+    return -1
+}
+
+if ![runto_main] then {
+    fail "Can't run to main"
+    return
+}
+
+gdb_test "p /f tf" "T1 = \\(enum tt\\)1.*"
+gdb_test "p /f ef" "E2 = \\(enum <anonymous>\\)2.*"

[-- Attachment #3: pr11067-check.diff --]
[-- Type: text/x-patch, Size: 1475 bytes --]

--- ../../../gdb-virgin.sum	2010-03-09 21:36:05.994326240 -0500
+++ gdb.sum	2010-03-11 10:26:51.188200869 -0500
@@ -1,4 +1,4 @@
-Test Run By moller on Tue Mar  9 19:14:09 2010
+Test Run By moller on Thu Mar 11 10:18:45 2010
 Native configuration is i686-pc-linux-gnu
 
 		=== gdb tests ===
@@ -5703,6 +5703,9 @@
 PASS: gdb.base/pr11022.exp: breakpoint hit 2
 PASS: gdb.base/pr11022.exp: set var x = 1
 PASS: gdb.base/pr11022.exp: watchpoint hit 2
+Running ../../../src/gdb/testsuite/gdb.base/pr11067.exp ...
+PASS: gdb.base/pr11067.exp: p /f tf
+PASS: gdb.base/pr11067.exp: p /f ef
 Running ../../../src/gdb/testsuite/gdb.base/prelink.exp ...
 PASS: gdb.base/prelink.exp: set verbose on
 PASS: gdb.base/prelink.exp: prelink
@@ -16058,7 +16061,7 @@
 PASS: gdb.threads/watchthreads2.exp: all threads started
 PASS: gdb.threads/watchthreads2.exp: watch x
 PASS: gdb.threads/watchthreads2.exp: set var test_ready = 1
-PASS: gdb.threads/watchthreads2.exp: all threads incremented x
+KFAIL: gdb.threads/watchthreads2.exp: gdb can drop watchpoints in multithreaded app (PRMS: gdb/10116)
 Running ../../../src/gdb/testsuite/gdb.trace/actions.exp ...
 PASS: gdb.trace/actions.exp: 5.1a: set three tracepoints, no actions
 PASS: gdb.trace/actions.exp: 5.1b: set actions for first tracepoint
@@ -16259,7 +16262,7 @@
 
 		=== gdb Summary ===
 
-# of expected passes		15452
+# of expected passes		15453
 # of unexpected failures	16
 # of expected failures		43
 # of untested testcases		3

      reply	other threads:[~2010-03-11 15:44 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-02-11  2:55 pr 11067 patch Chris Moller
2010-02-11  9:30 ` Joel Brobecker
2010-02-11 14:19   ` Chris Moller
2010-02-11 19:50   ` Tom Tromey
2010-02-12  4:11     ` Joel Brobecker
2010-02-12 15:48       ` Chris Moller
2010-02-13 11:49         ` Jan Kratochvil
2010-02-13 18:56           ` Chris Moller
2010-02-19 14:28             ` Joel Brobecker
2010-02-19 14:36               ` Jan Kratochvil
2010-02-19 14:45                 ` Joel Brobecker
2010-02-19 14:54                 ` Chris Moller
2010-02-19 18:50                   ` Jan Kratochvil
2010-02-19 19:52                     ` Chris Moller
2010-02-19 20:11                       ` Jan Kratochvil
2010-02-22  9:22                         ` Vladimir Prus
2010-02-23 23:55                         ` Tom Tromey
2010-03-11 15:44                           ` Chris Moller [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4B990FAE.2090600@redhat.com \
    --to=cmoller@redhat.com \
    --cc=brobecker@adacore.com \
    --cc=gdb-patches@sourceware.org \
    --cc=jan.kratochvil@redhat.com \
    --cc=tromey@redhat.com \
    --cc=vladimir@codesourcery.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox