From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9119 invoked by alias); 31 Jul 2017 22:22:16 -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 9042 invoked by uid 89); 31 Jul 2017 22:22:15 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.4 required=5.0 tests=BAYES_00,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,RCVD_IN_SORBS_SPAM,SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mail-it0-f48.google.com Received: from mail-it0-f48.google.com (HELO mail-it0-f48.google.com) (209.85.214.48) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 31 Jul 2017 22:22:13 +0000 Received: by mail-it0-f48.google.com with SMTP id h199so2129010ith.1 for ; Mon, 31 Jul 2017 15:22:13 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=ck5b4YwJ3syf3MRvJQce32EQdyVVCX8ipek6gGuP3p4=; b=aL1aCVK7vgKi7oUHu8RUVTAvvJW27dabJoa0GkM267LeuOULtM02oh3dLRa3Kl+Ne8 PFdO5tXVKkR95Uehr+M/BLD/YVIHRKjldnnmtO5EwXadOJvfbFNTggvIiD1BKaCaSXAR 5LpOTVQgXPHoNBaU1GCFNxRU5349wZLAFRbcSQ28xjAAhsPIH8v/dmCjUkUj44C4U3K6 VSUvxriLfNLA1Eu9+cIr2pp03pD2boa5V+9Z2LU9NkpkEUjjHTfHf487i4OacS+plbGC 2DVS66Qr4Af50Y+sjO9WwMj8mwVQ4h4Nb0WlLsKtB8McYyOLRBmhm6/FhJQ911DWHMIt DtaQ== X-Gm-Message-State: AIVw112vABOLXY5IU9u4z06PAOcgL+gbpaB8qHXrkPOAKd72GPW1mtDX Z0gS5BXh/o2XXDtm X-Received: by 10.36.8.70 with SMTP id 67mr21014188itc.72.1501539732192; Mon, 31 Jul 2017 15:22:12 -0700 (PDT) Received: from E107787-LIN.Home (static.42.136.251.148.clients.your-server.de. [148.251.136.42]) by smtp.gmail.com with ESMTPSA id s204sm5963117itd.34.2017.07.31.15.22.10 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 31 Jul 2017 15:22:11 -0700 (PDT) From: Yao Qi X-Google-Original-From: Yao Qi To: gdb-patches@sourceware.org Subject: [PATCH 6/9] Throw exception in dwarf2 unwinders Date: Mon, 31 Jul 2017 22:22:00 -0000 Message-Id: <1501539715-8049-7-git-send-email-yao.qi@linaro.org> In-Reply-To: <1501539715-8049-1-git-send-email-yao.qi@linaro.org> References: <1501539715-8049-1-git-send-email-yao.qi@linaro.org> X-IsSubscribed: yes X-SW-Source: 2017-07/txt/msg00475.txt.bz2 This patch changes dwarf2 unwinders to not catch exceptions. gdb: 2017-07-20 Yao Qi * dwarf2-frame.c (struct dwarf2_frame_cache) : Remove. (dwarf2_frame_cache): Don't catch exception. (dwarf2_frame_unwind_stop_reason): Don't check cache->unavailable_retaddr. (dwarf2_frame_this_id): Likewise. --- gdb/dwarf2-frame.c | 63 ++++++++++++++++-------------------------------------- 1 file changed, 19 insertions(+), 44 deletions(-) diff --git a/gdb/dwarf2-frame.c b/gdb/dwarf2-frame.c index f8e6522..d380e83 100644 --- a/gdb/dwarf2-frame.c +++ b/gdb/dwarf2-frame.c @@ -922,10 +922,6 @@ struct dwarf2_frame_cache /* DWARF Call Frame Address. */ CORE_ADDR cfa; - /* Set if the return address column was marked as unavailable - (required non-collected memory or registers to compute). */ - int unavailable_retaddr; - /* Set if the return address column was marked as undefined. */ int undefined_retaddr; @@ -1037,41 +1033,27 @@ dwarf2_frame_cache (struct frame_info *this_frame, void **this_cache) execute_cfa_program (fde, instr, fde->end, gdbarch, get_frame_address_in_block (this_frame), &fs); - TRY - { - /* Calculate the CFA. */ - switch (fs.regs.cfa_how) - { - case CFA_REG_OFFSET: - cache->cfa = read_addr_from_reg (this_frame, fs.regs.cfa_reg); - if (fs.armcc_cfa_offsets_reversed) - cache->cfa -= fs.regs.cfa_offset; - else - cache->cfa += fs.regs.cfa_offset; - break; - - case CFA_EXP: - cache->cfa = - execute_stack_op (fs.regs.cfa_exp, fs.regs.cfa_exp_len, - cache->addr_size, cache->text_offset, - this_frame, 0, 0); - break; - - default: - internal_error (__FILE__, __LINE__, _("Unknown CFA rule.")); - } - } - CATCH (ex, RETURN_MASK_ERROR) + /* Calculate the CFA. */ + switch (fs.regs.cfa_how) { - if (ex.error == NOT_AVAILABLE_ERROR) - { - cache->unavailable_retaddr = 1; - return cache; - } + case CFA_REG_OFFSET: + cache->cfa = read_addr_from_reg (this_frame, fs.regs.cfa_reg); + if (fs.armcc_cfa_offsets_reversed) + cache->cfa -= fs.regs.cfa_offset; + else + cache->cfa += fs.regs.cfa_offset; + break; + + case CFA_EXP: + cache->cfa = + execute_stack_op (fs.regs.cfa_exp, fs.regs.cfa_exp_len, + cache->addr_size, cache->text_offset, + this_frame, 0, 0); + break; - throw_exception (ex); + default: + internal_error (__FILE__, __LINE__, _("Unknown CFA rule.")); } - END_CATCH /* Initialize the register state. */ { @@ -1181,9 +1163,6 @@ dwarf2_frame_unwind_stop_reason (struct frame_info *this_frame, struct dwarf2_frame_cache *cache = dwarf2_frame_cache (this_frame, this_cache); - if (cache->unavailable_retaddr) - return UNWIND_UNAVAILABLE; - if (cache->undefined_retaddr) return UNWIND_OUTERMOST; @@ -1197,11 +1176,7 @@ dwarf2_frame_this_id (struct frame_info *this_frame, void **this_cache, struct dwarf2_frame_cache *cache = dwarf2_frame_cache (this_frame, this_cache); - if (cache->unavailable_retaddr) - (*this_id) = frame_id_build_unavailable_stack (get_frame_func (this_frame)); - else if (cache->undefined_retaddr) - return; - else + if (!cache->undefined_retaddr) (*this_id) = frame_id_build (cache->cfa, get_frame_func (this_frame)); } -- 1.9.1