From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1p5iNX-0007XV-1J for mharc-grub-devel@gnu.org; Thu, 15 Dec 2022 02:10:03 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p5iNV-0007X6-8A for grub-devel@gnu.org; Thu, 15 Dec 2022 02:10:01 -0500 Received: from mail-qt1-x82d.google.com ([2607:f8b0:4864:20::82d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1p5iNT-00084o-OX for grub-devel@gnu.org; Thu, 15 Dec 2022 02:10:01 -0500 Received: by mail-qt1-x82d.google.com with SMTP id a16so4470106qtw.10 for ; Wed, 14 Dec 2022 23:09:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=efficientek-com.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=23HJ/a90o6CTtyK58xFWAqSymMGbLwR5VPAjeIXwaM0=; b=tr1ZpKSouyEtB09Y/1lf8fyi7iEiJWHpJtb+Y8cyNwnF6QXPQ4k/iXOdHYDFoIKY+t k1xAWHBRU6SHVB4Gsdiy0lGcOjrsLdisACvLbhQxVV85cIIpdjLm8NsSFJYcNDX/ZWTC 7ZwusM/v91Z54aah6IhcFwrXrK1U/QDmjnoY/IC1cF9HWcdVNsK/SNp4a8iGS5PmDEHb weiXYyqUSElnJkPXMtHwIOJKin30HxNgCrH1oXp9cO0sRG9TBtq/y2Qa+Gded1UDd2xE 5N7U0rXBZuzupFFfz2ZO0w0VOss/4sNscgE0jhW/XWWTY5i/IUdgetgM2lWQlg8nyhw+ MJdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=23HJ/a90o6CTtyK58xFWAqSymMGbLwR5VPAjeIXwaM0=; b=DozvEWsmc9qN0g8iqqmUKFD9pvEC0cBGv0ub3Qhrl3qNAACTdo6TkyNODHd7PlL7TH pElsE7aZ3l/l5A0EmV2rrgvk5aOIo9EPmPhdPi3oQNUZ56nrkp8053DSLthwlMKXC+KE R+TM+MYctl9hlnzt0ZcbLCzYWRFWV8H4HTfx7Lujjr7XPh22s6n8OOdJ+8o8G+0UurKW xi2bz9EalWz6WKn8+x7BpMh66OLd4UO88NfPbkvbP/6XnZWnvpZpH7ZwEqZ/C8YmCMo/ 1gSr0nXKnKE1A8iE/pvl02DTdtbY4bl15slPle40BCuZJ5cVgjPPfPVJFQGPGDxziuRH 4SiQ== X-Gm-Message-State: ANoB5pn+twQF+EZvogY9lezPYildJlqlbx9213tzc0QaKZMc3C6e4dq5 fjpDMWyvA9HRARvql6+K2aMpgSG2FRSG2e+d X-Google-Smtp-Source: AA0mqf5ffSpmdUwF3gbC2LiaFTVAVx+5CANTEgWk3hfuagIifSch91+OL9zJ8Bp7qV9IxdbHFBZ+kQ== X-Received: by 2002:a05:622a:1246:b0:3a8:8f:7ece with SMTP id z6-20020a05622a124600b003a8008f7ecemr19269924qtx.64.1671088198670; Wed, 14 Dec 2022 23:09:58 -0800 (PST) Received: from crass-HP-ZBook-15-G2.lan ([37.218.244.251]) by smtp.gmail.com with ESMTPSA id fy16-20020a05622a5a1000b003a7ec97c882sm3125068qtb.6.2022.12.14.23.09.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Dec 2022 23:09:57 -0800 (PST) From: Glenn Washburn To: grub-devel@gnu.org, Daniel Kiper Cc: Glenn Washburn Subject: [PATCH v3 13/15] gdb: Allow running user-defined commands at GRUB start Date: Thu, 15 Dec 2022 01:07:48 -0600 Message-Id: <20221215070750.102591-14-development@efficientek.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221215070750.102591-1-development@efficientek.com> References: <20221215070750.102591-1-development@efficientek.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=2607:f8b0:4864:20::82d; envelope-from=development@efficientek.com; helo=mail-qt1-x82d.google.com X-Spam_score_int: 14 X-Spam_score: 1.4 X-Spam_bar: + X-Spam_report: (1.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 15 Dec 2022 07:10:01 -0000 A new command, run_on_start, is created which handles some complexities of the EFI platform when breaking on GRUB start. If GRUB start is hooked, run "onstart" command if it is defned. Signed-off-by: Glenn Washburn --- grub-core/gdb_grub.in | 44 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/grub-core/gdb_grub.in b/grub-core/gdb_grub.in index 57152b718f..021d830b43 100644 --- a/grub-core/gdb_grub.in +++ b/grub-core/gdb_grub.in @@ -36,6 +36,8 @@ end define dynamic_load_symbols dynamic_load_kernel_exec_symbols $arg0 + run_on_start + # We may have been very late to loading the kernel.exec symbols and # and modules may already be loaded. So load symbols for any already # loaded. @@ -170,6 +172,41 @@ document num_modules Given a module name print its address or NULL if not loaded. end +define run_on_start + # TODO: Add check to see if _start symbol is defined, if not, then + # the symbols have not yet been loaded and this command will not work. + watch *_start + set $break_efi_start_bpnum = $bpnum + commands + silent + delete $break_efi_start_bpnum + break _start + commands + silent + delete $break_efi_start_bpnum + set $onstart_name = "onstart" + is_user_command $onstart_name + if $ret + onstart + end + continue + end + set $break_efi_start_bpnum = $bpnum + continue + end +end +document run_on_start + On some targets, such as x86_64-efi, even if you know where the + firmware will load the grub image, you can not simply set a break + point before the image is loaded because loading the image + overwrites the break point in memory. So setup a hardware watch + point, which does not have that problem, and if that gets triggered, + then reset the break point. If a user-defined command named + "onstart" exists it will be run after the start is hit. + NOTE: This assumes symbols have already been correctly loaded for + the EFI application. +end + ### set confirm off @@ -180,13 +217,20 @@ set confirm off # fail. set $platform_efi = $_streq("@platform@", "efi") +set $target = "@target_cpu@-@platform@" if ! $runonce if $platform_efi # Only load the executable file, not the symbols exec-file kernel.exec else + if $_streq($target, "i386-pc") + add-symbol-file boot.image + add-symbol-file diskboot.image + add-symbol-file lzma_decompress.image + end file kernel.exec + run_on_start runtime_load_module end -- 2.34.1