- Fix broken testsuites on 32bit systems.

add: fix-32bits.diff

OBS-URL: https://build.opensuse.org/package/show/Base:System/kmod?expand=0&rev=32
This commit is contained in:
Robert Milasan 2012-06-21 06:38:18 +00:00 committed by Git OBS Bridge
parent 87a9c849bd
commit 4c5553e792
4 changed files with 82 additions and 18 deletions

View File

@ -1,15 +0,0 @@
Index: kmod-9/testsuite/init_module.c
===================================================================
--- kmod-9.orig/testsuite/init_module.c
+++ kmod-9/testsuite/init_module.c
@@ -147,7 +147,9 @@ static int create_sysfs_files(const char
strcpy(buf + len, modname);
len += strlen(modname);
- assert(mkdir_p(buf, 0755) >= 0);
+ // This fails on 32bit systems, we can't use assert
+ // assert(mkdir_p(buf, 0755) >= 0);
+ mkdir_p(buf, 0755);
strcpy(buf + len, "/initstate");
return write_one_line_file(buf, "live\n", strlen("live\n"));

79
fix-32bits.diff Normal file
View File

@ -0,0 +1,79 @@
diff --git a/testsuite/init_module.c b/testsuite/init_module.c
index 814998a..ed8b9fc 100644
--- a/testsuite/init_module.c
+++ b/testsuite/init_module.c
@@ -16,6 +16,7 @@
*/
#include <assert.h>
+#include <elf.h>
#include <errno.h>
#include <dirent.h>
#include <fcntl.h>
@@ -206,6 +207,12 @@ static inline bool module_is_inkernel(const char *modname)
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 @@ long init_module(void *mem, unsigned long len, const char *args)
const void *buf;
uint64_t bufsize;
int err;
+ uint8_t class;
+ off_t offset;
init_retcodes();
@@ -237,13 +246,20 @@ long init_module(void *mem, unsigned long len, const char *args)
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 --git a/testsuite/stripped-module.h b/testsuite/stripped-module.h
index 9f97dae..19862f3 100644
--- a/testsuite/stripped-module.h
+++ b/testsuite/stripped-module.h
@@ -13,6 +13,7 @@ struct list_head {
};
#define MODULE_NAME_LEN (64 - sizeof(unsigned long))
+
struct module
{
enum module_state state;
@@ -24,4 +25,8 @@ struct module
char name[MODULE_NAME_LEN];
};
+/* padding */
+#define MODULE_NAME_OFFSET_64 4 + 4 + 2 * 8
+#define MODULE_NAME_OFFSET_32 4 + 2 * 4
+
#endif

View File

@ -11,8 +11,8 @@ Wed Jun 20 08:41:03 UTC 2012 - rmilasan@suse.com
* depmod: don't return error if modules.builtin don't exist
* libkmod-util: split function for usec conversion
* libkmod-util: add missing stdbool.h include
- Don't assert mkdir_p, it fails on 32bit systems.
add: dont-assert-mkdir_p.patch
- Fix broken testsuites on 32bit systems.
add: fix-32bits.diff
-------------------------------------------------------------------
Sat Apr 21 01:55:30 UTC 2012 - jengelh@medozas.de

View File

@ -30,7 +30,7 @@ Url: http://www.politreco.com/2011/12/announce-kmod-2/
Source: %name-%version.tar.xz
Source2: %name-%version.tar.sign
Patch1: kmod-so-version.diff
Patch2: dont-assert-mkdir_p.patch
Patch2: fix-32bits.diff
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: autoconf