[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v4 07/15] gdb: Remove Perl dependency for GRUB GDB script
From: |
Glenn Washburn |
Subject: |
[PATCH v4 07/15] gdb: Remove Perl dependency for GRUB GDB script |
Date: |
Thu, 15 Dec 2022 23:29:30 -0600 |
Remove gmodule.pl and rewrite as a shell function in gdb_helper.sh.
Signed-off-by: Glenn Washburn <development@efficientek.com>
---
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:-<NULL>} "
+ 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 <lkudrak@skosi.org>
-###
-
-use strict;
-
-while (<>) {
- my ($name, %sections) = split;
-
- print "add-symbol-file $name.module";
-
- open (READELF, "readelf -S $name.mod |") or die;
- while (<READELF>) {
- /\[\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
- [PATCH v4 00/15] GDB script fixes and improvements, Glenn Washburn, 2022/12/16
- [PATCH v4 01/15] gdb: Fix redirection issue in dump_module_sections, Glenn Washburn, 2022/12/16
- [PATCH v4 02/15] gdb: Prevent wrapping when writing to .segments.tmp, Glenn Washburn, 2022/12/16
- [PATCH v4 03/15] gdb: If no modules have been loaded, do not try to load module symbols, Glenn Washburn, 2022/12/16
- [PATCH v4 04/15] gdb: Move runtime module loading into runtime_load_module, Glenn Washburn, 2022/12/16
- [PATCH v4 05/15] gdb: Reliably load modules in runtime_load_module, Glenn Washburn, 2022/12/16
- [PATCH v4 06/15] gdb: Add functions to make loading from dynamically positioned targets easier, Glenn Washburn, 2022/12/16
- [PATCH v4 07/15] gdb: Remove Perl dependency for GRUB GDB script,
Glenn Washburn <=
- [PATCH v4 08/15] gdb: If enabled, print line used to load EFI kernel symbols when using gdb_grub script, Glenn Washburn, 2022/12/16
[PATCH v4 09/15] gdb: Conditionally run GDB script logic for dynamically or statically positioned GRUB, Glenn Washburn, 2022/12/16
[PATCH v4 10/15] gdb: Only connect to remote target once when first sourced, Glenn Washburn, 2022/12/16
[PATCH v4 12/15] gdb: Allow running user-defined commands at GRUB start, Glenn Washburn, 2022/12/16