Remove gmodule.pl and rewrite as a shell function in gdb_helper.sh.
Signed-off-by: Glenn Washburn <[email protected]>
---
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 574afa50c..726f51be7 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 7891c6c07..eb4f7041b 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 b37d5adfc..1eaa976fb 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 78aa1e64e..000000000
--- 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 <[email protected]>
-###
-
-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
_______________________________________________
Grub-devel mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/grub-devel