[RFC PATCH 16/16] Fix compare_syms() not to put a text symbol out of range

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Kazuhito Hagio <k-hagio-ab@xxxxxxx>

Without the patch, a __pfx symbol having the same address as its module
text pseudo symbol is located at before the pseudo symbol and it is not
displayed by "sym" command, after loading module symbols.  For example,

  crash> sym -m dm_mod | head -n 3
  ffffffffc07e8000 MODULE TEXT START: dm_mod
  ffffffffc07e8000 (T) __pfx_dm_send_uevents
  ffffffffc07e8010 (T) dm_send_uevents
  crash> mod -s dm_mod
  crash> sym -m dm_mod | head -n 3
  ffffffffc07e8000 MODULE TEXT START: dm_mod
  ffffffffc07e8010 (T) dm_send_uevents
  ffffffffc07e81a0 (T) __pfx_dm_path_uevent
  crash> set debug 1
  crash> help -s
  ...
          loaded_objfile: 54dd800
    ffffffffc07e8000  __pfx_dm_send_uevents     << out of MOD_TEXT range
    ffffffffc07e8000  _MODULE_TEXT_START_dm_mod
    ffffffffc07e8010  dm_send_uevents
    ffffffffc07e81a0  __pfx_dm_path_uevent

Signed-off-by: Kazuhito Hagio <k-hagio-ab@xxxxxxx>
---
 symbols.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/symbols.c b/symbols.c
index a1e54c6f9f98..7153bf9a2dc1 100644
--- a/symbols.c
+++ b/symbols.c
@@ -3433,7 +3433,8 @@ compare_syms(const void *v1, const void *v2)
 			return -1;
 		if (STRNEQ(s2->name, "__insmod"))
 			return 1;
-		if (STRNEQ(s2->name, "_MODULE_START_"))
+		if (MODULE_MEM_START(s2, MOD_TEXT) ||
+		    STRNEQ(s2->name, "_MODULE_START_"))
 			return 1;
 		/* Get pseudo section name. */
 		if (MODULE_SECTION_START(s1))
-- 
2.31.1

--
Crash-utility mailing list
Crash-utility@xxxxxxxxxx
https://listman.redhat.com/mailman/listinfo/crash-utility
Contribution Guidelines: https://github.com/crash-utility/crash/wiki




[Index of Archives]     [Fedora Development]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [KDE Users]     [Fedora Tools]

 

Powered by Linux