From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1p5iNM-0007Uz-Il for mharc-grub-devel@gnu.org; Thu, 15 Dec 2022 02:09:52 -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 1p5iNK-0007UI-Aj for grub-devel@gnu.org; Thu, 15 Dec 2022 02:09:50 -0500 Received: from mail-qt1-x835.google.com ([2607:f8b0:4864:20::835]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1p5iNI-00083n-N1 for grub-devel@gnu.org; Thu, 15 Dec 2022 02:09:50 -0500 Received: by mail-qt1-x835.google.com with SMTP id i20so4475692qtw.9 for ; Wed, 14 Dec 2022 23:09:48 -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=2DZNgxNsKVrFdIyeqFCh5aYvkVBfp+IRTCoeyzQJcIw=; b=q3PLbPQumUl8bNPu+ytO4U51o5gJvtfSXzECZyV/MO6aHj4I29zoA/MHhwiYW+Eehc FbC+zQPblboEwedxsV0+Ap1izsgtB9javqoABHNlXmi0BoPwsMK2k7cY4d8CinV+llx1 TvjLtzlm09ynXQtcloXbxCfsVmVYgfSwhwEEGGjge9NYQPI80J7hlMm6yvPiIe1q73Zc 6IMYLirCa68JyrpFLl870nD9n+WHky5qsRSpyBNr2On7sFGOWnwzJwOSBlgbHaK6rFSq aHl4Rqc22kOoYy98Y8dsQEOCroQxuV+ylSHMDVrjdczz/ddKJIAUvFq1gZ14YmFqTYXj +jdA== 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=2DZNgxNsKVrFdIyeqFCh5aYvkVBfp+IRTCoeyzQJcIw=; b=rrvuG/woGDd9VuOQxMLFDAwzvhWD3cT05G6GUm+QYcvPQQBuBvw2F1F4DT+6WRqlVt 7CSksonUJuND78cloDCNzA1aoqGpk90q3vTf4vjyVYDAIGGm/JBzwvrHtdQCRG796sYG 7jAPRYAH+WFIb3aKjEVMAbFEff3EQU00anSdDI8XvOKJlvshGPlbvNrUPgQfLuZ2odmh MXIJPcBh8g1Jwdai4xh2gfC3JTlKmjw1pLIxJQ4RvUordOpnQ3iYlZtG2l86FGxnu8dU UISnBqpj7ExtPm0NVcYGYkJFcGjAtJ73aa4wVLuvF9xtLwn4U+cBjyiLwSdvBMtIrmMu bIyA== X-Gm-Message-State: ANoB5plGC7bggqyxqbp59LNUWifR3etyKPLPMs+Lu7sPRTh1OrZpg5QV 7OQQCUERAUJOgeLxAO2WSSeH/mwIhSo/CGa1 X-Google-Smtp-Source: AA0mqf6SDVal76AzkX8HFi86o/3737w42eqydboPa6EMZANVIysXR5FDNtnV0Wnm2XCITa9FYhR3Dg== X-Received: by 2002:a05:622a:5a97:b0:3a7:e384:92b6 with SMTP id fz23-20020a05622a5a9700b003a7e38492b6mr43043960qtb.19.1671088187240; Wed, 14 Dec 2022 23:09:47 -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.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Dec 2022 23:09:46 -0800 (PST) From: Glenn Washburn To: grub-devel@gnu.org, Daniel Kiper Cc: Glenn Washburn Subject: [PATCH v3 08/15] gdb: Remove Perl dependency for GRUB GDB script Date: Thu, 15 Dec 2022 01:07:43 -0600 Message-Id: <20221215070750.102591-9-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::835; envelope-from=development@efficientek.com; helo=mail-qt1-x835.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:09:50 -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 7891c6c07f..eb4f7041bc 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