From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10462 invoked by alias); 30 Jul 2014 18:30:53 -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 10451 invoked by uid 89); 30 Jul 2014 18:30:53 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.2 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_LOW,RP_MATCHES_RCVD,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-vc0-f177.google.com Received: from mail-vc0-f177.google.com (HELO mail-vc0-f177.google.com) (209.85.220.177) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Wed, 30 Jul 2014 18:30:51 +0000 Received: by mail-vc0-f177.google.com with SMTP id hy4so2442636vcb.22 for ; Wed, 30 Jul 2014 11:30:49 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=kZ2Q0Coj7jgX3N52WFC+0p2I6GklHLlFQjaXFAnx9vc=; b=X6bH8/It4a67/7ZFRNJL1ByrAkyg5OcbSqqX+LwegKjQCjK4RJQS1yEZGfhOVV9B3p Fcc+356EIDQagDOHw1N6T+fKb3pTHZAAYdrBf7gcZxi4uHMlcjSo1QqDsp0Dv3yINZRq Tt3+Hg6gipsrYxP6kjok153HDbjGqoNaKnMesMAwdhR/n7m3HW7dnPrADJ0K/fOomWqd WxHigmicot/dAVK+qVstLClhH43YT776C0mi32aeRLD4QlqAgYOA+ycqNUT8K+6Q+HQd I3LN8gZlYaiv7XZjVuL2OovCy9hwCH3gdSsPf29SOEieVZdUJ4nZ4s7sCBKG8VAJQQVM aLBQ== X-Gm-Message-State: ALoCoQkrF+56nntvuPkM3onkIExiwOsHRUzN5knpi0VqxyJ0ukJsDkATmwI74ND0sg0qnLnbHrXq MIME-Version: 1.0 X-Received: by 10.220.105.201 with SMTP id u9mr5466614vco.11.1406745049381; Wed, 30 Jul 2014 11:30:49 -0700 (PDT) Received: by 10.52.28.233 with HTTP; Wed, 30 Jul 2014 11:30:49 -0700 (PDT) In-Reply-To: <53873ABE.9070801@redhat.com> References: <1400878753-24688-1-git-send-email-palves@redhat.com> <1400878753-24688-3-git-send-email-palves@redhat.com> <83fvjzlkua.fsf@gnu.org> <53873ABE.9070801@redhat.com> Date: Wed, 30 Jul 2014 18:40:00 -0000 Message-ID: Subject: Re: [PATCH v6 2/2] enable target async by default; separate MI and target notions of async From: Doug Evans To: Pedro Alves Cc: Eli Zaretskii , gdb-patches Content-Type: text/plain; charset=UTF-8 X-IsSubscribed: yes X-SW-Source: 2014-07/txt/msg00796.txt.bz2 On Thu, May 29, 2014 at 6:48 AM, Pedro Alves wrote: > [...] > Below's what I pushed. > > 8<------------ > Subject: [PATCH] enable target async by default; separate MI and target > notions of async > > This finally makes background execution commands possible by default. > > However, in order to do that, there's one last thing we need to do -- > we need to separate the MI and target notions of "async". Unlike the > CLI, where the user explicitly requests foreground vs background > execution in the execution command itself (c vs c&), MI chose to treat > "set target-async" specially -- setting it changes the default > behavior of execution commands. > > So, we can't simply "set target-async" default to on, as that would > affect MI frontends. Instead we have to make the setting MI-specific, > and teach MI about sync commands on top of an async target. > > Because the "target" word in "set target-async" ends up as a potential > source of confusion, the patch adds a "set mi-async" option, and makes > "set target-async" a deprecated alias. > > Rather than make the targets always async, this patch introduces a new > "maint set target-async" option so that the GDB developer can control > whether the target is async. This makes it simpler to debug issues > arising only in the synchronous mode; important because sync mode > seems unlikely to go away. > > Unlike in previous revisions, "set target-async" does not affect this > new maint parameter. The rationale for this is that then one can > easily run the test suite in the "maint set target-async off" mode and > have tests that enable mi-async fail just like they fail on > non-async-capable targets. This emulation is exactly the point of the > maint option. > > I had asked Tom in a previous iteration to split the actual change of > the target async default to a separate patch, but it turns out that > that is quite awkward in this version of the patch, because with MI > async and target async decoupled (unlike in previous versions), if we > don't flip the default at the same time, then just "set target-async > on" alone never actually manages to do anything. It's best to not > have that transitory state in the tree. > > Given "set target-async on" now only has effect for MI, the patch goes > through the testsuite removing it from non-MI tests. MI tests are > adjusted to use the new and less confusing "mi-async" spelling. > > 2014-05-29 Pedro Alves > Tom Tromey > > * NEWS: Mention "maint set target-async", "set mi-async", and that > background execution commands are now always available. > * target.h (target_async_permitted): Update comment. > * target.c (target_async_permitted, target_async_permitted_1): > Default to 1. > (set_target_async_command): Rename to ... > (maint_set_target_async_command): ... this. > (show_target_async_command): Rename to ... > (maint_show_target_async_command): ... this. > (_initialize_target): Adjust. > * infcmd.c (prepare_execution_command): Make extern. > * inferior.h (prepare_execution_command): Declare. > * infrun.c (set_observer_mode): Leave target async alone. > * mi/mi-interp.c (mi_interpreter_init): Install > mi_on_sync_execution_done as sync_execution_done observer. > (mi_on_sync_execution_done): New function. > (mi_execute_command_input_handler): Don't print the prompt if we > just started a synchronous command with an async target. > (mi_on_resume): Check sync_execution before printing prompt. > * mi/mi-main.h (mi_async_p): Declare. > * mi/mi-main.c: Include gdbcmd.h. > (mi_async_p): New function. > (mi_async, mi_async_1): New globals. > (set_mi_async_command, show_mi_async_command, mi_async): New > functions. > (exec_continue): Call prepare_execution_command. > (run_one_inferior, mi_cmd_exec_run, mi_cmd_list_target_features) > (mi_execute_async_cli_command): Use mi_async_p. > (_initialize_mi_main): Install "set mi-async". Make > "target-async" a deprecated alias. > > 2014-05-29 Pedro Alves > Tom Tromey > > * gdb.texinfo (Non-Stop Mode): Remove "set target-async 1" > from example. > (Asynchronous and non-stop modes): Document '-gdb-set mi-async'. > Mention that target-async is now deprecated. > (Maintenance Commands): Document maint set/show target-async. > > 2014-05-29 Pedro Alves > Tom Tromey > > * gdb.base/async-shell.exp: Don't enable target-async. > * gdb.base/async.exp > * gdb.base/corefile.exp (corefile_test_attach): Remove 'async' > parameter. Adjust. > (top level): Don't test with "target-async". > * gdb.base/dprintf-non-stop.exp: Don't enable target-async. > * gdb.base/gdb-sigterm.exp: Don't test with "target-async". > * gdb.base/inferior-died.exp: Don't enable target-async. > * gdb.base/interrupt-noterm.exp: Likewise. > * gdb.mi/mi-async.exp: Use "mi-async" instead of "target-async". > * gdb.mi/mi-nonstop-exit.exp: Likewise. > * gdb.mi/mi-nonstop.exp: Likewise. > * gdb.mi/mi-ns-stale-regcache.exp: Likewise. > * gdb.mi/mi-nsintrall.exp: Likewise. > * gdb.mi/mi-nsmoribund.exp: Likewise. > * gdb.mi/mi-nsthrexec.exp: Likewise. > * gdb.mi/mi-watch-nonstop.exp: Likewise. > * gdb.multi/watchpoint-multi.exp: Adjust comment. > * gdb.python/py-evsignal.exp: Don't enable target-async. > * gdb.python/py-evthreads.exp: Likewise. > * gdb.python/py-prompt.exp: Likewise. > * gdb.reverse/break-precsave.exp: Don't test with "target-async". > * gdb.server/solib-list.exp: Don't enable target-async. > * gdb.threads/thread-specific-bp.exp: Likewise. > * lib/mi-support.exp: Adjust to use mi-async. Hi. I happened to notice a couple of comments that still need updating. linux-nat.c: /* target_is_async_p implementation. */ static int linux_nat_is_async_p (struct target_ops *ops) { /* NOTE: palves 2008-03-21: We're only async when the user requests it explicitly with the "set target-async" command. Someday, linux will always be async. */ return target_async_permitted; } /* target_can_async_p implementation. */ static int linux_nat_can_async_p (struct target_ops *ops) { /* NOTE: palves 2008-03-21: We're only async when the user requests it explicitly with the "set target-async" command. Someday, linux will always be async. */ return target_async_permitted; }