Author: matthew
Date: 2012-07-13 13:52:27 -0600 (Fri, 13 Jul 2012)
New Revision: 2488

Added:
   trunk/kmod/
   trunk/kmod/kmod-9-testsuite-1.patch
Log:
Add kmod testsuite fix.

Added: trunk/kmod/kmod-9-testsuite-1.patch
===================================================================
--- trunk/kmod/kmod-9-testsuite-1.patch                         (rev 0)
+++ trunk/kmod/kmod-9-testsuite-1.patch 2012-07-13 19:52:27 UTC (rev 2488)
@@ -0,0 +1,85 @@
+Submitted By:            Matt Burgess <matthew_at_linuxfromscratch_dot_org>
+Date:                    2012-07-13
+Initial Package Version: 9
+Upstream Status:         From Upstream
+Origin:                  
http://www.spinics.net/lists/linux-modules/msg00800.html
+Description:             Fixes an assertion failure when running the testsuite
+                         on x86 hosts.
+
+diff -Naur kmod-9.orig/testsuite/init_module.c kmod-9/testsuite/init_module.c
+--- kmod-9.orig/testsuite/init_module.c        2012-06-19 20:02:47.171270610 
+0000
++++ kmod-9/testsuite/init_module.c     2012-07-10 18:49:59.761001582 +0000
+@@ -16,6 +16,7 @@
+  */
+ 
+ #include <assert.h>
++#include <elf.h>
+ #include <errno.h>
+ #include <dirent.h>
+ #include <fcntl.h>
+@@ -206,6 +207,12 @@
+       return ret;
+ }
+ 
++static uint8_t elf_identify(void *mem)
++{
++      uint8_t *p = mem;
++      return p[EI_CLASS];
++}
++
+ TS_EXPORT long init_module(void *mem, unsigned long len, const char *args);
+ 
+ /*
+@@ -225,6 +232,8 @@
+       const void *buf;
+       uint64_t bufsize;
+       int err;
++      uint8_t class;
++      off_t offset;
+ 
+       init_retcodes();
+ 
+@@ -237,13 +246,20 @@
+       kmod_elf_unref(elf);
+ 
+       /*
+-       * We couldn't find the module's name inside the ELF file. Just exit
+-       * as if it was successful
++       * We couldn't find the parse the ELF file. Just exit as if it was
++       * successful
+        */
+       if (err < 0)
+               return 0;
+ 
+-      modname = (char *)buf + offsetof(struct module, name);
++      /* We need to open both 32 and 64 bits module - hack! */
++      class = elf_identify(mem);
++      if (class == ELFCLASS64)
++              offset = MODULE_NAME_OFFSET_64;
++      else
++              offset = MODULE_NAME_OFFSET_32;
++
++      modname = (char *)buf + offset;
+       mod = find_module(modules, modname);
+       if (mod != NULL) {
+               errno = mod->errcode;
+diff -Naur kmod-9.orig/testsuite/stripped-module.h 
kmod-9/testsuite/stripped-module.h
+--- kmod-9.orig/testsuite/stripped-module.h    2012-05-23 23:26:30.318944359 
+0000
++++ kmod-9/testsuite/stripped-module.h 2012-07-10 18:49:59.761001582 +0000
+@@ -13,6 +13,7 @@
+ };
+ 
+ #define MODULE_NAME_LEN (64 - sizeof(unsigned long))
++
+ struct module
+ {
+       enum module_state state;
+@@ -24,4 +25,8 @@
+       char name[MODULE_NAME_LEN];
+ };
+ 
++/*                                padding */
++#define MODULE_NAME_OFFSET_64 4 + 4           + 2 * 8
++#define MODULE_NAME_OFFSET_32 4 + 2 * 4
++
+ #endif

-- 
http://linuxfromscratch.org/mailman/listinfo/patches
FAQ: http://www.linuxfromscratch.org/faq/
Unsubscribe: See the above information page

Reply via email to