From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4103 invoked by alias); 30 May 2012 20:44:33 -0000 Received: (qmail 4068 invoked by uid 22791); 30 May 2012 20:44:31 -0000 X-SWARE-Spam-Status: No, hits=-6.3 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,RCVD_IN_DNSWL_HI,RCVD_IN_HOSTKARMA_W,SPF_HELO_PASS,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 30 May 2012 20:44:17 +0000 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q4UKiEYX028973 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 30 May 2012 16:44:14 -0400 Received: from host2.jankratochvil.net (ovpn-116-47.ams2.redhat.com [10.36.116.47]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id q4UKi84f028595 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO); Wed, 30 May 2012 16:44:11 -0400 Date: Wed, 30 May 2012 20:44:00 -0000 From: Jan Kratochvil To: markus.t.metzger@intel.com Cc: kettenis@gnu.org, gdb-patches@sourceware.org, markus.t.metzger@gmail.com Subject: Re: [PATCH 13/16] xml, btrace: define btrace xml document style Message-ID: <20120530204408.GJ20633@host2.jankratochvil.net> References: <1337772151-20265-1-git-send-email-markus.t.metzger@intel.com> <1337772151-20265-14-git-send-email-markus.t.metzger@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1337772151-20265-14-git-send-email-markus.t.metzger@intel.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2012-05/txt/msg01065.txt.bz2 On Wed, 23 May 2012 13:22:28 +0200, markus.t.metzger@intel.com wrote: > diff --git a/gdb/Makefile.in b/gdb/Makefile.in > index b3fdd4f..5c31ecd 100644 > --- a/gdb/Makefile.in > +++ b/gdb/Makefile.in > @@ -489,7 +489,8 @@ RUNTESTFLAGS= > XMLFILES = $(srcdir)/features/gdb-target.dtd $(srcdir)/features/xinclude.dtd \ > $(srcdir)/features/library-list.dtd \ > $(srcdir)/features/library-list-svr4.dtd $(srcdir)/features/osdata.dtd \ > - $(srcdir)/features/threads.dtd $(srcdir)/features/traceframe-info.dtd > + $(srcdir)/features/threads.dtd $(srcdir)/features/traceframe-info.dtd \ > + $(srcdir)/features/btrace.dtd > > # This is ser-unix.o for any system which supports a v7/BSD/SYSV/POSIX > # interface to the serial port. Hopefully if get ported to OS/2, VMS, > diff --git a/gdb/btrace.c b/gdb/btrace.c > index 2b57ca7..c2aef67 100644 > --- a/gdb/btrace.c > +++ b/gdb/btrace.c > @@ -29,6 +29,7 @@ > #include "cli/cli-utils.h" > #include "arch-utils.h" > #include "disasm.h" > +#include "xml-support.h" > > #include > #include > @@ -798,6 +799,86 @@ cmd_btrace (char *args, int from_tty) > do_btrace (trace, flags); > } > > +#if defined(HAVE_LIBEXPAT) > + > +static void > +check_xml_btrace_version (struct gdb_xml_parser *parser, > + const struct gdb_xml_element *element, > + void *user_data, VEC (gdb_xml_value_s) *attributes) > +{ > + const char *version = xml_find_attribute (attributes, "version")->value; Empty line. > + if (strcmp (version, "1.0") != 0) > + gdb_xml_error (parser, _("Unsupported btrace version: \"%s\""), version); > +} > + > +static void > +parse_xml_btrace_block (struct gdb_xml_parser *parser, > + const struct gdb_xml_element *element, > + void *user_data, VEC (gdb_xml_value_s) *attributes) > +{ > + VEC (btrace_block_s) **btrace = user_data; > + struct btrace_block *block = VEC_safe_push (btrace_block_s, *btrace, NULL); > + ULONGEST *begin, *end; > + > + begin = xml_find_attribute (attributes, "begin")->value; > + end = xml_find_attribute (attributes, "end")->value; > + > + block->begin = *begin; > + block->end = *end; > +} > + > +const struct gdb_xml_attribute block_attributes[] = { It can be static. The same in other cases. > + { "begin", GDB_XML_AF_NONE, gdb_xml_parse_attr_ulongest, NULL }, > + { "end", GDB_XML_AF_NONE, gdb_xml_parse_attr_ulongest, NULL }, > + { NULL, GDB_XML_AF_NONE, NULL, NULL } > +}; > + > +const struct gdb_xml_attribute btrace_attributes[] = { > + { "version", GDB_XML_AF_NONE, NULL, NULL }, > + { NULL, GDB_XML_AF_NONE, NULL, NULL } > +}; > + > +const struct gdb_xml_element btrace_children[] = { > + { "block", block_attributes, NULL, > + GDB_XML_EF_REPEATABLE | GDB_XML_EF_OPTIONAL, parse_xml_btrace_block, NULL }, > + { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL } > +}; > + > +const struct gdb_xml_element btrace_elements[] = { > + { "btrace", btrace_attributes, btrace_children, GDB_XML_EF_NONE, > + check_xml_btrace_version, NULL }, > + { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL } > +}; > + > +#endif /* defined(HAVE_LIBEXPAT) */ > + > +VEC (btrace_block_s) * > +parse_xml_btrace (const char *buffer) > +{ > + VEC (btrace_block_s) *btrace = NULL; > + struct cleanup *cleanup; > + int errcode; > + > +#if defined(HAVE_LIBEXPAT) > + cleanup = make_cleanup (xfree, btrace); Use VEC_cleanup, not xfree. > + errcode = gdb_xml_parse_quick (_("btrace"), "btrace.dtd", btrace_elements, > + buffer, &btrace); > + if (errcode) > + { > + do_cleanups (cleanup); > + errno = errcode; > + return NULL; > + } > + > + /* Keep parse results. */ > + discard_cleanups (cleanup); > +#else /* defined(HAVE_LIBEXPAT) */ > + errno = ENOSYS; Again, use some error, not errno. > +#endif /* defined(HAVE_LIBEXPAT) */ > + > + return btrace; > +} > + > void _initialize_btrace (void); > > void > diff --git a/gdb/btrace.h b/gdb/btrace.h > index 97f0f52..12e70b9 100644 > --- a/gdb/btrace.h > +++ b/gdb/btrace.h > @@ -86,4 +86,7 @@ extern struct btrace_block *read_btrace (struct thread_info *, int); > extern struct btrace_block *prev_btrace (struct thread_info *); > extern struct btrace_block *next_btrace (struct thread_info *); > > +/* Parse a branch trace xml document into a block vector. */ > +extern VEC (btrace_block_s) *parse_xml_btrace (const char*); > + > #endif /* BTRACE_H */ > diff --git a/gdb/features/btrace.dtd b/gdb/features/btrace.dtd > new file mode 100644 > index 0000000..7e6bfd0 > --- /dev/null > +++ b/gdb/features/btrace.dtd > @@ -0,0 +1,12 @@ > + > + > + > + > + > + > + + end CDATA #REQUIRED> > -- > 1.7.1