summaryrefslogtreecommitdiff
path: root/packages/module-init-tools
diff options
context:
space:
mode:
authorKoen Kooi <koen@openembedded.org>2005-06-30 08:19:37 +0000
committerOpenEmbedded Project <openembedded-devel@lists.openembedded.org>2005-06-30 08:19:37 +0000
commitc8e5702127e507e82e6f68a4b8c546803accea9d (patch)
tree00583491f40ecc640f2b28452af995e3a63a09d7 /packages/module-init-tools
parent87ec8ca4d2e2eb4d1c1e1e1a6b46a395d56805b9 (diff)
import clean BK tree at cset 1.3670
Diffstat (limited to 'packages/module-init-tools')
-rw-r--r--packages/module-init-tools/.mtn2git_empty0
-rw-r--r--packages/module-init-tools/files/.mtn2git_empty0
-rw-r--r--packages/module-init-tools/files/depmod-byteswap.patch288
-rw-r--r--packages/module-init-tools/files/ignore_arch_directory25
-rw-r--r--packages/module-init-tools/files/manpagesopt39
-rw-r--r--packages/module-init-tools/files/modutils_extension55
-rw-r--r--packages/module-init-tools/files/no_man_rebuild12
-rw-r--r--packages/module-init-tools/files/soc.patch97
-rw-r--r--packages/module-init-tools/module-init-tools_3.2-pre4.bb59
9 files changed, 575 insertions, 0 deletions
diff --git a/packages/module-init-tools/.mtn2git_empty b/packages/module-init-tools/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/module-init-tools/.mtn2git_empty
diff --git a/packages/module-init-tools/files/.mtn2git_empty b/packages/module-init-tools/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/module-init-tools/files/.mtn2git_empty
diff --git a/packages/module-init-tools/files/depmod-byteswap.patch b/packages/module-init-tools/files/depmod-byteswap.patch
index e69de29bb2..1b46708b30 100644
--- a/packages/module-init-tools/files/depmod-byteswap.patch
+++ b/packages/module-init-tools/files/depmod-byteswap.patch
@@ -0,0 +1,288 @@
+diff -u module-init-tools-3.1/orig/depmod.c module-init-tools-3.1/depmod.c
+--- module-init-tools-3.1/orig/depmod.c 2005-04-07 18:50:25.829635704 -0700
++++ module-init-tools-3.1/depmod.c 2005-04-07 19:46:43.842099752 -0700
+@@ -17,6 +17,7 @@
+ #include <dirent.h>
+ #include <sys/utsname.h>
+ #include <sys/mman.h>
++#include <endian.h>
+
+ #include "zlibsupport.h"
+ #include "depmod.h"
+@@ -303,16 +304,38 @@
+ goto fail;
+ }
+
+- switch (((char *)new->data)[EI_CLASS]) {
+- case ELFCLASS32:
++ switch (((char *)new->data)[EI_CLASS] + (((char *)new->data)[EI_DATA] << 8)) {
++ case ELFCLASS32 + (ELFDATA2LSB << 8): /* 32 bit little endian */
++#if __BYTE_ORDER == __LITTLE_ENDIAN
+ new->ops = &mod_ops32;
++#else
++ new->ops = &mod_ops32swap;
++#endif
++ break;
++ case ELFCLASS32 + (ELFDATA2MSB << 8): /* 32 bit big endian */
++#if __BYTE_ORDER == __LITTLE_ENDIAN
++ new->ops = &mod_ops32swap;
++#else
++ new->ops = &mod_ops32;
++#endif
+ break;
+- case ELFCLASS64:
++ case ELFCLASS64 + (ELFDATA2LSB << 8): /* 64 bit little endian */
++#if __BYTE_ORDER == __LITTLE_ENDIAN
+ new->ops = &mod_ops64;
++#else
++ new->ops = &mod_ops64swap;
++#endif
++ break;
++ case ELFCLASS64 + (ELFDATA2MSB << 8): /* 64 bit big endian */
++#if __BYTE_ORDER == __LITTLE_ENDIAN
++ new->ops = &mod_ops64swap;
++#else
++ new->ops = &mod_ops64;
++#endif
+ break;
+ default:
+- warn("Module %s has elf unknown identifier %i\n",
+- new->pathname, ((char *)new->data)[EI_CLASS]);
++ warn("Module %s has elf unknown identifier %i,%i\n",
++ new->pathname, ((char *)new->data)[EI_CLASS], ((char *)new->data)[EI_DATA]);
+ goto fail;
+ }
+ return new;
+diff -u module-init-tools-3.1/orig/moduleops.c module-init-tools-3.1/moduleops.c
+--- module-init-tools-3.1/orig/moduleops.c 2005-04-07 18:50:25.829635704 -0700
++++ module-init-tools-3.1/moduleops.c 2005-04-07 19:52:11.166338904 -0700
+@@ -9,15 +9,64 @@
+ #include "moduleops.h"
+ #include "tables.h"
+
++/* This deals with both mis-aligned reads and endianness issues,
++ * it may seem crude however the compiler knows 'size' at compile
++ * time (because it comes from sizeof) therefore generates fairly
++ * optimal code.
++ */
++static inline void read_native(const void *src, void *dest, unsigned int size)
++{
++ unsigned int i;
++ for (i = 0; i < size; i++)
++ ((unsigned char*)dest)[i] = ((unsigned char*)src)[i];
++}
++
++#define NATIVE(x)\
++({\
++ typeof(x) __x;\
++ read_native(&(x), &__x, sizeof __x);\
++ __x;\
++})
++
++static inline void read_swapped(const void *src, void *dest, unsigned int size)
++{
++ unsigned int i;
++ for (i = 0; i < size; i++)
++ ((unsigned char*)dest)[i] = ((unsigned char*)src)[size - i-1];
++}
++
++#define SWAPPED(x)\
++({\
++ typeof(x) __x;\
++ read_swapped(&(x), &__x, sizeof __x);\
++ __x;\
++})
++
++#define PERBITCOUNT(x) x##32
+ #define PERBIT(x) x##32
+ #define ElfPERBIT(x) Elf32_##x
+ #define ELFPERBIT(x) ELF32_##x
++#define READ(x) NATIVE(x)
++#include "moduleops_core.c"
++#undef PERBIT
++#undef READ
++#define PERBIT(x) x##32swap
++#define READ(x) SWAPPED(x)
+ #include "moduleops_core.c"
+
++#undef PERBITCOUNT
+ #undef PERBIT
+ #undef ElfPERBIT
+ #undef ELFPERBIT
++#undef READ
++#define PERBITCOUNT(x) x##64
+ #define PERBIT(x) x##64
+ #define ElfPERBIT(x) Elf64_##x
+ #define ELFPERBIT(x) ELF64_##x
++#define READ(x) NATIVE(x)
++#include "moduleops_core.c"
++#undef PERBIT
++#undef READ
++#define PERBIT(x) x##64swap
++#define READ(x) SWAPPED(x)
+ #include "moduleops_core.c"
+diff -u module-init-tools-3.1/orig/moduleops.h module-init-tools-3.1/moduleops.h
+--- module-init-tools-3.1/orig/moduleops.h 2005-04-07 18:50:25.829635704 -0700
++++ module-init-tools-3.1/moduleops.h 2005-04-07 19:36:26.184997904 -0700
+@@ -24,5 +24,6 @@
+ };
+
+ extern struct module_ops mod_ops32, mod_ops64;
++extern struct module_ops mod_ops32swap, mod_ops64swap;
+
+ #endif /* MODINITTOOLS_MODULEOPS_H */
+diff -u module-init-tools-3.1/orig/moduleops_core.c module-init-tools-3.1/moduleops_core.c
+--- module-init-tools-3.1/orig/moduleops_core.c 2005-04-07 18:50:25.829635704 -0700
++++ module-init-tools-3.1/moduleops_core.c 2005-04-07 19:56:18.794693672 -0700
+@@ -8,14 +8,14 @@
+ char *secnames;
+
+ /* Grab section headers and strings so we can tell who is who */
+- sechdrs = (void *)hdr + hdr->e_shoff;
+- secnames = (void *)hdr + sechdrs[hdr->e_shstrndx].sh_offset;
++ sechdrs = (void *)hdr + READ(hdr->e_shoff);
++ secnames = (void *)hdr + READ(sechdrs[READ(hdr->e_shstrndx)].sh_offset);
+
+ /* Find the section they want */
+- for (i = 1; i < hdr->e_shnum; i++) {
+- if (strcmp(secnames+sechdrs[i].sh_name, secname) == 0) {
+- *size = sechdrs[i].sh_size;
+- return (void *)hdr + sechdrs[i].sh_offset;
++ for (i = 1; i < READ(hdr->e_shnum); i++) {
++ if (strcmp(secnames+READ(sechdrs[i].sh_name), secname) == 0) {
++ *size = READ(sechdrs[i].sh_size);
++ return (void *)hdr + READ(sechdrs[i].sh_offset);
+ }
+ }
+ *size = 0;
+@@ -24,7 +24,7 @@
+
+ static void PERBIT(load_symbols)(struct module *module)
+ {
+- struct PERBIT(kernel_symbol) *ksyms;
++ struct PERBITCOUNT(kernel_symbol) *ksyms;
+ char *ksymstrings;
+ unsigned long i, size;
+
+@@ -58,10 +58,10 @@
+
+ /* Old-style. */
+ ksyms = PERBIT(load_section)(module->data, "__ksymtab", &size);
+- for (i = 0; i < size / sizeof(struct PERBIT(kernel_symbol)); i++)
++ for (i = 0; i < size / sizeof(struct PERBITCOUNT(kernel_symbol)); i++)
+ add_symbol(ksyms[i].name, module);
+ ksyms = PERBIT(load_section)(module->data, "__gpl_ksymtab", &size);
+- for (i = 0; i < size / sizeof(struct PERBIT(kernel_symbol)); i++)
++ for (i = 0; i < size / sizeof(struct PERBITCOUNT(kernel_symbol)); i++)
+ add_symbol(ksyms[i].name, module);
+ }
+
+@@ -100,16 +100,16 @@
+
+ hdr = module->data;
+ handle_register_symbols = 0;
+- if (hdr->e_machine == EM_SPARC ||
+- hdr->e_machine == EM_SPARCV9)
++ if (READ(hdr->e_machine) == EM_SPARC ||
++ READ(hdr->e_machine) == EM_SPARCV9)
+ handle_register_symbols = 1;
+
+ module->num_deps = 0;
+ module->deps = NULL;
+ for (i = 1; i < size / sizeof(syms[0]); i++) {
+- if (syms[i].st_shndx == SHN_UNDEF) {
++ if (READ(syms[i].st_shndx) == SHN_UNDEF) {
+ /* Look for symbol */
+- const char *name = strings + syms[i].st_name;
++ const char *name = strings + READ(syms[i].st_name);
+ struct module *owner;
+ int weak;
+
+@@ -118,11 +118,11 @@
+ variables, to avoid anyone else misusing
+ them. */
+ if (handle_register_symbols
+- && (ELFPERBIT(ST_TYPE)(syms[i].st_info)
++ && (ELFPERBIT(ST_TYPE)(READ(syms[i].st_info))
+ == STT_REGISTER))
+ continue;
+
+- weak = ELFPERBIT(ST_BIND)(syms[i].st_info) == STB_WEAK;
++ weak = ELFPERBIT(ST_BIND)(READ(syms[i].st_info)) == STB_WEAK;
+ owner = find_symbol(name, module->pathname, weak);
+ if (owner) {
+ if (verbose)
+@@ -143,7 +143,7 @@
+ ElfPERBIT(Sym) *syms;
+ ElfPERBIT(Shdr) *sechdrs;
+
+- sechdrs = (void *)hdr + hdr->e_shoff;
++ sechdrs = (void *)hdr + READ(hdr->e_shoff);
+ strings = PERBIT(load_section)(hdr, ".strtab", &size);
+ syms = PERBIT(load_section)(hdr, ".symtab", &size);
+
+@@ -152,14 +152,14 @@
+ return NULL;
+
+ for (i = 0; i < size / sizeof(syms[0]); i++) {
+- if (strcmp(strings + syms[i].st_name, name) == 0) {
++ if (strcmp(strings + READ(syms[i].st_name), name) == 0) {
+ /* In BSS? Happens for empty device tables on
+ * recent GCC versions. */
+- if (sechdrs[syms[i].st_shndx].sh_type == SHT_NOBITS)
++ if (READ(sechdrs[READ(syms[i].st_shndx)].sh_type) == SHT_NOBITS)
+ return NULL;
+ return (void *)hdr
+- + sechdrs[syms[i].st_shndx].sh_offset
+- + syms[i].st_value;
++ + READ(sechdrs[READ(syms[i].st_shndx)].sh_offset)
++ + READ(syms[i].st_value);
+ }
+ }
+ return NULL;
+@@ -168,36 +168,36 @@
+ /* FIXME: Check size, unless we end up using aliases anyway --RR */
+ static void PERBIT(fetch_tables)(struct module *module)
+ {
+- module->pci_size = PERBIT(PCI_DEVICE_SIZE);
++ module->pci_size = PERBITCOUNT(PCI_DEVICE_SIZE);
+ module->pci_table = PERBIT(deref_sym)(module->data,
+ "__mod_pci_device_table");
+
+- module->usb_size = PERBIT(USB_DEVICE_SIZE);
++ module->usb_size = PERBITCOUNT(USB_DEVICE_SIZE);
+ module->usb_table = PERBIT(deref_sym)(module->data,
+ "__mod_usb_device_table");
+
+- module->ccw_size = PERBIT(CCW_DEVICE_SIZE);
++ module->ccw_size = PERBITCOUNT(CCW_DEVICE_SIZE);
+ module->ccw_table = PERBIT(deref_sym)(module->data,
+ "__mod_ccw_device_table");
+
+- module->ieee1394_size = PERBIT(IEEE1394_DEVICE_SIZE);
++ module->ieee1394_size = PERBITCOUNT(IEEE1394_DEVICE_SIZE);
+ module->ieee1394_table = PERBIT(deref_sym)(module->data,
+ "__mod_ieee1394_device_table");
+
+- module->pnp_size = PERBIT(PNP_DEVICE_SIZE);
++ module->pnp_size = PERBITCOUNT(PNP_DEVICE_SIZE);
+ module->pnp_table = PERBIT(deref_sym)(module->data,
+ "__mod_pnp_device_table");
+
+- module->pnp_card_size = PERBIT(PNP_CARD_DEVICE_SIZE);
++ module->pnp_card_size = PERBITCOUNT(PNP_CARD_DEVICE_SIZE);
+ module->pnp_card_table = PERBIT(deref_sym)(module->data,
+ "__mod_pnp_card_device_table");
+- module->pnp_card_offset = PERBIT(PNP_CARD_DEVICE_OFFSET);
++ module->pnp_card_offset = PERBITCOUNT(PNP_CARD_DEVICE_OFFSET);
+
+- module->input_size = PERBIT(INPUT_DEVICE_SIZE);
++ module->input_size = PERBITCOUNT(INPUT_DEVICE_SIZE);
+ module->input_table = PERBIT(deref_sym)(module->data,
+ "__mod_input_device_table");
+
+- module->soc_size = PERBIT(SOC_DEVICE_SIZE);
++ module->soc_size = PERBITCOUNT(SOC_DEVICE_SIZE);
+ module->soc_table = PERBIT(deref_sym)(module->data,
+ "__mod_soc_device_table");
+
diff --git a/packages/module-init-tools/files/ignore_arch_directory b/packages/module-init-tools/files/ignore_arch_directory
index e69de29bb2..2c71043221 100644
--- a/packages/module-init-tools/files/ignore_arch_directory
+++ b/packages/module-init-tools/files/ignore_arch_directory
@@ -0,0 +1,25 @@
+diff -ruN module-init-tools-3.1-pre6.orig/modprobe.8 module-init-tools-3.1-pre6/modprobe.8
+--- module-init-tools-3.1-pre6.orig/modprobe.8 2004-10-06 02:44:43.000000000 +0200
++++ module-init-tools-3.1-pre6/modprobe.8 2004-10-09 01:39:01.000000000 +0200
+@@ -30,6 +30,7 @@
+ the modules and other files, except for the optional
+ \fI/etc/modprobe.conf\fR configuration file
+ (see \fBmodprobe.conf\fR(5)).
++All files in the \fI/etc/modprobe.d/arch/\fR directory are ignored.
+ .PP
+ Note that this version of \fBmodprobe\fR does not
+ do anything to the module itself: the work of resolving symbols
+diff -ruN module-init-tools-3.1-pre6.orig/modprobe.c module-init-tools-3.1-pre6/modprobe.c
+--- module-init-tools-3.1-pre6.orig/modprobe.c 2004-10-09 01:40:18.000000000 +0200
++++ module-init-tools-3.1-pre6/modprobe.c 2004-10-09 01:40:11.000000000 +0200
+@@ -1082,6 +1082,10 @@
+ {
+ DIR *dir;
+
++ /* ignore everything in this directory */
++ if (streq(filename, "/etc/modprobe.d/arch"))
++ return 1;
++
+ /* If it's a directory, recurse. */
+ dir = opendir(filename);
+ if (dir) {
diff --git a/packages/module-init-tools/files/manpagesopt b/packages/module-init-tools/files/manpagesopt
index e69de29bb2..2e9d228d58 100644
--- a/packages/module-init-tools/files/manpagesopt
+++ b/packages/module-init-tools/files/manpagesopt
@@ -0,0 +1,39 @@
+Index: module-init-tools-3.1/configure.in
+===================================================================
+--- module-init-tools-3.1.orig/configure.in 2004-11-12 00:05:25.000000000 -0500
++++ module-init-tools-3.1/configure.in 2005-01-20 02:23:16.409792288 -0500
+@@ -41,5 +41,14 @@
+ fi])
+ AC_SUBST(MODULE_DIR)
+
+-AC_OUTPUT([Makefile])
++AC_ARG_ENABLE(manpages,
++[ --disable-manpages Disable man page generation.],
++[if test x"$enableval" != x"no"; then
++ enable_manpages=yes
++else
++ enable_manpages=no
++fi],
++[enable_manpages=yes])
++AM_CONDITIONAL([MANPAGES], test x"$enable_manpages" = x"yes")
+
++AC_OUTPUT([Makefile])
+Index: module-init-tools-3.1/Makefile.am
+===================================================================
+--- module-init-tools-3.1.orig/Makefile.am 2004-07-12 02:11:46.000000000 -0400
++++ module-init-tools-3.1/Makefile.am 2005-01-20 02:24:32.155277224 -0500
+@@ -21,11 +21,12 @@
+ MAN5 = modprobe.conf.5 modules.dep.5
+ MAN8 = depmod.8 insmod.8 lsmod.8 rmmod.8 modprobe.8 modinfo.8
+ SGML = $(addprefix doc/, $(MAN5:%.5=%.sgml) $(MAN8:%.8=%.sgml))
+-man_MANS = $(MAN5) $(MAN8)
+ mandir = $(shell if [ `echo $(prefix)/ | tr -s /` = / ]; then echo /usr/share/man; else echo $(prefix)/man; fi)
+
++if MANPAGES
++man_MANS = $(MAN5) $(MAN8)
++endif
+
+-EXTRA_DIST = generate-modprobe.conf modprobe.devfs FAQ stress_modules.sh install-with-care $(SGML) $(man_MANS)
+
+ sbin_PROGRAMS = insmod modprobe rmmod depmod modinfo insmod.static
+ bin_PROGRAMS = lsmod
diff --git a/packages/module-init-tools/files/modutils_extension b/packages/module-init-tools/files/modutils_extension
index e69de29bb2..fd84ca2550 100644
--- a/packages/module-init-tools/files/modutils_extension
+++ b/packages/module-init-tools/files/modutils_extension
@@ -0,0 +1,55 @@
+--- module-init-tools-3.0-pre10.orig/depmod.c
++++ module-init-tools-3.0-pre10/depmod.c
+@@ -217,13 +217,13 @@
+ {
+ char *sep;
+ char pathname[strlen(argv[0])+1];
+- char oldname[strlen("depmod") + strlen(argv[0]) + sizeof(".old")];
++ char oldname[strlen("depmod") + strlen(argv[0]) + sizeof(".24")];
+
+ memset(pathname, 0, strlen(argv[0])+1);
+ sep = strrchr(argv[0], '/');
+ if (sep)
+ memcpy(pathname, argv[0], sep - argv[0]+1);
+- sprintf(oldname, "%s%s.old", pathname, "depmod");
++ sprintf(oldname, "%s%s.24", pathname, "depmod");
+
+ /* Recursion detection: we need an env var since we can't
+ change argv[0] (as older modutils uses it to determine
+--- module-init-tools-3.0-pre10.orig/backwards_compat.c
++++ module-init-tools-3.0-pre10/backwards_compat.c
+@@ -21,13 +21,13 @@
+ pid_t pid;
+ char ascii_pid[32];
+ char pathname[strlen(argv[0])+1];
+- char oldname[strlen(progname) + strlen(argv[0]) + sizeof(".old")];
++ char oldname[strlen(progname) + strlen(argv[0]) + sizeof(".24")];
+
+ memset(pathname, 0, strlen(argv[0])+1);
+ sep = strrchr(argv[0], '/');
+ if (sep)
+ memcpy(pathname, argv[0], sep - argv[0]+1);
+- sprintf(oldname, "%s%s.old", pathname, progname);
++ sprintf(oldname, "%s%s.24", pathname, progname);
+
+ /* Recursion detection: we need an env var since we can't
+ change argv[0] (as older modutils uses it to determine
+--- module-init-tools-3.0-pre10.orig/generate-modprobe.conf
++++ module-init-tools-3.0-pre10/generate-modprobe.conf
+@@ -26,12 +26,12 @@
+ cp $TESTING_MODPROBE_CONF $MODPROBECONF
+ elif [ "$STDIN" = "1" ]; then
+ cat > $MODPROBECONF
+-elif [ -x /sbin/modprobe.old ]; then
++elif [ -x /sbin/modprobe.24 ]; then
+ # In sbin.
+- /sbin/modprobe.old -c > $MODPROBECONF
+-elif modprobe.old -c >/dev/null 2>&1; then
++ /sbin/modprobe.24 -c > $MODPROBECONF
++elif modprobe.24 -c >/dev/null 2>&1; then
+ # Somewhere in path.
+- modprobe.old -c > $MODPROBECONF
++ modprobe.24 -c > $MODPROBECONF
+ elif /sbin/modprobe -V 2>/dev/null | grep -q 'modprobe version'; then
+ # Running /sbin/modprobe gives old version.
+ /sbin/modprobe -c > $MODPROBECONF
diff --git a/packages/module-init-tools/files/no_man_rebuild b/packages/module-init-tools/files/no_man_rebuild
index e69de29bb2..d38866aece 100644
--- a/packages/module-init-tools/files/no_man_rebuild
+++ b/packages/module-init-tools/files/no_man_rebuild
@@ -0,0 +1,12 @@
+diff -ruN module-init-tools-3.1.orig/Makefile.in module-init-tools-3.1/Makefile.in
+--- module-init-tools-3.1.orig/Makefile.in 2004-11-15 01:59:48.000000000 +0100
++++ module-init-tools-3.1/Makefile.in 2004-11-21 02:18:58.000000000 +0100
+@@ -613,7 +613,7 @@
+ check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+ check: check-am
+-all-am: Makefile $(PROGRAMS) $(SCRIPTS) $(MANS)
++all-am: Makefile $(PROGRAMS) $(SCRIPTS) #$(MANS)
+
+ installdirs:
+ $(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(sbindir) $(DESTDIR)$(sbindir) $(DESTDIR)$(man5dir) $(DESTDIR)$(man8dir)
diff --git a/packages/module-init-tools/files/soc.patch b/packages/module-init-tools/files/soc.patch
index e69de29bb2..ee5f11042f 100644
--- a/packages/module-init-tools/files/soc.patch
+++ b/packages/module-init-tools/files/soc.patch
@@ -0,0 +1,97 @@
+--- tables.c~ 2003-12-24 05:23:38.000000000 +0000
++++ tables.c 2005-04-02 13:12:24.370140112 +0100
+@@ -18,6 +18,34 @@
+ }
+
+ /* We set driver_data to zero */
++static void output_soc_entry(struct soc_device_id *soc, char *name, FILE *out)
++{
++ fprintf(out,
++ "%-20s 0x%08x 0x0\n",
++ name,
++ soc->id);
++}
++
++void output_soc_table(struct module *modules, FILE *out)
++{
++ struct module *i;
++
++ fprintf(out, "# soc module id driver_data\n");
++
++ for (i = modules; i; i = i->next) {
++ struct soc_device_id *e;
++ char shortname[strlen(i->pathname) + 1];
++
++ if (!i->soc_table)
++ continue;
++
++ make_shortname(shortname, i->pathname);
++ for (e = i->soc_table; e->id; e = (void *)e + i->soc_size)
++ output_soc_entry(e, shortname, out);
++ }
++}
++
++/* We set driver_data to zero */
+ static void output_pci_entry(struct pci_device_id *pci, char *name, FILE *out)
+ {
+ fprintf(out,
+--- tables.h~ 2003-12-24 05:18:54.000000000 +0000
++++ tables.h 2005-04-02 13:05:15.269373344 +0100
+@@ -116,6 +116,15 @@
+ #define INPUT_DEVICE_SIZE32 (4 + 4 * 2 + 4 + 16 * 4 + 4 + 2 * 4 + 4 + 4 + 4 + 4 * 4 + 4)
+ #define INPUT_DEVICE_SIZE64 (8 + 4 * 2 + 8 + 8 * 8 + 8 + 8 + 8 + 8 + 8 + 2 * 8 + 8)
+
++#include <stdint.h>
++
++typedef struct soc_device_id {
++ uint32_t id;
++} soc_device_id;
++
++#define SOC_DEVICE_SIZE32 (4 + 4)
++#define SOC_DEVICE_SIZE64 (4 + 8)
++
+ /* Functions provided by tables.c */
+ struct module;
+ void output_usb_table(struct module *modules, FILE *out);
+@@ -124,5 +133,6 @@
+ void output_ccw_table(struct module *modules, FILE *out);
+ void output_isapnp_table(struct module *modules, FILE *out);
+ void output_input_table(struct module *modules, FILE *out);
++void output_soc_table(struct module *modules, FILE *out);
+
+ #endif /* MODINITTOOLS_TABLES_H */
+--- moduleops_core.c~ 2004-08-12 06:08:35.000000000 +0100
++++ moduleops_core.c 2005-04-02 13:04:13.367783816 +0100
+@@ -196,6 +196,11 @@
+ module->input_size = PERBIT(INPUT_DEVICE_SIZE);
+ module->input_table = PERBIT(deref_sym)(module->data,
+ "__mod_input_device_table");
++
++ module->soc_size = PERBIT(SOC_DEVICE_SIZE);
++ module->soc_table = PERBIT(deref_sym)(module->data,
++ "__mod_soc_device_table");
++
+ }
+
+ struct module_ops PERBIT(mod_ops) = {
+--- depmod.h~ 2003-12-24 02:10:57.000000000 +0000
++++ depmod.h 2005-04-02 13:03:19.006048056 +0100
+@@ -47,6 +47,8 @@
+ void *pnp_card_table;
+ unsigned int input_size;
+ void *input_table;
++ unsigned int soc_size;
++ void *soc_table;
+
+ /* File contents and length. */
+ void *data;
+--- depmod.c~ 2005-02-14 04:50:51.744716656 +0000
++++ depmod.c 2005-04-02 13:03:37.051304760 +0100
+@@ -683,6 +683,7 @@
+ { "modules.ieee1394map", output_ieee1394_table },
+ { "modules.isapnpmap", output_isapnp_table },
+ { "modules.inputmap", output_input_table },
++ { "modules.socmap", output_soc_table },
+ { "modules.alias", output_aliases },
+ { "modules.symbols", output_symbols },
+ };
diff --git a/packages/module-init-tools/module-init-tools_3.2-pre4.bb b/packages/module-init-tools/module-init-tools_3.2-pre4.bb
index e69de29bb2..90da33addb 100644
--- a/packages/module-init-tools/module-init-tools_3.2-pre4.bb
+++ b/packages/module-init-tools/module-init-tools_3.2-pre4.bb
@@ -0,0 +1,59 @@
+DESCRIPTION = "This package contains a set of programs for loading, inserting, and \
+removing kernel modules for Linux (versions 2.5.48 and above). It serves \
+the same function that the modutils package serves for Linux 2.4."
+LICENSE = GPL
+SECTION = "base"
+PR = "r0"
+
+PACKAGES =+ "module-init-tools-insmod-static module-init-tools-depmod"
+RDEPENDS_${PN} += "module-init-tools-depmod"
+
+FILES_module-init-tools-depmod = "${sbindir}/depmod.26"
+FILES_module-init-tools-insmod-static = "${sbindir}/insmod.static"
+
+SRC_URI = "ftp://ftp.kernel.org/pub/linux/utils/kernel/module-init-tools/module-init-tools-${PV}.tar.bz2 \
+ file://ignore_arch_directory;patch=1 \
+ file://modutils_extension;patch=1 \
+ file://no_man_rebuild;patch=1 \
+ file://manpagesopt;patch=1 "
+S = "${WORKDIR}/module-init-tools-${PV}"
+
+EXTRA_OECONF = "--disable-manpages"
+
+bindir = "/bin"
+sbindir = "/sbin"
+
+inherit autotools
+
+do_install() {
+ autotools_do_install
+ for f in bin/lsmod sbin/insmod sbin/rmmod sbin/modprobe sbin/modinfo sbin/depmod; do
+ mv ${D}/$f ${D}/$f.26
+ done
+}
+
+pkg_postinst_module-init-tools() {
+#!/bin/sh
+for f in sbin/insmod sbin/modprobe sbin/rmmod sbin/depmod sbin/modinfo bin/lsmod; do
+bn=`basename $f`
+ update-alternatives --install /$f $bn /$f.26 20
+done
+}
+
+pkg_prerm_module-init-tools() {
+#!/bin/sh
+for f in sbin/insmod sbin/modprobe sbin/rmmod sbin/depmod sbin/modinfo bin/lsmod; do
+bn=`basename $f`
+ update-alternatives --remove $bn /$f.26
+done
+}
+
+pkg_postinst_module-init-tools-depmod() {
+#!/bin/sh
+update-alternatives --install /sbin/depmod depmod /sbin/depmod.26 20
+}
+
+pkg_prerm_module-init-tools() {
+#!/bin/sh
+update-alternatives --remove depmod /sbin/depmod.26
+}