hello hpa,
quite easy to get m-i-t build against klibc,
so i propose to kill the old local insmod copy.
sent the only local m-i-t fix upstream, please pull:
git pull git://brane.itp.tuwien.ac.at/~mattems/klibc.git maks
maximilian attems (3):
[klibc] klibc/socketcalls/.gitignore addition
[klibc] elf.h add support for st_info field
[klibc] remove local insmod.c copy
and diffstat
usr/include/sys/elf32.h | 4
usr/include/sys/elf64.h | 4
usr/include/sys/elfcommon.h | 10 ++
usr/klibc/socketcalls/.gitignore | 1
usr/utils/Kbuild | 4
usr/utils/insmod.c | 140 -----------------------------
6 files changed, 20 insertions(+), 143 deletions(-)
--
maks
commit fbf8aa559d25685eea12248c76bcc983c68306b2
Author: maximilian attems <max at stro.at>
Date: Sat Sep 22 23:06:05 2007 +0200
[klibc] remove local insmod.c copy
we want to compile latest module-init-tools against klibc.
insmod is not used by kinit.
Signed-off-by: maximilian attems <max at stro.at>
diff --git a/usr/utils/Kbuild b/usr/utils/Kbuild
index 09157a8..5b6dc28 100644
--- a/usr/utils/Kbuild
+++ b/usr/utils/Kbuild
@@ -4,7 +4,7 @@
progs := chroot dd mkdir mkfifo mknod mount pivot_root umount
progs += true false sleep ln nuke minips cat
-progs += insmod uname halt kill readlink cpio sync dmesg
+progs += uname halt kill readlink cpio sync dmesg
static-y := $(addprefix static/, $(progs))
shared-y := $(addprefix shared/, $(progs))
@@ -42,8 +42,6 @@ static/minips-y := minips.o
shared/minips-y := minips.o
static/cat-y := cat.o
shared/cat-y := cat.o
-static/insmod-y := insmod.o
-shared/insmod-y := insmod.o
static/uname-y := uname.o
shared/uname-y := uname.o
static/halt-y := halt.o
diff --git a/usr/utils/insmod.c b/usr/utils/insmod.c
deleted file mode 100644
index 47b5880..0000000
--- a/usr/utils/insmod.c
+++ /dev/null
@@ -1,140 +0,0 @@
-/* insmod.c: insert a module into the kernel.
- Copyright (C) 2001 Rusty Russell.
- Copyright (C) 2002 Rusty Russell, IBM Corporation.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/mman.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <errno.h>
-
-#define streq(a,b) (strcmp((a),(b)) == 0)
-
-/* This really needs to be in a header file... */
-extern long init_module(void *, unsigned long, const char *);
-
-static void print_usage(const char *progname)
-{
- fprintf(stderr, "Usage: %s filename [args]\n", progname);
- exit(1);
-}
-
-/* We use error numbers in a loose translation... */
-static const char *moderror(int err)
-{
- switch (err) {
- case ENOEXEC:
- return "Invalid module format";
- case ENOENT:
- return "Unknown symbol in module";
- case ESRCH:
- return "Module has wrong symbol version";
- case EINVAL:
- return "Invalid parameters";
- default:
- return strerror(err);
- }
-}
-
-static void *grab_file(const char *filename, unsigned long *size)
-{
- unsigned int max = 16384;
- int ret, fd;
- void *buffer = malloc(max);
-
- if (streq(filename, "-"))
- fd = dup(STDIN_FILENO);
- else
- fd = open(filename, O_RDONLY, 0);
-
- if (fd < 0)
- return NULL;
-
- *size = 0;
- while ((ret = read(fd, buffer + *size, max - *size)) > 0) {
- *size += ret;
- if (*size == max)
- buffer = realloc(buffer, max *= 2);
- }
- if (ret < 0) {
- free(buffer);
- buffer = NULL;
- }
- close(fd);
- return buffer;
-}
-
-int main(int argc, char *argv[])
-{
- int i;
- long int ret;
- unsigned long len;
- void *file;
- char *filename, *options = strdup("");
- char *progname = argv[0];
-
- if (argv[1] && (streq(argv[1], "--version") ||
streq(argv[1], "-V"))) {
- puts("klibc insmod");
- exit(0);
- }
-
- /* Ignore old options, for backwards compat. */
- while (argv[1] && (streq(argv[1], "-p")
- || streq(argv[1], "-s")
- || streq(argv[1], "-f"))) {
- argv++;
- argc--;
- }
-
- filename = argv[1];
- if (!filename)
- print_usage(progname);
-
- /* Rest is options */
- for (i = 2; i < argc; i++) {
- options = realloc(options,
- strlen(options) + 2 + strlen(argv[i]) + 2);
- /* Spaces handled by "" pairs, but no way of escaping
- quotes */
- if (strchr(argv[i], ' '))
- strcat(options, "\"");
- strcat(options, argv[i]);
- if (strchr(argv[i], ' '))
- strcat(options, "\"");
- strcat(options, " ");
- }
-
- file = grab_file(filename, &len);
- if (!file) {
- fprintf(stderr, "insmod: can't read '%s': %s\n",
- filename, strerror(errno));
- exit(1);
- }
-
- ret = init_module(file, len, options);
- if (ret != 0) {
- fprintf(stderr, "insmod: error inserting '%s': %li %s\n",
- filename, ret, moderror(errno));
- exit(1);
- }
- exit(0);
-}
commit 3b52c5b3b2ee035c4d72fc5d8fbe436115d3e3e6
Author: maximilian attems <max at stro.at>
Date: Sat Sep 22 22:58:25 2007 +0200
[klibc] elf.h add support for st_info field
module-init-tools uses STB_WEAK and accesses it.
Signed-off-by: maximilian attems <max at stro.at>
diff --git a/usr/include/sys/elf32.h b/usr/include/sys/elf32.h
index e4df8ce..6da2ddb 100644
--- a/usr/include/sys/elf32.h
+++ b/usr/include/sys/elf32.h
@@ -110,4 +110,8 @@ typedef struct elf32_note {
Elf32_Word n_type; /* Content type */
} Elf32_Nhdr;
+/* How to extract and insert information held in the st_info field. */
+#define ELF32_ST_BIND(val) (((unsigned char) (val)) >> 4)
+#define ELF32_ST_TYPE(val) ((val) & 0xf)
+
#endif /* _SYS_ELF32_H */
diff --git a/usr/include/sys/elf64.h b/usr/include/sys/elf64.h
index 0b486ac..877b7cd 100644
--- a/usr/include/sys/elf64.h
+++ b/usr/include/sys/elf64.h
@@ -110,4 +110,8 @@ typedef struct elf64_note {
Elf64_Word n_type; /* Content type */
} Elf64_Nhdr;
+/* Both Elf32_Sym and Elf64_Sym use the same one-byte st_info field. */
+#define ELF64_ST_BIND(val) ELF32_ST_BIND (val)
+#define ELF64_ST_TYPE(val) ELF32_ST_TYPE (val)
+
#endif /* _SYS_ELF64_H */
diff --git a/usr/include/sys/elfcommon.h b/usr/include/sys/elfcommon.h
index 0d81db5..ad5e459 100644
--- a/usr/include/sys/elfcommon.h
+++ b/usr/include/sys/elfcommon.h
@@ -184,4 +184,14 @@
#define ELFOSABI_NONE 0
#define ELFOSABI_LINUX 3
+/* Legal values for ST_BIND subfield of st_info (symbol binding). */
+#define STB_LOCAL 0 /* Local symbol */
+#define STB_GLOBAL 1 /* Global symbol */
+#define STB_WEAK 2 /* Weak symbol */
+#define STB_NUM 3 /* Number of defined types. */
+#define STB_LOOS 10 /* Start of OS-specific */
+#define STB_HIOS 12 /* End of OS-specific */
+#define STB_LOPROC 13 /* Start of processor-specific */
+#define STB_HIPROC 15 /* End of processor-specific */
+
#endif /* _SYS_ELFCOMMON_H */
commit 8c4bf5fd4c5e0bd85d1d29f489bdb980edf1a489
Author: maximilian attems <max at stro.at>
Date: Fri Sep 21 19:47:31 2007 +0200
[klibc] klibc/socketcalls/.gitignore addition
on !i386 socketcalls generates .c files
Signed-off-by: maximilian attems <max at stro.at>
diff --git a/usr/klibc/socketcalls/.gitignore b/usr/klibc/socketcalls/.gitignore
index 60e5b1d..67da0d1 100644
--- a/usr/klibc/socketcalls/.gitignore
+++ b/usr/klibc/socketcalls/.gitignore
@@ -1,3 +1,4 @@
*.S
+*.c
SOCKETCALLS.i
socketcalls.mk