From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-f47.google.com (mail-wr1-f47.google.com [209.85.221.47]) by sourceware.org (Postfix) with ESMTPS id 6888D3858D3C for ; Mon, 16 May 2022 18:41:02 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 6888D3858D3C Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=palves.net Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-wr1-f47.google.com with SMTP id j24so6447201wrb.1 for ; Mon, 16 May 2022 11:41:02 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ksUd7xkDTgGWTYKN3eKVdeWCg+jyeY8uSMqlKhQvOXs=; b=Pch/+OBDOYHxKxwRsqIKDzMZZIcVMwrRMTee1RDREQX1YgEia6dLWHVluY7zsqXe9F UF0IwhM1Vi+8q9yB+utwzJgaiKQYNCn4zFfyCQr1ooyG1l0EulRHkmwL3xKEaPSXY/lQ delSzI3MUBe2oMZQaeV7NBnqaWfFtVPEPQaGE2gIt4IOwJl97JaKAFJz+dAumvio1Zo8 80jg4KqV0meIUtDaDM7ldTrBUDMCK9s5B3htaQgdyVZSqsmGr9axh28ZLSebT4dosZdm na0OSg8/2Yge2Xsa8Tpt2aqs6QaMy4to2Q3ut4FrQZ8fkdc+VVy7loPMIJLtqDalfufY jkug== X-Gm-Message-State: AOAM531rdYnbcg5JFJ5u7cpUdTMSdX7DPE8INBSHS1PoIlX7sif/wO4k /Pf3FGViIyHa0X6OtZ1hoZ2lava8JEE= X-Google-Smtp-Source: ABdhPJyCwcrQKnFhoOXKn31oHMvW7eGeV6I3Zyme816APme47eTLV5NyqNjQLqz6+dN+BnEE7vRy+A== X-Received: by 2002:a5d:5888:0:b0:20d:270f:6b61 with SMTP id n8-20020a5d5888000000b0020d270f6b61mr724805wrf.211.1652726460482; Mon, 16 May 2022 11:41:00 -0700 (PDT) Received: from localhost ([2001:8a0:f924:2600:209d:85e2:409e:8726]) by smtp.gmail.com with ESMTPSA id l16-20020a05600c1d1000b0039444973258sm137083wms.0.2022.05.16.11.40.59 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 16 May 2022 11:40:59 -0700 (PDT) From: Pedro Alves To: gdb-patches@sourceware.org Subject: [PATCH 13/23] Refactor momentary breakpoints, eliminate set_raw_breakpoint{, _without_location} Date: Mon, 16 May 2022 19:40:20 +0100 Message-Id: <20220516184030.665489-14-pedro@palves.net> X-Mailer: git-send-email 2.36.0 In-Reply-To: <20220516184030.665489-1-pedro@palves.net> References: <20220516184030.665489-1-pedro@palves.net> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00, FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 16 May 2022 18:41:04 -0000 This commit makes set_momentary_breakpoint allocate the breakpoint type without relying on set_raw_breakpoint, and similarly, momentary_breakpoint_from_master not rely on set_raw_breakpoint_without_location. This will let us convert init_raw_breakpoint to a ctor in a following patch. The comment about set_raw_breakpoint being used in gdbtk sources is stale. gdbtk no longer uses it. Change-Id: Ibbf77731e4b22e18ccebc1b5799bbec0aff28c8a --- gdb/breakpoint.c | 97 ++++++++++++------------------------------------ 1 file changed, 24 insertions(+), 73 deletions(-) diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 1659d2b9737..6e24137ec4b 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -111,13 +111,7 @@ static int can_use_hardware_watchpoint static void mention (const breakpoint *); -static struct breakpoint *set_raw_breakpoint_without_location (struct gdbarch *, - enum bptype); -/* This function is used in gdbtk sources and thus can not be made - static. */ -static struct breakpoint *set_raw_breakpoint (struct gdbarch *gdbarch, - struct symtab_and_line, - enum bptype); +static breakpoint *add_to_breakpoint_chain (std::unique_ptr &&b); static breakpoint *add_to_breakpoint_chain (std::unique_ptr &&b); @@ -1299,27 +1293,6 @@ new_breakpoint_from_type (struct gdbarch *gdbarch, bptype type, std::forward (args)...); break; - case bp_longjmp: - case bp_exception: - b = new longjmp_breakpoint (gdbarch, type, - std::forward (args)...); - break; - - case bp_watchpoint_scope: - case bp_finish: - case bp_gnu_ifunc_resolver_return: - case bp_step_resume: - case bp_hp_step_resume: - case bp_longjmp_resume: - case bp_longjmp_call_dummy: - case bp_exception_resume: - case bp_call_dummy: - case bp_until: - case bp_std_terminate: - b = new momentary_breakpoint (gdbarch, type, - std::forward (args)...); - break; - default: gdb_assert_not_reached ("invalid type"); } @@ -7256,18 +7229,6 @@ add_to_breakpoint_chain (std::unique_ptr &&b) return result; } -/* Helper to set_raw_breakpoint below. Creates a breakpoint - that has type BPTYPE and has no locations as yet. */ - -static struct breakpoint * -set_raw_breakpoint_without_location (struct gdbarch *gdbarch, - enum bptype bptype) -{ - std::unique_ptr b = new_breakpoint_from_type (gdbarch, bptype); - - return add_to_breakpoint_chain (std::move (b)); -} - /* Initialize loc->function_name. */ static void @@ -7344,31 +7305,6 @@ init_raw_breakpoint (struct breakpoint *b, struct symtab_and_line sal, b->pspace = sal.pspace; } -/* set_raw_breakpoint is a low level routine for allocating and - partially initializing a breakpoint of type BPTYPE. The newly - created breakpoint's address, section, source file name, and line - number are provided by SAL. The newly created and partially - initialized breakpoint is added to the breakpoint chain and - is also returned as the value of this function. - - It is expected that the caller will complete the initialization of - the newly created breakpoint struct as well as output any status - information regarding the creation of a new breakpoint. In - particular, set_raw_breakpoint does NOT set the breakpoint - number! Care should be taken to not allow an error to occur - prior to completing the initialization of the breakpoint. If this - should happen, a bogus breakpoint will be left on the chain. */ - -static struct breakpoint * -set_raw_breakpoint (struct gdbarch *gdbarch, - struct symtab_and_line sal, enum bptype bptype) -{ - std::unique_ptr b = new_breakpoint_from_type (gdbarch, bptype); - - init_raw_breakpoint (b.get (), sal, bptype); - return add_to_breakpoint_chain (std::move (b)); -} - /* Call this routine when stepping and nexting to enable a breakpoint if we do a longjmp() or 'throw' in TP. FRAME is the frame which initiated the operation. */ @@ -7977,6 +7913,17 @@ new_single_step_breakpoint (int thread, struct gdbarch *gdbarch) return add_to_breakpoint_chain (std::move (b)); } +/* Allocate a new momentary breakpoint. */ + +static momentary_breakpoint * +new_momentary_breakpoint (struct gdbarch *gdbarch, enum bptype type) +{ + if (type == bp_longjmp || type == bp_exception) + return new longjmp_breakpoint (gdbarch, type); + else + return new momentary_breakpoint (gdbarch, type); +} + /* Set a momentary breakpoint of type TYPE at address specified by SAL. If FRAME_ID is valid, the breakpoint is restricted to that frame. */ @@ -7985,22 +7932,26 @@ breakpoint_up set_momentary_breakpoint (struct gdbarch *gdbarch, struct symtab_and_line sal, struct frame_id frame_id, enum bptype type) { - struct breakpoint *b; - /* If FRAME_ID is valid, it should be a real frame, not an inlined or tail-called one. */ gdb_assert (!frame_id_artificial_p (frame_id)); - b = set_raw_breakpoint (gdbarch, sal, type); + std::unique_ptr b + (new_momentary_breakpoint (gdbarch, type)); + + b->add_location (sal); + b->pspace = sal.pspace; b->enable_state = bp_enabled; b->disposition = disp_donttouch; b->frame_id = frame_id; b->thread = inferior_thread ()->global_num; + breakpoint_up bp (add_to_breakpoint_chain (std::move (b))); + update_global_location_list_nothrow (UGLL_MAY_INSERT); - return breakpoint_up (b); + return bp; } /* Make a momentary breakpoint based on the master breakpoint ORIG. @@ -8012,9 +7963,8 @@ momentary_breakpoint_from_master (struct breakpoint *orig, enum bptype type, int loc_enabled) { - struct breakpoint *copy; - - copy = set_raw_breakpoint_without_location (orig->gdbarch, type); + std::unique_ptr copy + (new_momentary_breakpoint (orig->gdbarch, type)); copy->loc = copy->allocate_location (); set_breakpoint_location_function (copy->loc); @@ -8035,8 +7985,9 @@ momentary_breakpoint_from_master (struct breakpoint *orig, copy->disposition = disp_donttouch; copy->number = internal_breakpoint_number--; + breakpoint *b = add_to_breakpoint_chain (std::move (copy)); update_global_location_list_nothrow (UGLL_DONT_INSERT); - return copy; + return b; } /* Make a deep copy of momentary breakpoint ORIG. Returns NULL if -- 2.36.0