From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29097 invoked by alias); 12 Aug 2013 12:22:01 -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 29088 invoked by uid 89); 12 Aug 2013 12:22:01 -0000 X-Spam-SWARE-Status: No, score=-5.7 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,KHOP_THREADED,RCVD_IN_DNSWL_MED,RCVD_IN_HOSTKARMA_W,RP_MATCHES_RCVD autolearn=ham version=3.3.2 Received: from mms3.broadcom.com (HELO mms3.broadcom.com) (216.31.210.19) by sourceware.org (qpsmtpd/0.84/v0.84-167-ge50287c) with ESMTP; Mon, 12 Aug 2013 12:22:00 +0000 Received: from [10.9.208.57] by mms3.broadcom.com with ESMTP (Broadcom SMTP Relay (Email Firewall v6.5)); Mon, 12 Aug 2013 05:11:50 -0700 X-Server-Uuid: B86B6450-0931-4310-942E-F00ED04CA7AF Received: from IRVEXCHSMTP1.corp.ad.broadcom.com (10.9.207.51) by IRVEXCHCAS08.corp.ad.broadcom.com (10.9.208.57) with Microsoft SMTP Server (TLS) id 14.1.438.0; Mon, 12 Aug 2013 05:21:50 -0700 Received: from mail-irva-13.broadcom.com (10.10.10.20) by IRVEXCHSMTP1.corp.ad.broadcom.com (10.9.207.51) with Microsoft SMTP Server id 14.1.438.0; Mon, 12 Aug 2013 05:21:50 -0700 Received: from [10.177.73.61] (unknown [10.177.73.61]) by mail-irva-13.broadcom.com (Postfix) with ESMTP id 40CBFF2D73 for ; Mon, 12 Aug 2013 05:21:50 -0700 (PDT) Message-ID: <5208D35C.2040402@broadcom.com> Date: Mon, 12 Aug 2013 12:22:00 -0000 From: "Andrew Burgess" User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/20130801 Thunderbird/17.0.8 MIME-Version: 1.0 To: gdb-patches@sourceware.org Subject: [PATCH 04/12] Introduce OPTIMIZED_OUT_ERROR. References: <5208D1DF.1090201@broadcom.com> In-Reply-To: <5208D1DF.1090201@broadcom.com> Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 7bit X-SW-Source: 2013-08/txt/msg00304.txt.bz2 We already have a NOT_AVAILABLE_ERROR, this patch adds an OPTIMIZED_OUT_ERROR. It is not clear to me if the original intention of the NOT_AVAILABLE_ERROR was to cover all reasons why a value is missing, but from how it is currently used the NOT_AVAILABLE_ERROR is for specifically the case where a value is unavailable. So, in order to catch the optimized out errors just like we catch the unavailable errors, I've added a new error code, and throw it in various places. OK to apply? Thanks, Andrew gdb/ChangeLog 2013-08-08 Andrew Burgess * exceptions.h (errors): Add OPTIMIZED_OUT_ERROR. * exceptions.c (is_unavailable_error): Check for OPTIMIZED_OUT_ERROR. * dwarf2loc.c (write_pieced_value): Throw OPTIMIZED_OUT_ERROR. * frame.c (frame_unwind_pc_if_available): Display correct string for optimized out or unavailable values. (frame_unwind_register): Throw OPTIMIZED_OUT_ERROR. * spu-tdep.c (spu_software_single_step): Throw OPTIMIZED_OUT_ERROR. * valops.c (value_assign): Throw OPTIMIZED_OUT_ERROR. diff --git a/gdb/dwarf2loc.c b/gdb/dwarf2loc.c index 36b80fb..bae425a 100644 --- a/gdb/dwarf2loc.c +++ b/gdb/dwarf2loc.c @@ -1880,9 +1880,10 @@ write_pieced_value (struct value *to, struct value *from) &optim, &unavail)) { if (optim) - error (_("Can't do read-modify-write to " - "update bitfield; containing word has been " - "optimized out")); + throw_error (OPTIMIZED_OUT_ERROR, + _("Can't do read-modify-write to " + "update bitfield; containing word " + "has been optimized out")); if (unavail) throw_error (NOT_AVAILABLE_ERROR, _("Can't do read-modify-write to update " diff --git a/gdb/exceptions.c b/gdb/exceptions.c index 134d918..c6248bc 100644 --- a/gdb/exceptions.c +++ b/gdb/exceptions.c @@ -577,5 +577,6 @@ catch_command_errors_const (catch_command_errors_const_ftype *command, int is_unavailable_error (const enum errors error) { - return error == NOT_AVAILABLE_ERROR; + return (error == NOT_AVAILABLE_ERROR + || error == OPTIMIZED_OUT_ERROR); } diff --git a/gdb/exceptions.h b/gdb/exceptions.h index 1baecf4..f2cc528 100644 --- a/gdb/exceptions.h +++ b/gdb/exceptions.h @@ -79,9 +79,9 @@ enum errors { /* Feature is not supported in this copy of GDB. */ UNSUPPORTED_ERROR, - /* Value not available. E.g., a register was not collected in a - traceframe. */ - NOT_AVAILABLE_ERROR, + /* Value not available. */ + NOT_AVAILABLE_ERROR, /* Not collected, e.g. in a traceframe. */ + OPTIMIZED_OUT_ERROR, /* Optimized out by compiler or ABI. */ /* DW_OP_GNU_entry_value resolving failed. */ NO_ENTRY_VALUE_ERROR, diff --git a/gdb/frame.c b/gdb/frame.c index 54f828c..f825f96 100644 --- a/gdb/frame.c +++ b/gdb/frame.c @@ -728,8 +728,11 @@ frame_unwind_pc_if_available (struct frame_info *this_frame, CORE_ADDR *pc) if (frame_debug) fprintf_unfiltered (gdb_stdlog, "{ frame_unwind_pc (this_frame=%d)" - " -> }\n", - this_frame->level); + " -> %s }\n", + this_frame->level, + (ex.error == NOT_AVAILABLE_ERROR + ? "" + : "")); } else if (ex.reason < 0) { @@ -988,7 +991,8 @@ frame_unwind_register (struct frame_info *frame, int regnum, gdb_byte *buf) &lval, &addr, &realnum, buf); if (optimized) - error (_("Register %d was optimized out"), regnum); + throw_error (OPTIMIZED_OUT_ERROR, + _("Register %d was optimized out"), regnum); if (unavailable) throw_error (NOT_AVAILABLE_ERROR, _("Register %d is not available"), regnum); diff --git a/gdb/spu-tdep.c b/gdb/spu-tdep.c index 46f3e2c..6fa3e7e 100644 --- a/gdb/spu-tdep.c +++ b/gdb/spu-tdep.c @@ -1614,8 +1614,9 @@ spu_software_single_step (struct frame_info *frame) else { if (optim) - error (_("Could not determine address of " - "single-step breakpoint.")); + throw_error (OPTIMIZED_OUT_ERROR, + _("Could not determine address of " + "single-step breakpoint.")); if (unavail) throw_error (NOT_AVAILABLE_ERROR, _("Could not determine address of " diff --git a/gdb/valops.c b/gdb/valops.c index f86b283..48dbeaa 100644 --- a/gdb/valops.c +++ b/gdb/valops.c @@ -1188,7 +1188,8 @@ value_assign (struct value *toval, struct value *fromval) &optim, &unavail)) { if (optim) - error (_("value has been optimized out")); + throw_error (OPTIMIZED_OUT_ERROR, + _("value has been optimized out")); if (unavail) throw_error (NOT_AVAILABLE_ERROR, _("value is not available"));