From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1493 invoked by alias); 26 Feb 2009 18:01:18 -0000 Received: (qmail 1201 invoked by uid 22791); 26 Feb 2009 18:01:17 -0000 X-SWARE-Spam-Status: No, hits=-2.2 required=5.0 tests=AWL,BAYES_00,SPF_PASS X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.33.17) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 26 Feb 2009 18:01:10 +0000 Received: from spaceape7.eur.corp.google.com (spaceape7.eur.corp.google.com [172.28.16.141]) by smtp-out.google.com with ESMTP id n1QI1712011821 for ; Thu, 26 Feb 2009 18:01:07 GMT Received: from localhost (ruffy.mtv.corp.google.com [172.18.118.116]) by spaceape7.eur.corp.google.com with ESMTP id n1QI15AT030392 for ; Thu, 26 Feb 2009 10:01:06 -0800 Received: by localhost (Postfix, from userid 67641) id 138461C78A7; Thu, 26 Feb 2009 10:01:04 -0800 (PST) To: gdb-patches@sourceware.org Subject: [RFC] When debugging infrun, print stop_pc in all possible cases. Message-Id: <20090226180105.138461C78A7@localhost> Date: Thu, 26 Feb 2009 19:16:00 -0000 From: dje@google.com (Doug Evans) X-System-Of-Record: true 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: 2009-02/txt/msg00487.txt.bz2 Hi. I've been debugging a few issues and it's been really helpful to know stop_pc in cases that aren't printed today. This patch moves the debug printing of stop_pc up. I'm not submitting it RFA because I'm not entirely happy with it. Printing stop_pc has been helpful, I'd like to improve what's there today, but it's not clear to me that this patch reasonably handles the cases when one can't read pc before the big switch() on ecs->ws.kind. Comments? 2009-02-26 Doug Evans * infrun.c (handle_inferior_event): Move the debug printing of stop_pc, and possible watchpoint address, to an earlier point so we print it in all cases (where it's possible). Index: infrun.c =================================================================== RCS file: /cvs/src/src/gdb/infrun.c,v retrieving revision 1.360 diff -u -p -r1.360 infrun.c --- infrun.c 25 Feb 2009 02:14:22 -0000 1.360 +++ infrun.c 26 Feb 2009 17:52:28 -0000 @@ -2178,6 +2178,46 @@ handle_inferior_event (struct execution_ /* Dependent on the current PC value modified by adjust_pc_after_break. */ reinit_frame_cache (); + if (debug_infrun) + { + /* It's helpful to know the stop pc in all cases when we stop + (even if we're eventually going to resume). + To keep things simple we print it here before the big switch on + ecs->ws.kind. If we leave printing of stop_pc until later, + we will miss the cases where we "return;" early. + There are a few cases where we can't read pc though. */ + + switch (ecs->ws.kind) + { + case TARGET_WAITKIND_EXITED: + case TARGET_WAITKIND_SIGNALLED: + break; + + default: + { + CORE_ADDR debug_stop_pc = + regcache_read_pc (get_thread_regcache (ecs->ptid)); + + fprintf_unfiltered (gdb_stdlog, "infrun: stop_pc = 0x%s\n", + paddr_nz (debug_stop_pc)); + + if (STOPPED_BY_WATCHPOINT (&ecs->ws)) + { + CORE_ADDR addr; + + if (target_stopped_data_address (¤t_target, &addr)) + fprintf_unfiltered (gdb_stdlog, + "infrun: stopped by watchpoint, data address = 0x%s\n", + paddr_nz (addr)); + else + fprintf_unfiltered (gdb_stdlog, + "infrun: stopped by watchpoint, no data address available\n"); + } + break; + } + } + } + if (ecs->ws.kind != TARGET_WAITKIND_IGNORE) { breakpoint_retire_moribund (); @@ -2507,25 +2547,6 @@ targets should add new threads to the th stop_pc = regcache_read_pc (get_thread_regcache (ecs->ptid)); - if (debug_infrun) - { - fprintf_unfiltered (gdb_stdlog, "infrun: stop_pc = 0x%s\n", - paddr_nz (stop_pc)); - if (STOPPED_BY_WATCHPOINT (&ecs->ws)) - { - CORE_ADDR addr; - fprintf_unfiltered (gdb_stdlog, "infrun: stopped by watchpoint\n"); - - if (target_stopped_data_address (¤t_target, &addr)) - fprintf_unfiltered (gdb_stdlog, - "infrun: stopped data address = 0x%s\n", - paddr_nz (addr)); - else - fprintf_unfiltered (gdb_stdlog, - "infrun: (no data address available)\n"); - } - } - if (stepping_past_singlestep_breakpoint) { gdb_assert (singlestep_breakpoints_inserted_p);