From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1p63Ix-0003nL-De for mharc-grub-devel@gnu.org; Fri, 16 Dec 2022 00:30:44 -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 1p63It-0003l9-So for grub-devel@gnu.org; Fri, 16 Dec 2022 00:30:40 -0500 Received: from mail-pj1-x1030.google.com ([2607:f8b0:4864:20::1030]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1p63Is-000467-3P for grub-devel@gnu.org; Fri, 16 Dec 2022 00:30:39 -0500 Received: by mail-pj1-x1030.google.com with SMTP id o12so1394682pjo.4 for ; Thu, 15 Dec 2022 21:30:37 -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=9U3lM8Fah4lzBf7QO0azcWMEs/V97ua4nVwYD0Alv0I=; b=fxS1lb6YoKPWfBwMpIm1mPpWgJ/oFiXtXwzPLHN7XXPROVTn6GLpmx7qNhQMge1jTp iKWYClaZwLXmFHv7hldAtuHjjfVq6X0EB14RP+wh0gxAHlexcsF02LbUXu26+Yu/Gbcd nsK/a5bRyHNvZxy8Uyp6i7vZ/adxB4gPTtebdKUqAq6kS9HcKQ5MluClixUPv3mznmGk C3Z5eTIie2d/IFWyCN9J+4JzKWuT1/EDqLlvwLSAo2Z4XpH+Mj94PP/MfY8E4eSiavqU PfTko05hujfFsmEJejOA1fzhJxVSBacQc2K31Ue7ruTnmHgM8rJfedPSz8+EDGhDOz0P BUlQ== 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=9U3lM8Fah4lzBf7QO0azcWMEs/V97ua4nVwYD0Alv0I=; b=7Xgg+ZkkTB7vTI0yydQuCjAG5xCcS35sRbnLqf3adwW7T+S/IAKK4wf1u2huunKjOH 8PVJOqLpygu0r3WLTTuJXuvoLof/qShrGqpOqVl82pSPkv+F8CxCC/OVoyvazGf2e+Ds 4JNOFlfExsCVKoKYG0XVzfbDUSqdlUjO9Lun4hJTTgw5Hf3q2ZpISBUdzb2mZSFfeWCy XWQaOmrgeRmmfJKUrsdNKkk6lPJGMrv9ahHr63qbGun2hFvRWFP9HRLUKKOPqyvuSdOX KFz0TT2DI/la2KnsitqYY7Fy5wgGevH9iFWiJLg3M21TPOMD10zl7wb//3mK7BExY1am t+iA== X-Gm-Message-State: ANoB5pl9fgThChkMlsX17A784aC8Jh6587KT/cOwHjsXqhBBLIeRO4gX 69Z9l56uijyNuxqXPm3nhtYquFvhKxu0LRZd X-Google-Smtp-Source: AA0mqf7mlO7+UTxkBR/lcLMYUUbUeGWZQMBydcPJsmEUKFX9Dt8X1TMiNTMIkg24Qh9F2mffyRrlOw== X-Received: by 2002:a17:902:7c0e:b0:18f:9cfb:42aa with SMTP id x14-20020a1709027c0e00b0018f9cfb42aamr19337160pll.10.1671168636228; Thu, 15 Dec 2022 21:30:36 -0800 (PST) Received: from crass-HP-ZBook-15-G2.lan ([37.218.244.251]) by smtp.gmail.com with ESMTPSA id u4-20020a17090341c400b00187033cac81sm577714ple.145.2022.12.15.21.30.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 Dec 2022 21:30:35 -0800 (PST) From: Glenn Washburn To: "grub-devel @ gnu . org" , Daniel Kiper Cc: Glenn Washburn Subject: [PATCH v4 07/15] gdb: Remove Perl dependency for GRUB GDB script Date: Thu, 15 Dec 2022 23:29:30 -0600 Message-Id: <20221216052938.224564-8-development@efficientek.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221216052938.224564-1-development@efficientek.com> References: <20221216052938.224564-1-development@efficientek.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=2607:f8b0:4864:20::1030; envelope-from=development@efficientek.com; helo=mail-pj1-x1030.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: Fri, 16 Dec 2022 05:30:40 -0000 Remove gmodule.pl and rewrite as a shell function in gdb_helper.sh. Signed-off-by: Glenn Washburn --- grub-core/Makefile.core.def | 6 ------ grub-core/gdb_grub.in | 4 ++-- grub-core/gdb_helper.sh.in | 41 +++++++++++++++++++++++++++++++++++++ grub-core/gmodule.pl.in | 30 --------------------------- 4 files changed, 43 insertions(+), 38 deletions(-) delete mode 100644 grub-core/gmodule.pl.in diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def index 253b9b1e47..c5feae285c 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -18,12 +18,6 @@ transform_data = { common = modinfo.sh.in; }; -transform_data = { - installdir = platform; - name = gmodule.pl; - common = gmodule.pl.in; -}; - transform_data = { installdir = platform; name = gdb_helper.sh; diff --git a/grub-core/gdb_grub.in b/grub-core/gdb_grub.in index d97dbfdc0d..f901975e15 100644 --- a/grub-core/gdb_grub.in +++ b/grub-core/gdb_grub.in @@ -1,6 +1,6 @@ ### ### Load debuging information about GNU GRUB 2 modules into GDB -### automatically. Needs readelf, Perl and gmodule.pl script +### automatically. Needs readelf, objdump and gdb_helper.sh script ### ### Has to be launched from the writable and trusted ### directory containing *.image and *.module @@ -63,7 +63,7 @@ end # Generate and execute GDB commands and delete temporary files # afterwards define match_and_load_symbols - shell perl gmodule.pl <.segments.tmp >.loadsym.gdb + shell sh gdb_helper.sh gen_module_loadsym <.segments.tmp >.loadsym.gdb source .loadsym.gdb shell rm -f .segments.tmp .loadsym.gdb end diff --git a/grub-core/gdb_helper.sh.in b/grub-core/gdb_helper.sh.in index b37d5adfc2..1eaa976fb7 100644 --- a/grub-core/gdb_helper.sh.in +++ b/grub-core/gdb_helper.sh.in @@ -21,6 +21,21 @@ exp() { echo $RES } +get_section_names() { + readelf -SW "$1" | tail -n +5 | \ + while read LINE; do + LINE=${LINE#*\[??*\] } + NAME=${LINE%% *} + echo -n "${NAME:-} " + done +} + +get_word() { + i=$2 + ( set -- $1; eval echo "\${$i}"; ) +} + + # Loading symbols is complicated by the fact that kernel.exec is an ELF # ELF binary, but the UEFI runtime is PE32+. All the data sections of # the ELF binary are concatenated (accounting for ELF section alignment) @@ -50,6 +65,32 @@ gen_kernel_exec_loadsym() { done } +# Generate GDB commands, that load symbols for specified modules from stdin, +# with proper section relocations. +gen_module_loadsym() { + while read NAME SECTIONMAP; do + echo -n "add-symbol-file $NAME.module" + ( + SECNAMES=$(get_section_names "$NAME.mod") + + set -- $SECTIONMAP + while [ "$#" -gt 0 ]; do + SECIDX=$1 + SECADDR=$2 + SECNAME=$(get_word "$SECNAMES" $((${SECIDX}+1))) + shift; shift + + if [ "$SECNAME" = ".text" ]; then + echo -n " ${SECADDR}" + else + echo -n " -s ${SECNAME} ${SECADDR}" + fi + done + ) + echo + done +} + if type "$1" 2>/dev/null | grep -q 'is a shell function'; then if [ "x${GRUB_GDB_TRACE}" = "xy" ]; then exec 2>>gdb_helper.trace diff --git a/grub-core/gmodule.pl.in b/grub-core/gmodule.pl.in deleted file mode 100644 index 78aa1e64eb..0000000000 --- a/grub-core/gmodule.pl.in +++ /dev/null @@ -1,30 +0,0 @@ -### -### Generate GDB commands, that load symbols for specified module, -### with proper section relocations. See .gdbinit -### -### $Id: gmodule.pl,v 1.2 2006/05/14 11:38:42 lkundrak Exp lkundrak $ -### Lubomir Kundrak -### - -use strict; - -while (<>) { - my ($name, %sections) = split; - - print "add-symbol-file $name.module"; - - open (READELF, "readelf -S $name.mod |") or die; - while () { - /\[\s*(\d+)\]\s+(\.\S+)/ or next; - - if ($2 eq '.text') { - print " $sections{$1}"; - next; - } - - print " -s $2 $sections{$1}" - if ($sections{$1} ne '0x0' and $sections{$1} ne ''); - }; - close (READELF); - print "\n"; -} -- 2.34.1