From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4642 invoked by alias); 5 Sep 2009 19:01:00 -0000 Received: (qmail 4633 invoked by uid 22791); 5 Sep 2009 19:01:00 -0000 X-SWARE-Spam-Status: No, hits=-2.5 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 05 Sep 2009 19:00:49 +0000 Received: from int-mx04.intmail.prod.int.phx2.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.17]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n85J0lB8028470 for ; Sat, 5 Sep 2009 15:00:47 -0400 Received: from host0.dyn.jankratochvil.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx04.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id n85J0UvO012124 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Sat, 5 Sep 2009 15:00:45 -0400 Received: from host0.dyn.jankratochvil.net (localhost [127.0.0.1]) by host0.dyn.jankratochvil.net (8.14.3/8.14.3) with ESMTP id n85J0Rtp017632 for ; Sat, 5 Sep 2009 21:00:27 +0200 Received: (from jkratoch@localhost) by host0.dyn.jankratochvil.net (8.14.3/8.14.3/Submit) id n85J0Qtu017628 for gdb-patches@sourceware.org; Sat, 5 Sep 2009 21:00:26 +0200 Date: Sat, 05 Sep 2009 19:01:00 -0000 From: Jan Kratochvil To: gdb-patches@sourceware.org Subject: [patch] [ia64] Fixup breakpoints errors handling Message-ID: <20090905190026.GB16389@host0.dyn.jankratochvil.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.19 (2009-01-05) 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-09/txt/msg00131.txt.bz2 Hi, found out the code could already for example internal_error on uninitialized memory after failed target_read_memory. Do not try to continue after failed memory read as the whole function would fail anyway. This patch was regression tested together with the previous one. This patch depends on the previous patch: [patch] [ia64] Fix (#2) shadowing of breakpoints http://sourceware.org/ml/gdb-patches/2009-09/msg00130.html Thanks, Jan gdb/ 2009-09-05 Jan Kratochvil * ia64-tdep.c (ia64_memory_insert_breakpoint) (ia64_memory_remove_breakpoint): Return immediately if any of memory reads fail. Do not combine the VAL values. --- gdb/ia64-tdep.c 2009-09-05 18:47:53.000000000 +0200 +++ gdb/ia64-tdep.c 2009-09-05 18:26:41.000000000 +0200 @@ -629,6 +629,11 @@ ia64_memory_insert_breakpoint (struct gd breakpoint instruction bits region. */ cleanup = make_show_memory_breakpoints_cleanup (0); val = target_read_memory (addr, bundle, BUNDLE_LEN); + if (val != 0) + { + do_cleanups (cleanup); + return val; + } /* Slot number 2 may skip at most 2 bytes at the beginning. */ bp_tgt->shadow_len = BUNDLE_LEN - 2; @@ -643,7 +648,12 @@ ia64_memory_insert_breakpoint (struct gd placed breakpoints. It is due to our SHADOW_CONTENTS overlapping the real breakpoint instruction bits region. */ make_show_memory_breakpoints_cleanup (1); - val |= target_read_memory (addr, bundle, BUNDLE_LEN); + val = target_read_memory (addr, bundle, BUNDLE_LEN); + if (val != 0) + { + do_cleanups (cleanup); + return val; + } /* Check for L type instruction in slot 1, if present then bump up the slot number to the slot 2. */ @@ -664,9 +674,8 @@ ia64_memory_insert_breakpoint (struct gd bp_tgt->placed_size = bp_tgt->shadow_len; - if (val == 0) - val = target_write_memory (addr + slotnum, bundle + slotnum, - bp_tgt->shadow_len); + val = target_write_memory (addr + slotnum, bundle + slotnum, + bp_tgt->shadow_len); do_cleanups (cleanup); return val; @@ -693,6 +702,11 @@ ia64_memory_remove_breakpoint (struct gd breakpoint instruction bits region. */ cleanup = make_show_memory_breakpoints_cleanup (1); val = target_read_memory (addr, bundle_mem, BUNDLE_LEN); + if (val != 0) + { + do_cleanups (cleanup); + return val; + } /* Check for L type instruction in slot 1, if present then bump up the slot number to the slot 2. */ @@ -721,8 +735,7 @@ ia64_memory_remove_breakpoint (struct gd /* In BUNDLE_MEM be careful to modify only the bits belonging to SLOTNUM and never any other possibly also stored in SHADOW_CONTENTS. */ replace_slotN_contents (bundle_mem, instr_saved, slotnum); - if (val == 0) - val = target_write_memory (addr, bundle_mem, BUNDLE_LEN); + val = target_write_memory (addr, bundle_mem, BUNDLE_LEN); do_cleanups (cleanup); return val;