From: James Bottomley <James.Bottomley@steeleye.com>
To: Rusty Russell <rusty@rustcorp.com.au>
Cc: Kai Germaschewski <kai@tp1.ruhr-uni-bochum.de>,
Linux Kernel <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] fix for kallsyms module symbol resolution problem
Date: 30 Jun 2003 21:24:35 -0500 [thread overview]
Message-ID: <1057026277.2069.80.camel@mulgrave> (raw)
In-Reply-To: <20030630074948.8F43D2C0A7@lists.samba.org>
[-- Attachment #1: Type: text/plain, Size: 269 bytes --]
On Mon, 2003-06-30 at 01:17, Rusty Russell wrote:
> Yeah, but I was trying to get you to do more work. And if the names
> resulting are useless anyway, why apply the patch?
OK, how about the attached. I think it solves the module_text_address()
problem too.
James
[-- Attachment #2: tmp.diff --]
[-- Type: text/plain, Size: 3050 bytes --]
===== include/linux/module.h 1.65 vs edited =====
--- 1.65/include/linux/module.h Fri Jun 6 00:54:38 2003
+++ edited/include/linux/module.h Mon Jun 30 15:47:27 2003
@@ -217,6 +217,9 @@
/* Here are the sizes of the init and core sections */
unsigned long init_size, core_size;
+ /* The size of the code in each section. */
+ unsigned long init_code_size, core_code_size;
+
/* Arch-specific module values */
struct mod_arch_specific arch;
===== kernel/module.c 1.86 vs edited =====
--- 1.86/kernel/module.c Wed Jun 11 00:55:09 2003
+++ edited/kernel/module.c Mon Jun 30 21:18:17 2003
@@ -1176,6 +1176,9 @@
const char *secstrings)
{
static unsigned long const masks[][2] = {
+ /* NOTE: code must be the first and only section
+ * in this array; otherwise modify the code_size
+ * finder in the two loops below */
{ SHF_EXECINSTR | SHF_ALLOC, ARCH_SHF_SMALL },
{ SHF_ALLOC, SHF_WRITE | ARCH_SHF_SMALL },
{ SHF_WRITE | SHF_ALLOC, ARCH_SHF_SMALL },
@@ -1198,6 +1201,8 @@
continue;
s->sh_entsize = get_offset(&mod->core_size, s);
DEBUGP("\t%s\n", secstrings + s->sh_name);
+ if(m == 0)
+ mod->core_code_size = mod->core_size;
}
}
@@ -1214,6 +1219,8 @@
s->sh_entsize = (get_offset(&mod->init_size, s)
| INIT_OFFSET_MASK);
DEBUGP("\t%s\n", secstrings + s->sh_name);
+ if(m == 0)
+ mod->init_code_size = mod->init_size;
}
}
}
@@ -1726,6 +1733,7 @@
module_free(mod, mod->module_init);
mod->module_init = NULL;
mod->init_size = 0;
+ mod->init_code_size = 0;
up(&module_mutex);
return 0;
@@ -1747,9 +1755,11 @@
/* At worse, next value is at end of module */
if (within(addr, mod->module_init, mod->init_size))
- nextval = (unsigned long)mod->module_init + mod->init_size;
+ nextval = (unsigned long)mod->module_init
+ + mod->init_code_size;
else
- nextval = (unsigned long)mod->module_core + mod->core_size;
+ nextval = (unsigned long)mod->module_core
+ + mod->core_code_size;
/* Scan for closest preceeding symbol, and next symbol. (ELF
starts real symbols at 1). */
@@ -1758,10 +1768,12 @@
continue;
if (mod->symtab[i].st_value <= addr
- && mod->symtab[i].st_value > mod->symtab[best].st_value)
+ && mod->symtab[i].st_value > mod->symtab[best].st_value
+ && *(mod->strtab + mod->symtab[i].st_name) != '\0' )
best = i;
if (mod->symtab[i].st_value > addr
- && mod->symtab[i].st_value < nextval)
+ && mod->symtab[i].st_value < nextval
+ && *(mod->strtab + mod->symtab[i].st_name) != '\0')
nextval = mod->symtab[i].st_value;
}
@@ -1910,8 +1922,8 @@
struct module *mod;
list_for_each_entry(mod, &modules, list)
- if (within(addr, mod->module_init, mod->init_size)
- || within(addr, mod->module_core, mod->core_size))
+ if (within(addr, mod->module_init, mod->init_code_size)
+ || within(addr, mod->module_core, mod->core_code_size))
return mod;
return NULL;
}
next prev parent reply other threads:[~2003-07-01 2:10 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-06-28 3:26 [PATCH] fix for kallsyms module symbol resolution problem James Bottomley
2003-06-30 2:06 ` Rusty Russell
2003-06-30 3:13 ` James Bottomley
2003-06-30 6:17 ` Rusty Russell
2003-06-30 14:10 ` James Bottomley
2003-07-01 1:11 ` Rusty Russell
2003-07-01 2:24 ` James Bottomley [this message]
2003-07-01 4:58 ` Rusty Russell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1057026277.2069.80.camel@mulgrave \
--to=james.bottomley@steeleye.com \
--cc=kai@tp1.ruhr-uni-bochum.de \
--cc=linux-kernel@vger.kernel.org \
--cc=rusty@rustcorp.com.au \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).