From 1e959a4b05f93bf31d0603a027b50cb148ef7e90 Mon Sep 17 00:00:00 2001 From: "greg@kroah.com" Date: Wed, 22 Oct 2003 23:48:55 -0700 Subject: [PATCH] [PATCH] klibc specific tweaks --- Makefile.klibc | 48 +++++++++++------------------------- klibc.c | 33 +++++++++++++++++++++++++ klibc/klibc/include/signal.h | 2 ++ libsysfs/sysfs_dir.c | 4 +++ libsysfs/sysfs_utils.c | 8 ++++++ namedev.c | 2 ++ udev-add.c | 9 ++++++- 7 files changed, 72 insertions(+), 34 deletions(-) create mode 100644 klibc.c diff --git a/Makefile.klibc b/Makefile.klibc index d679ba90..ccc862dd 100644 --- a/Makefile.klibc +++ b/Makefile.klibc @@ -106,7 +106,7 @@ endif # If we are using our version of klibc, then we need to build and link it. # Otherwise, use glibc and link statically. ifeq ($(strip $(KLIBC)),true) - KLIBC_DIR = /home/greg/src/klibc/klibc/klibc + KLIBC_DIR = klibc/klibc INCLUDE_DIR := $(KLIBC_DIR)/include # arch specific objects LIBGCC = $(shell $(CC) --print-libgcc) @@ -120,7 +120,7 @@ ifeq ($(strip $(KLIBC)),true) # LIB_OBJS = $(GCC_LIB) LIBC = $(ARCH_LIB_OBJS) $(LIB_OBJS) - CFLAGS += -nostdinc -I$(INCLUDE_DIR) -I$(INCLUDE_DIR)/bits32 -I/home/greg/linux/linux-2.5/include -I$(GCCINCDIR) + CFLAGS += -nostdinc -I$(INCLUDE_DIR) -I$(INCLUDE_DIR)/bits32 -I/home/greg/linux/linux-2.5/include -I$(GCCINCDIR) -D__KLIBC__ LDFLAGS = # LDFLAGS = --static --nostdlib -nostartfiles else @@ -130,15 +130,21 @@ else LDFLAGS = --static endif -LIB=libsysfs - all: $(LIBC) $(ROOT) $(ARCH_LIB_OBJS) : $(MAKE) -C klibc -LIBSYSFS = libsysfs/libsysfs.a -TDB = tdb/tdb.o tdb/spinlock.o +TDB = tdb/tdb.o \ + tdb/spinlock.o + +SYSFS = libsysfs/sysfs_bus.o \ + libsysfs/sysfs_class.o \ + libsysfs/sysfs_device.o \ + libsysfs/sysfs_dir.o \ + libsysfs/sysfs_driver.o \ + libsysfs/sysfs_utils.o \ + libsysfs/dlist.o OBJS = udev.o \ udev-add.o \ @@ -146,14 +152,10 @@ OBJS = udev.o \ udevdb.o \ logging.o \ namedev.o \ + klibc.o \ + $(SYSFS) \ $(TDB) -libsysfs/libsysfs.a: - $(MAKE) -C libsysfs - -tdb/tdb.o: - $(MAKE) -C tdb - # header files automatically generated GEN_HEADERS = udev_version.h @@ -165,7 +167,7 @@ udev_version.h: $(ROOT): $(GEN_HEADERS) $(OBJS) -# $(CC) $(LDFLAGS) -o $(ROOT) $(OBJS) $(LIB_OBJS) $(ARCH_LIB_OBJS) + $(CC) $(LDFLAGS) -o $(ROOT) $(OBJS) $(LIB_OBJS) $(ARCH_LIB_OBJS) $(LD) $(LDFLAGS) -o $(ROOT) $(KLIBC_DIR)/crt0.o $(OBJS) $(LIB_OBJS) $(ARCH_LIB_OBJS) $(STRIPCMD) $(ROOT) @@ -174,24 +176,4 @@ clean: | xargs rm -f -rm -f core $(ROOT) $(GEN_HEADERS) $(MAKE) -C klibc clean - $(MAKE) -C libsysfs clean - $(MAKE) -C tdb clean -DISTFILES = $(shell find . \( -not -name '.' \) -print | grep -v CVS | grep -v "\.tar\.gz" | grep -v "\/\." | grep -v releases | grep -v BitKeeper | grep -v SCCS | grep -v "\.tdb" | grep -v "test\/sys" | sort ) -DISTDIR := $(RELEASE_NAME) -srcdir = . -release: $(DISTFILES) clean -# @echo $(DISTFILES) - @-rm -rf $(DISTDIR) - @mkdir $(DISTDIR) - @-chmod 777 $(DISTDIR) - @for file in $(DISTFILES); do \ - if test -d $$file; then \ - mkdir $(DISTDIR)/$$file; \ - else \ - cp -p $$file $(DISTDIR)/$$file; \ - fi; \ - done - @tar -c $(DISTDIR) | gzip -9 > $(RELEASE_NAME).tar.gz - @rm -rf $(DISTDIR) - @echo "Built $(RELEASE_NAME).tar.gz" diff --git a/klibc.c b/klibc.c new file mode 100644 index 00000000..a5d5d594 --- /dev/null +++ b/klibc.c @@ -0,0 +1,33 @@ + +#ifdef __KLIBC__ + +#include +#include +#include + +char *strerror(int errnum) +{ + return "some error"; +} + +int strcasecmp(const char *s1, const char *s2) +{ + char *n1; + char *n2; + int retval; + int i; + + n1 = strdup(s1); + n2 = strdup(s2); + + for (i = 0; i < strlen(n1); ++i) + n1[i] = toupper(n1[i]); + for (i = 0; i < strlen(n2); ++i) + n2[i] = toupper(n2[i]); + retval = strcmp(n1, n2); + free(n1); + free(n2); + return retval; +} + +#endif diff --git a/klibc/klibc/include/signal.h b/klibc/klibc/include/signal.h index ffd2beba..e383755b 100644 --- a/klibc/klibc/include/signal.h +++ b/klibc/klibc/include/signal.h @@ -22,6 +22,8 @@ # define NSIG _NSIG #endif +typedef int sig_atomic_t; + __extern const char * const sys_siglist[]; /* This assumes sigset_t is either an unsigned long or an array of such, diff --git a/libsysfs/sysfs_dir.c b/libsysfs/sysfs_dir.c index ff2edf46..e983d0ef 100644 --- a/libsysfs/sysfs_dir.c +++ b/libsysfs/sysfs_dir.c @@ -266,7 +266,11 @@ int sysfs_read_attribute(struct sysfs_attribute *sysattr) sysattr->path); return -1; } +#ifdef __KLIBC__ + pgsize = 0x4000; +#else pgsize = getpagesize(); +#endif fbuf = (unsigned char *)calloc(1, pgsize+1); if (fbuf == NULL) { dprintf("calloc failed\n"); diff --git a/libsysfs/sysfs_utils.c b/libsysfs/sysfs_utils.c index 44753424..f1303cac 100644 --- a/libsysfs/sysfs_utils.c +++ b/libsysfs/sysfs_utils.c @@ -22,6 +22,9 @@ */ #include "libsysfs.h" #include "sysfs.h" +#ifndef __KLIBC__ +#include +#endif /** * sysfs_get_mnt_path: Gets the mount point for specified filesystem. @@ -33,6 +36,10 @@ static int sysfs_get_fs_mnt_path(const unsigned char *fs_type, unsigned char *mnt_path, size_t len) { +#ifdef __KLIBC__ + strcpy(mnt_path, "/sys"); + return 0; +#else FILE *mnt; struct mntent *mntent; int ret = 0; @@ -66,6 +73,7 @@ static int sysfs_get_fs_mnt_path(const unsigned char *fs_type, ret = -1; } return ret; +#endif } /* diff --git a/namedev.c b/namedev.c index 22ec6ace..6d88b5d4 100644 --- a/namedev.c +++ b/namedev.c @@ -527,10 +527,12 @@ static int exec_callout(struct config_device *dev, char *value, int len) retval = -1; } +#ifndef __KLIBC__ if (!WIFEXITED(status) || (WEXITSTATUS(status) != 0)) { dbg("callout program status 0x%x", status); retval = -1; } +#endif } return retval; } diff --git a/udev-add.c b/udev-add.c index 8c63214a..7a89076a 100644 --- a/udev-add.c +++ b/udev-add.c @@ -73,10 +73,17 @@ static int create_node(struct udevice *dev) { char filename[255]; int retval = 0; + dev_t res; strncpy(filename, udev_root, sizeof(filename)); strncat(filename, dev->name, sizeof(filename)); +#ifdef __KLIBC__ + res = (dev->major << 8) | (dev->minor); +#else + res = makedev(dev->major, dev->minor); +#endif + switch (dev->type) { case 'b': dev->mode |= S_IFBLK; @@ -94,7 +101,7 @@ static int create_node(struct udevice *dev) } dbg("mknod(%s, %#o, %u, %u)", filename, dev->mode, dev->major, dev->minor); - retval = mknod(filename, dev->mode, makedev(dev->major, dev->minor)); + retval = mknod(filename, dev->mode, res); if (retval) dbg("mknod(%s, %#o, %u, %u) failed with error '%s'", filename, dev->mode, dev->major, dev->minor, strerror(errno)); -- 2.39.5