Module loader compile bug
A message that is not in the archive (sent off-list or not yet received): [email protected]
In message <[email protected]> you write:
Quoted 9 lines
I realize you're still working on this, but current bk is broken if you turn off module unload support. In
include/linux/module.hwe get:#else /*!CONFIG_MODULE_UNLOAD*/ <snip> #define symbol_put_addr(p) do { } while(0) #endif /* CONFIG_MODULE_UNLOAD */
Quoted 6 lines
Which upsets this line in
kernel/module.cvoid
symbol_put_addr(void *addr)After the preprocessor gets a hold of it all, gcc doesn't know what to make of "void do { } while(0)".
Yep, symbol_put_addr() in module.c should be moved under __symbol_put.
Patch is fairly trivial, does this work for you?
Rusty.
--
Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
kernel/module.c renamed from kernel/module.c.~1~ +22 -22
@@ -492,6 +492,28 @@ void __symbol_put(const char *symbol) }EXPORT_SYMBOL (__symbol_put); +void symbol_put_addr (void *addr) +{ +struct kernel_symbol_group *ks; +unsigned long flags; + +spin_lock_irqsave (&modlist_lock, flags); +list_for_each_entry (ks, &symbols, list) { +unsigned int i; + +for (i =0 ; i < ks->num_syms; i++) { +if (ks->syms[i].value == (unsigned long )addr) { +module_put (ks->owner); +spin_unlock_irqrestore (&modlist_lock, flags); +return ; + } + } + } +spin_unlock_irqrestore (&modlist_lock, flags); +BUG (); +} +EXPORT_SYMBOL_GPL (symbol_put_addr); +#else /* !CONFIG_MODULE_UNLOAD */ static void print_unload_info (struct seq_file *m,struct module *mod) {
@@ -716,28 +738,6 @@ void *__symbol_get(const char *symbol) }EXPORT_SYMBOL_GPL (__symbol_get); -void symbol_put_addr (void *addr) -{ -struct kernel_symbol_group *ks; -unsigned long flags; - -spin_lock_irqsave (&modlist_lock, flags); -list_for_each_entry (ks, &symbols, list) { -unsigned int i; - -for (i =0 ; i < ks->num_syms; i++) { -if (ks->syms[i].value == (unsigned long )addr) { -module_put (ks->owner); -spin_unlock_irqrestore (&modlist_lock, flags); -return ; - } - } - } -spin_unlock_irqrestore (&modlist_lock, flags); -BUG (); -} -EXPORT_SYMBOL_GPL (symbol_put_addr); -/* Transfer one ELF section to the correct (init or core) area. */ static void *copy_section(const char *name, void *base,
Quoted 4 lines · Rusty Russell
Yep,
symbol_put_addr()inmodule.cshould be moved under__symbol_put.Patch is fairly trivial, does this work for you?
Rusty.
Fixed mine. Only one minor thing, I still get a lot of warnings on:include/linux/module.h:239: warning: `symbol_put' redefined
Thanks,
Paul Larson
Quoted 12 lines · Rusty Russell
In message <[email protected]> you write:
Quoted 11 lines
I realize you're still working on this, but current bk is broken if you turn off module unload support. In
include/linux/module.hwe get:#else /*!CONFIG_MODULE_UNLOAD*/ <snip> #define symbol_put_addr(p) do { } while(0) #endif /* CONFIG_MODULE_UNLOAD */Which upsets this line in
kernel/module.c
Quoted 8 lines
Quoted 4 lines
void
symbol_put_addr(void *addr)After the preprocessor gets a hold of it all, gcc doesn't know what to make of "void do { } while(0)".
Yep,
symbol_put_addr()inmodule.cshould be moved under__symbol_put.Patch is fairly trivial, does this work for you?
Yes, thanks.
Signature · 1 line
Brad Heilbrun