Commit a110ac32 authored by Rusty Russell's avatar Rusty Russell Committed by James Bottomley

[PATCH] Table fix for module-init-tools

This patch allows the new depmod to generate the USB & PCI hotplug
tables.  Greg Banks and I are (slowly) working on a better solution, but
allows the old-style "modules.pcimap" etc.  to be generated in the short
term.

This patch adds a "__mod_XXX_table" symbol which is an alias to the
module table, rather than a pointer.  This makes it relatively trivial
to extract the table.  Previously, it required a pointer dereference,
which means the relocations must be applied, which is why the old depmod
needs so much of modutils (ie.  it basically links the whole module in
order to find the table).

The old depmod can still be invoked using "-F System.map" to generate
the tables (there'll be lots of other warnings, and it will generate a
completely bogus modules.dep, but the tables should be OK.)
parent 1929e8b2
......@@ -15,6 +15,7 @@
#include <linux/cache.h>
#include <linux/kmod.h>
#include <linux/elf.h>
#include <linux/stringify.h>
#include <asm/module.h>
#include <asm/uaccess.h> /* For struct exception_table_entry */
......@@ -40,11 +41,14 @@ struct kernel_symbol
#ifdef MODULE
#define MODULE_GENERIC_TABLE(gtype,name) \
static const unsigned long __module_##gtype##_size \
__attribute__ ((unused)) = sizeof(struct gtype##_id); \
static const struct gtype##_id * __module_##gtype##_table \
__attribute__ ((unused)) = name
/* For replacement modutils, use an alias not a pointer. */
#define MODULE_GENERIC_TABLE(gtype,name) \
static const unsigned long __module_##gtype##_size \
__attribute__ ((unused)) = sizeof(struct gtype##_id); \
static const struct gtype##_id * __module_##gtype##_table \
__attribute__ ((unused)) = name; \
extern const struct gtype##_id __mod_##gtype##_table \
__attribute__ ((unused, alias(__stringify(name))))
/* This is magically filled in by the linker, but THIS_MODULE must be
a constant so it works in initializers. */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment