From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27173 invoked by alias); 21 Aug 2014 00:29:44 -0000 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 Received: (qmail 27150 invoked by uid 89); 21 Aug 2014 00:29:40 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.7 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.2 X-HELO: relay1.mentorg.com Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 21 Aug 2014 00:29:38 +0000 Received: from svr-orw-fem-01.mgc.mentorg.com ([147.34.98.93]) by relay1.mentorg.com with esmtp id 1XKGFz-0001GL-3x from donb@codesourcery.com for gdb-patches@sourceware.org; Wed, 20 Aug 2014 17:29:35 -0700 Received: from SVR-ORW-FEM-04.mgc.mentorg.com ([147.34.97.41]) by svr-orw-fem-01.mgc.mentorg.com over TLS secured channel with Microsoft SMTPSVC(6.0.3790.4675); Wed, 20 Aug 2014 17:29:35 -0700 Received: from build4-lucid-cs (147.34.91.1) by svr-orw-fem-04.mgc.mentorg.com (147.34.97.41) with Microsoft SMTP Server id 14.2.247.3; Wed, 20 Aug 2014 17:29:34 -0700 Received: by build4-lucid-cs (Postfix, from userid 1905) id EE28B40D74; Wed, 20 Aug 2014 17:29:33 -0700 (PDT) From: Don Breazeal To: Subject: [Patch 00/16 v2] Linux extended-remote fork and exec events Date: Thu, 21 Aug 2014 00:29:00 -0000 Message-ID: <1408580964-27916-1-git-send-email-donb@codesourcery.com> In-Reply-To: <1407434395-19089-1-git-send-email-donb@codesourcery.com> References: <1407434395-19089-1-git-send-email-donb@codesourcery.com> MIME-Version: 1.0 Content-Type: text/plain X-IsSubscribed: yes X-SW-Source: 2014-08/txt/msg00436.txt.bz2 This is an update to the patch series implementing fork events for extended-remote Linux targets. Changes from the previous version: * Exec Events: integrated the previous patch series that implemented exec events for extended-remote Linux targets. The exec patches had significant overlap with the fork event patch series, and it no longer made sense to maintain them separately. * Exec Catchpoints: the previous exec event patch series did not implement 'catch exec'. That is included here. * GDBserver Extended Feature Query: patch 4 has been completely rewritten. The previous version attempted to determine whether extended events were supported by gdbserver using information only on the host. This approach was flawed and did not work at all once follow-exec was introduced. This mechanism now uses an new RSP message to determine which extended events are supported prior to attempting any activity that would require that support. There is more detail in the patch 4 description. * Coding Style: fixed a number of coding style violations. * Line Breaks in Descriptions: formatted the patch descriptions with line breaks in each paragraph, which might make them more accessible via web pages. Maintainers may find it useful to consider this patch series as having three parts: 1) Patches 1-3: these refactor existing code without making any significant functional changes (aside from some new verbose messages). 2) Patches 4-10: these implement all the fork event functionality. 3) Patches 11-16: these implement all the exec event functionality. Dividing it like this may help make the large size of the patch series more manageable. Again, please let me know if there is anything I can do to make this easier to review. Eli approved patches 10 and 15 when they were posted previously. The only changes to these patches since then were those that he requested. ==================================================================== This patch series implements fork and exec events for extended-remote linux targets. Features that are enabled include: * follow-fork-mode * detach-on-fork * follow-exec-mode * catch fork/vfork/exec This work addresses PR gdb/13584, and is part of the local/remote debugging feature parity project (https://sourceware.org/gdb/wiki/LocalRemoteFeatureParity). My final test results showed the following changes: * native: PASS +46 - this is due the addition of non-stop mode tests to gdb.threads/non-ldr-exc-*.exp. * remote: no change * extended-remote: PASS: +329, FAIL: -134, KFAIL: +1, UNTESTED: +8, UNSUPPORTED: -6 Some items to note about the extended-remote results: - there are some extended-remote failures in gdb.base/disp-step-syscall.exp that don't show up in the unmodified version on the native target. Investigation shows that these tests are producing a bogus PASS result on the native target. I did not pursue this further. - the new non-stop tests in gdb.threads/non-ldr-exc-*.exp give an UNTESTED result for extended-remote. This is due to an RSP error in non-stop mode when running to main. I spent some time investigating this and concluded that I should leave it alone for now, for fear of having an ever-growing, never-ending project. My plan is to track this with a bug report once that is appropriate. - gdb.threads/thread-execl.exp gives a couple of failures related to scheduler locking. As with the previous item, after spending some time on this I concluded that pursuing it further now would be feature-creep, and that this should be tracked with a bug report. - gdb.trace/tspeed.exp got some timeout failures one time, but I was unable to reproduce it. I'm unsure whether this is significant. I can provide test logs or .sum diffs if anybody is interested in specifics. The contents of the patch series are as follows: Patch 1: refactor native follow-fork implementation to move target-independent code from target-dependent file (linux-nat.c) to make it useful for extended-remote targets. Patch 2: encapsulate the code used to print verbose/debug messages related to folow-fork into functions, and add a message in one case. Also make messages distinguish between fork and vfork. Patch 3: encapsulate code that identifies and extracts extended ptrace events found in the Linux wait status into functions, and call them everywhere that the hard-coded wait status processing was used. Patch 4: implements a mechanism for determining what extended-mode features gdbserver supports. There are several issues that this addresses, which are detailed in the patch 4 description. Basically, the patch implements a new RSP packet "qExtendedFeatures" that allows GDB to ask gdbserver for the list of extended features that are enabled prior to doing anything that would require such a feature. In gdbserver, it splits checking whether the OS supports the features from actually enabling them, and enables them only when it is clear that extended mode is active. To facilitate this the patch also extends the changes that Gary Benson implemented to reduce the use of #ifdef GDBSERVER in linux-ptrace.c here: https://support urceware.org/ml/gdb-patches/2014-07/msg00633.html. Patch 5: implements some functions to clone the breakpoint lists in gdbserver. These are needed because in gdbserver, each process maintains a separate breakpoint list. When a fork occurs, the child process needs a copy of the parent's breakpoint list so that it can manage the breakpoints using existing mechanisms in gdbserver. Patch 6: implements follow-fork, but only for 'fork', not 'vfork'. I split these apart in an attempt to keep the size of the patches down to a reviewable size. Patch 7: adds the architecture-specific pieces of follow-fork. This is the mechanism that handles copying the debug register state from the parent to the child. Patch 8: adds follow-fork for vfork. Patch 9: adds 'catch fork' and 'catch vfork', along with some code to make sure that killing a process that has forked, but before the fork is followed, also kills the child process. Patch 10: implements changes to the manual and the NEWS file for the fork event changes. Patch 11: implements support for the extended ptrace event PTRACE_EVENT_EXIT, which is a prerequisite for the exec event support. Patch 12: implements exec event support and follow-exec. Patch 13: implements exec catchpoints. Patch 14: suppresses some spurious warnings that were generated after an exec. These warnings were caused when gdbserver attempted to check the version number from the r_debug structure in the new image before the structure had been initialized. Patch 15: implements changed to the manual and NEWS file for the exec event changes. Patch 16: changes how gdb.base/foll-exec.exp starts GDB and loads the program so that it will work with extended-remote. It also extends the tests gdb.threads/non-ldr-exc-[1-4].exp to test in non-stop mode as well as in all-stop mode. thanks --Don gdb/NEWS | 18 + gdb/doc/gdb.texinfo | 42 ++- gdb/gdbserver/gdbthread.h | 5 + gdb/gdbserver/linux-aarch64-low.c | 28 ++ gdb/gdbserver/linux-arm-low.c | 26 + gdb/gdbserver/linux-low.c | 511 +++++++++++++++++++-- gdb/gdbserver/linux-low.h | 8 + gdb/gdbserver/linux-mips-low.c | 76 +++- gdb/gdbserver/linux-x86-low.c | 29 ++ gdb/gdbserver/lynx-low.c | 4 + gdb/gdbserver/mem-break.c | 104 +++++ gdb/gdbserver/mem-break.h | 6 + gdb/gdbserver/nto-low.c | 4 + gdb/gdbserver/remote-utils.c | 45 ++- gdb/gdbserver/server.c | 92 ++++ gdb/gdbserver/server.h | 3 + gdb/gdbserver/spu-low.c | 4 + gdb/gdbserver/target.h | 33 ++ gdb/gdbserver/win32-low.c | 4 + gdb/infrun.c | 296 +++++++++++- gdb/infrun.h | 2 - gdb/linux-nat.c | 264 ++---------- gdb/nat/linux-procfs.c | 18 + gdb/nat/linux-procfs.h | 4 + gdb/nat/linux-ptrace.c | 150 +++++-- gdb/nat/linux-ptrace.h | 10 +- gdb/remote.c | 337 +++++++++++++-- gdb/testsuite/gdb.base/foll-exec.exp | 44 +-- gdb/testsuite/gdb.base/foll-fork.exp | 12 +- gdb/testsuite/gdb.base/foll-vfork.exp | 8 +- gdb/testsuite/gdb.threads/fork-thread-pending.exp | 23 +- gdb/testsuite/gdb.threads/non-ldr-exc-1.exp | 20 +- gdb/testsuite/gdb.threads/non-ldr-exc-2.exp | 36 ++- gdb/testsuite/gdb.threads/non-ldr-exc-3.exp | 36 ++- gdb/testsuite/gdb.threads/non-ldr-exc-4.exp | 20 +- 35 files changed, 1891 insertions(+), 431 deletions(-)