[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 06/15] gdb: Do not run load_module if module has already been
From: |
Glenn Washburn |
Subject: |
[PATCH v3 06/15] gdb: Do not run load_module if module has already been loaded |
Date: |
Thu, 15 Dec 2022 01:07:41 -0600 |
Fix an issue where the command load_module is being run multiple times.
This happens because grub_dl_add can get called multiple times by GRUB
(eg. a user runs "insmod <module>" multple times). This causes the
symbols to get added multiple times. Instead, first check if the modules
has already been loaded, and not run load_module in the automatic runtime
module symbols loader command, runtime_load_module, if it has. This is
done using the new GDB command get_module which traverses the loaded
module list checking if a given string matches the each module name. It
returns the address of the module if found in the $ret GDB variable,
otherwise NULL.
Also add new GDB command num_modules that sets the variable $ret to the
number of modules loaded.
Signed-off-by: Glenn Washburn <development@efficientek.com>
---
grub-core/gdb_grub.in | 29 ++++++++++++++++++++++++++++-
1 file changed, 28 insertions(+), 1 deletion(-)
diff --git a/grub-core/gdb_grub.in b/grub-core/gdb_grub.in
index 78219ea36e..521e3ae6ce 100644
--- a/grub-core/gdb_grub.in
+++ b/grub-core/gdb_grub.in
@@ -82,7 +82,10 @@ define runtime_load_module
commands
silent
fr 1
- load_module mod
+ get_module mod->name
+ if ($ret == 0)
+ load_module mod
+ end
cont
end
cont
@@ -92,6 +95,30 @@ document runtime_load_module
Load module symbols at runtime as they are loaded.
end
+define get_module
+ set $this = grub_dl_head
+ while ($this != 0 && grub_strcmp($this->name, $arg0))
+ set $this = $this->next
+ end
+ set $ret = $this
+end
+document get_module
+ Given a module name print its address or NULL if not loaded.
+end
+
+define num_modules
+ set $this = grub_dl_head
+ set $i = 0
+ while ($this != 0)
+ set $i = $i + 1
+ set $this = $this->next
+ end
+ set $ret = $this
+end
+document num_modules
+ Given a module name print its address or NULL if not loaded.
+end
+
###
set confirm off
--
2.34.1
- [PATCH v3 00/15] GDB script fixes and improvements, Glenn Washburn, 2022/12/15
- [PATCH v3 01/15] gdb: Fix redirection issue in dump_module_sections, Glenn Washburn, 2022/12/15
- [PATCH v3 02/15] gdb: Prevent wrapping when writing to .segments.tmp, Glenn Washburn, 2022/12/15
- [PATCH v3 03/15] gdb: If no modules have been loaded, do not try to load module symbols, Glenn Washburn, 2022/12/15
- [PATCH v3 04/15] gdb: Move runtime module loading into runtime_load_module, Glenn Washburn, 2022/12/15
- [PATCH v3 05/15] gdb: Get correct mod variable value, Glenn Washburn, 2022/12/15
- [PATCH v3 06/15] gdb: Do not run load_module if module has already been loaded,
Glenn Washburn <=
- [PATCH v3 07/15] gdb: Add functions to make loading from dynamically positioned targets easier, Glenn Washburn, 2022/12/15
- [PATCH v3 08/15] gdb: Remove Perl dependency for GRUB GDB script, Glenn Washburn, 2022/12/15
- [PATCH v3 09/15] gdb: If enabled, print line used to load EFI kernel symbols when using gdb_grub script, Glenn Washburn, 2022/12/15
- [PATCH v3 10/15] gdb: Conditionally run GDB script logic for dynamically or statically positioned GRUB, Glenn Washburn, 2022/12/15
- [PATCH v3 11/15] gdb: Only connect to remote target once when first sourced, Glenn Washburn, 2022/12/15
- [PATCH v3 12/15] gdb: Allow user defined "onload_<modname>" command to be run when module is loaded, Glenn Washburn, 2022/12/15
- [PATCH v3 13/15] gdb: Allow running user-defined commands at GRUB start, Glenn Washburn, 2022/12/15
- [PATCH v3 14/15] gdb: Add ability to turn on shell tracing for gdb helper script, Glenn Washburn, 2022/12/15
- [PATCH v3 15/15] docs: Add debugging chapter to development documentation, Glenn Washburn, 2022/12/15