From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16783 invoked by alias); 14 Mar 2013 18:06:58 -0000 Received: (qmail 16770 invoked by uid 22791); 14 Mar 2013 18:06:56 -0000 X-SWARE-Spam-Status: No, hits=-6.8 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail-qe0-f74.google.com (HELO mail-qe0-f74.google.com) (209.85.128.74) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 14 Mar 2013 18:06:51 +0000 Received: by mail-qe0-f74.google.com with SMTP id 9so253310qea.1 for ; Thu, 14 Mar 2013 11:06:50 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-received:from:mime-version:content-type:content-transfer-encoding :message-id:date:to:cc:subject:in-reply-to:references:x-mailer :x-gm-message-state; bh=0kfybZywwlC+iNjXwZo/qBMAliL39Fy+hckBjDKTeE4=; b=bvAato8rMMhBQzFOgv68qq89LIg1bwvTFPTVtiFekM5cIMvz50yBDDyqyrExJA/cs8 fAH/uwQc8ArNI4IPDsWvAGg3h91gqpbRNMMIlAVRST09fTc+yi1Xm8r5XzosKoJiI7Jt glJ9cQ0bfLxkSNo7PGsUSZXAqwiz1bdSXTg+mnMTVTShoKAH9KHNbveWYpBpXeLFA6yj sad7N+TOhtUdTFDwTjKzDEiJZ62jZYxN1GItE2z3OEqf8WYw8RvIB5iGkVYIDBkeq7Ze w0HZMkWL62g4VNMsUc52amU3KKbOZXJYGALGFzP5FYFCLcGnpEexLXXLcU2l2MhSxIUS RCOA== X-Received: by 10.236.159.100 with SMTP id r64mr2048354yhk.20.1363284410286; Thu, 14 Mar 2013 11:06:50 -0700 (PDT) Received: from corp2gmr1-1.hot.corp.google.com (corp2gmr1-1.hot.corp.google.com [172.24.189.92]) by gmr-mx.google.com with ESMTPS id u21si376702yhj.0.2013.03.14.11.06.50 (version=TLSv1.1 cipher=AES128-SHA bits=128/128); Thu, 14 Mar 2013 11:06:50 -0700 (PDT) Received: from ruffy2.mtv.corp.google.com (ruffy2.mtv.corp.google.com [172.17.128.107]) by corp2gmr1-1.hot.corp.google.com (Postfix) with ESMTP id BB90931C0AC; Thu, 14 Mar 2013 11:06:49 -0700 (PDT) From: Doug Evans MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <20802.4537.197713.506858@ruffy2.mtv.corp.google.com> Date: Thu, 14 Mar 2013 18:06:00 -0000 To: Yao Qi Cc: Subject: Re: [PATCH v3 06/15] Write status to CTF and read. In-Reply-To: <1362800844-27940-7-git-send-email-yao@codesourcery.com> References: <1362800844-27940-1-git-send-email-yao@codesourcery.com> <1362800844-27940-7-git-send-email-yao@codesourcery.com> X-Gm-Message-State: ALoCoQltcS+CGt7XM5ocvXZW7kWowPsWV/FH9pf0FvXeEXaaw0w8dtWQ+So7ZU+SPYeqMlGjWaxUSwKq0VgUTkExZ/6cdV1m8/YSjS8bXZR4nh2vX/EZP/6eNjbBiYcK45AGYhvZNwNmp5qv46HzVxey3caY03XWqyVpsASL4wh3z+z0p1ZBWVfo9VAjwzrX3WINFpBsRzHdjDA5S/paj+ld1zek036naA== 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: 2013-03/txt/msg00645.txt.bz2 Yao Qi writes: > 2013-03-08 Yao Qi > > * ctf.c (CTF_EVENT_ID_STATUS, ctf_save_write_int32): New > macros. > (ctf_save_metadata_header): Define new type alias in > metadata. > (ctf_write_header): Start a new faked packet for trace status. > (ctf_write_status): Write trace status to CTF. > (ctf_write_definition_end): End the faked packet. > (start_pos): New variable. > (SET_INT32_FIELD): New macro. > (ctf_read_status): New. > (ctf_open): Skip the first faked packet and assert on some > event types. > (ctf_trace_find): Set the iterator to the beginning of packet > including trace frames, instead of the first packet. > (ctf_get_trace_status): New. > (init_ctf_ops): Install ctf_get_trace_status to field > 'to_get_trace_status'. > @@ -747,15 +798,66 @@ ctf_open_dir (char *dirname) > > } > [...] > +#define SET_INT32_FIELD(EVENT, SCOPE, VAR, FIELD) \ > + VAR->FIELD = (int) bt_ctf_get_int64 (bt_ctf_get_field (EVENT, \ > + SCOPE, \ > + #FIELD)) Macros like this should be in a do { } while (0). do { \ ...; \ } while (0) Plus wrap params in parens (except #FIELD of course). > static void > ctf_open (char *dirname, int from_tty) > { > + struct bt_ctf_event *event; > + uint32_t event_id; > + const struct bt_definition *scope; > + > target_preopen (from_tty); > if (!dirname) > error (_("No CTF directory specified.")); > > ctf_open_dir (dirname); > > + /* Skip the first packet which about the trace status. The first > + event is "frame". */ > + event = bt_ctf_iter_read_event (ctf_iter); > + scope = bt_ctf_get_top_level_scope (event, BT_STREAM_EVENT_HEADER); > + event_id = bt_ctf_get_uint64 (bt_ctf_get_field (event, scope, "id")); > + gdb_assert (event_id == CTF_EVENT_ID_FRAME); Question: Will these asserts trigger on bad input data? [If so, you need to use something else besides gdb_assert.] > + /* The second event is "status". */ > + gdb_assert (bt_iter_next (bt_ctf_get_iter (ctf_iter)) >= 0); > + event = bt_ctf_iter_read_event (ctf_iter); > + scope = bt_ctf_get_top_level_scope (event, BT_STREAM_EVENT_HEADER); > + event_id = bt_ctf_get_uint64 (bt_ctf_get_field (event, scope, "id")); > + gdb_assert (event_id == CTF_EVENT_ID_STATUS); > + ctf_read_status (event, current_trace_status ()); > + > + /* The third event is "frame". A new packet. */ > + gdb_assert (bt_iter_next (bt_ctf_get_iter (ctf_iter)) >= 0); > + event = bt_ctf_iter_read_event (ctf_iter); > + scope = bt_ctf_get_top_level_scope (event, BT_STREAM_EVENT_HEADER); > + event_id = bt_ctf_get_uint64 (bt_ctf_get_field (event, scope, "id")); > + gdb_assert (event_id == CTF_EVENT_ID_FRAME); > + > + start_pos = bt_iter_get_pos (bt_ctf_get_iter (ctf_iter)); > + gdb_assert (start_pos->type == BT_SEEK_RESTORE); > + > trace_dirname = xstrdup (dirname); > push_target (&ctf_ops); > }