From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14163 invoked by alias); 11 Dec 2012 06:40:42 -0000 Received: (qmail 14025 invoked by uid 22791); 11 Dec 2012 06:40:40 -0000 X-SWARE-Spam-Status: No, hits=-3.7 required=5.0 tests=AWL,BAYES_00,FROM_12LTRDOM,KHOP_RCVD_UNTRUST,RCVD_IN_HOSTKARMA_W,RCVD_IN_HOSTKARMA_WL X-Spam-Check-By: sourceware.org Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 11 Dec 2012 06:40:31 +0000 Received: from svr-orw-exc-10.mgc.mentorg.com ([147.34.98.58]) by relay1.mentorg.com with esmtp id 1TiJW2-0002CJ-Oq from Yao_Qi@mentor.com for gdb-patches@sourceware.org; Mon, 10 Dec 2012 22:40:30 -0800 Received: from SVR-ORW-FEM-04.mgc.mentorg.com ([147.34.97.41]) by SVR-ORW-EXC-10.mgc.mentorg.com with Microsoft SMTPSVC(6.0.3790.4675); Mon, 10 Dec 2012 22:40:30 -0800 Received: from qiyao.dyndns.org.com (147.34.91.1) by svr-orw-fem-04.mgc.mentorg.com (147.34.97.41) with Microsoft SMTP Server id 14.1.289.1; Mon, 10 Dec 2012 22:40:29 -0800 From: Yao Qi To: Subject: [PATCH 0/8, V4] A general notification in GDB RSP Date: Tue, 11 Dec 2012 06:40:00 -0000 Message-ID: <1355208017-9204-1-git-send-email-yao@codesourcery.com> MIME-Version: 1.0 Content-Type: text/plain 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-12/txt/msg00298.txt.bz2 Hi, We have more and more requirements that remote target wants to notify GDB via RSP at any time during connection when some states are changed in remote target. However, GDB doesn't have such general notification infrastructure. This is what this patch set tries to add. Nowadays, notification mechanism exists in GDB for '%Stop' only, and works pretty good. My rationale of this work is 'decouple %Stop/vStopped from existing notification mechanism so that notification mechanism can handle other types of notification. First of all, let us look at how '%Stop' and 'vStopped' works, gdb gdbserver <- %Stop // [1] Send notification [after process other packets] -> vStopped // [2] Ack this notification <- T05 thread:2 // [3] Reply -> vStopped // [4] Continue to query <- OK // [5] Done We can generalize this protocol like this, gdb gdbserver <- %NOTIF // [1] Send notification [after process other packets] -> vACK // [2] Ack this notification <- EVENT // [3] Event -> vACK // [4] Continue to query <- OK // [5] Done For each type of notification, we only have to define three things, 1) NOTIF, the key word of notification, for example, "Stop" 2) ACK, the command GDB ack to this notification, "vStopped" for example, 3) EVENT, the format of event to GDB. GDBserver should be able to send packet to comply with EVENT, and GDB is able parse the packet, and identify the packet is EVENT or not. This is the V4 of this patch series, there are some changes compared with V3, - Move macros in common/queue.h from the bottom to to top. Move the comments of functions to macros, as users should use macros externally, - Don't treat 'Stop' a special notification, and keep the global queue of stop reply. - Move 'ptid' field out of 'struct notif_reply' (it is 'struct notif_event' now). - Rename some struct - Add some comments in the code. This patch series depends on this patch, [PATCH] Attach discard_pending_stop_replies to observer inferior_exit http://sourceware.org/ml/gdb-patches/2012-12/msg00126.html All these patches are tested on x86_64-linux {native, gdbserver} x {sync, async}. No regression. gdb/Makefile.in | 9 +- gdb/NEWS | 4 + gdb/common/queue.h | 303 ++++++++++++++++++++++++++++ gdb/doc/gdb.texinfo | 6 + gdb/gdbserver/Makefile.in | 4 +- gdb/gdbserver/linux-low.c | 10 + gdb/gdbserver/notif.c | 180 +++++++++++++++++ gdb/gdbserver/notif.h | 68 +++++++ gdb/gdbserver/server.c | 164 +++++---------- gdb/gdbserver/server.h | 2 - gdb/remote-notif.c | 324 ++++++++++++++++++++++++++++++ gdb/remote-notif.h | 85 ++++++++ gdb/remote.c | 491 ++++++++++++++++++++++++--------------------- gdb/remote.h | 3 + 14 files changed, 1310 insertions(+), 343 deletions(-) create mode 100644 gdb/common/queue.h create mode 100644 gdb/gdbserver/notif.c create mode 100644 gdb/gdbserver/notif.h create mode 100644 gdb/remote-notif.c create mode 100644 gdb/remote-notif.h -- 1.7.7.6