[klibc] [git patch] m-i-t support, ipconfig fix

maximilian attems max at stro.at
Mon Dec 10 07:57:01 PST 2007


hello hpa,

please pull latest
git pull git://git.debian.org/~maks/klibc.git maks

forgot to ask to keep git port open for our boxes at university,
thus moved my tree over too the alioth box.

for the changes
maximilian attems (4):
      [klibc] klibc/socketcalls/.gitignore addition
      [klibc] elf.h add support for st_info field
      [klibc] remove local insmod.c copy
      [klibc] ipconfig fix DHCPREQUEST per RFC 2131

the diffstat is
 usr/include/sys/elf32.h          |    4 +
 usr/include/sys/elf64.h          |    4 +
 usr/include/sys/elfcommon.h      |   10 +++
 usr/kinit/ipconfig/dhcp_proto.c  |    2 +-
 usr/klibc/socketcalls/.gitignore |    1 +
 usr/utils/Kbuild                 |    4 +-
 usr/utils/insmod.c               |  140 --------------------------------------
 7 files changed, 21 insertions(+), 144 deletions(-)

commit 83cd38f8cc2a04ef6d4ce96de719c993edd7fbfb
Author: maximilian attems <max at stro.at>
Date:   Mon Dec 10 15:52:49 2007 +0100

    [klibc] ipconfig fix DHCPREQUEST per RFC 2131
    
    Ken Simon found that Cisco would drop non frc 2131
    ipconfig DHCPREQUEST packet.
    
    see for all glorious details
    http://marc.info/?l=linux-kernel&m=119697064911348&w=2
    also reported on
    http://bugs.debian.org/432977
    
    Cc: Christian Kern <kernch at in.tum.de>
    Cc: Ken Simon <ninkendo at gmail.com>
    Signed-off-by: maximilian attems <max at stro.at>

diff --git a/usr/kinit/ipconfig/dhcp_proto.c b/usr/kinit/ipconfig/dhcp_proto.c
index a1090f3..8ff1d58 100644
--- a/usr/kinit/ipconfig/dhcp_proto.c
+++ b/usr/kinit/ipconfig/dhcp_proto.c
@@ -161,7 +161,7 @@ static int dhcp_send(struct netdev *dev, struct iovec *vec)
 	bootp.hlen	= dev->hwlen;
 	bootp.xid	= dev->bootp.xid;
 	bootp.ciaddr	= dev->ip_addr;
-	bootp.giaddr	= dev->bootp.gateway;
+	bootp.giaddr	= INADDR_ANY;
 	bootp.secs	= htons(time(NULL) - dev->open_time);
 	memcpy(bootp.chaddr, dev->hwaddr, 16);
 

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

-- 
maks



More information about the klibc mailing list