Remove gmodule.pl and rewrite as a shell function in gdb_helper.sh. Signed-off-by: Glenn Washburn <developm...@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 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 <lkud...@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 _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel