diff options
-rw-r--r-- | klibc/MCONFIG | 4 | ||||
-rw-r--r-- | klibc/include/klibc/compiler.h | 4 | ||||
-rw-r--r-- | klibc/include/klibc/extern.h | 2 | ||||
-rw-r--r-- | klibc/include/malloc.h | 21 | ||||
-rw-r--r-- | klibc/include/stdlib.h | 6 | ||||
-rw-r--r-- | klibc/include/string.h | 2 | ||||
-rw-r--r-- | klibc/include/sys/inotify.h | 16 | ||||
-rw-r--r-- | klibc/klibc.spec.in | 4 | ||||
-rw-r--r-- | klibc/klibc/SYSCALLS.def | 3 | ||||
-rw-r--r-- | klibc/klibc/execvpe.c | 4 | ||||
-rw-r--r-- | klibc/klibc/strchr.c | 3 | ||||
-rw-r--r-- | klibc/klibc/strrchr.c | 3 | ||||
-rw-r--r-- | klibc/version | 2 |
13 files changed, 64 insertions, 10 deletions
diff --git a/klibc/MCONFIG b/klibc/MCONFIG index 1141b78d47..450e5c7f5c 100644 --- a/klibc/MCONFIG +++ b/klibc/MCONFIG @@ -33,7 +33,7 @@ KRNLOBJ = $(SRCROOT)/linux KLIBCVER = -D__KLIBC__=$(shell cut -d. -f1 < $(SRCROOT)/version) \ -D__KLIBC_MINOR__=$(shell cut -d. -f2 < $(SRCROOT)/version) -ARCH = $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/) +ARCH = $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/ -e s/parisc.*/parisc/) CC = $(CROSS)gcc LD = $(CROSS)ld KLIBSRC = $(SRCROOT)/klibc @@ -42,7 +42,7 @@ INCLUDE = -I$(SRCROOT)/include/arch/$(ARCH) \ -I$(SRCROOT)/include/bits$(BITSIZE) \ -I$(SRCROOT)/include \ -I$(KRNLOBJ)/include -I$(KRNLOBJ)/include2 -I$(KRNLSRC)/include -REQFLAGS = $(ARCHREQFLAGS) $(KLIBCVER) -nostdinc -iwithprefix include \ +REQFLAGS = $(ARCHREQFLAGS) $(KLIBCVER) -nostdlib -nostdinc -iwithprefix include \ $(INCLUDE) LDFLAGS = AR = $(CROSS)ar diff --git a/klibc/include/klibc/compiler.h b/klibc/include/klibc/compiler.h index ee697adf08..7ff6ff7d51 100644 --- a/klibc/include/klibc/compiler.h +++ b/klibc/include/klibc/compiler.h @@ -116,4 +116,8 @@ # define __bitwise #endif +/* Compiler pragma to make an alias symbol */ +#define __ALIAS(__t, __f, __p, __a) \ + __t __f __p __attribute__((weak, alias(#__a))); + #endif diff --git a/klibc/include/klibc/extern.h b/klibc/include/klibc/extern.h index f9c3467211..8a73d19358 100644 --- a/klibc/include/klibc/extern.h +++ b/klibc/include/klibc/extern.h @@ -11,4 +11,6 @@ #define __extern extern #endif +#define __alias(x) __attribute__((weak, alias(x))) + #endif /* _KLIBC_EXTERN_H */ diff --git a/klibc/include/malloc.h b/klibc/include/malloc.h new file mode 100644 index 0000000000..5beca8d068 --- /dev/null +++ b/klibc/include/malloc.h @@ -0,0 +1,21 @@ +/* + * malloc.h + * + * Apparently people haven't caught on to use <stdlib.h>, which is the + * standard place for this crap since the 1980's... + */ + +#ifndef _MALLOC_H +#define _MALLOC_H + +#include <klibc/extern.h> +#include <klibc/compiler.h> +#include <stddef.h> + +__extern void free(void *); + +__extern __mallocfunc void *malloc(size_t); +__extern __mallocfunc void *calloc(size_t, size_t); +__extern __mallocfunc void *realloc(void *, size_t); + +#endif /* _MALLOC_H */ diff --git a/klibc/include/stdlib.h b/klibc/include/stdlib.h index 54d45043f7..17efc30e5a 100644 --- a/klibc/include/stdlib.h +++ b/klibc/include/stdlib.h @@ -9,6 +9,8 @@ #include <klibc/compiler.h> #include <stddef.h> +#include <malloc.h> + #define EXIT_FAILURE 1 #define EXIT_SUCCESS 0 @@ -28,7 +30,6 @@ __extern int atoi(const char *); __extern long atol(const char *); __extern long long atoll(const char *); __extern __noreturn exit(int); -__extern void free(void *); static __inline__ long labs(long __n) { return (__n < 0L) ? -__n : __n; } @@ -37,9 +38,6 @@ static __inline__ long long llabs(long long __n) { return (__n < 0LL) ? -__n : __n; } -__extern __mallocfunc void *malloc(size_t); -__extern __mallocfunc void *calloc(size_t, size_t); -__extern __mallocfunc void *realloc(void *, size_t); __extern long strtol(const char *, char **, int); __extern long long strtoll(const char *, char **, int); __extern unsigned long strtoul(const char *, char **, int); diff --git a/klibc/include/string.h b/klibc/include/string.h index 5608a3c963..319be4eb85 100644 --- a/klibc/include/string.h +++ b/klibc/include/string.h @@ -21,7 +21,9 @@ __extern int strcasecmp(const char *, const char *); __extern int strncasecmp(const char *, const char *, size_t); __extern char *strcat(char *, const char *); __extern char *strchr(const char *, int); +__extern char *index(const char *, int); __extern char *strrchr(const char *, int); +__extern char *rindex(const char *, int); __extern int strcmp(const char *, const char *); __extern char *strcpy(char *, const char *); __extern size_t strcspn(const char *, const char *); diff --git a/klibc/include/sys/inotify.h b/klibc/include/sys/inotify.h new file mode 100644 index 0000000000..74fc714190 --- /dev/null +++ b/klibc/include/sys/inotify.h @@ -0,0 +1,16 @@ +/* + * sys/inotify.h + */ + +#ifndef _SYS_INOTIFY_H +#define _SYS_INOTIFY_H + +#include <sys/types.h> +#include <linux/inotify.h> +#include <klibc/extern.h> + +__extern int inotify_init(void); +__extern int inotify_add_watch(int, const char *, __u32); +__extern int inotify_rm_watch(int, __u32); + +#endif /* _SYS_INOTIFY_H */ diff --git a/klibc/klibc.spec.in b/klibc/klibc.spec.in index cab496b917..eef5dbf9d3 100644 --- a/klibc/klibc.spec.in +++ b/klibc/klibc.spec.in @@ -7,7 +7,7 @@ Group: Development/Libraries URL: http://www.zytor.com/mailman/listinfo/klibc Source: http://www.kernel.org/pub/linux/libs/klibc-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot -BuildRequires: kernel >= 2.6.0 +BuildRequires: kernel >= 2.6.0, kernel-devel Packager: H. Peter Anvin <hpa@zytor.com> Prefix: /usr Vendor: Starving Linux Artists @@ -44,7 +44,7 @@ embedded systems. %prep %setup -q -cp -dRs /lib/modules/`uname -r`/build ./linux +cp -dRs /lib/modules/`uname -r`/build/ ./linux # Shouldn't need this when getting the build tree from /lib/modules # make -C linux defconfig ARCH=%{_target_cpu} # make -C linux prepare ARCH=%{_target_cpu} diff --git a/klibc/klibc/SYSCALLS.def b/klibc/klibc/SYSCALLS.def index 11d8c9a47e..b78919b134 100644 --- a/klibc/klibc/SYSCALLS.def +++ b/klibc/klibc/SYSCALLS.def @@ -114,6 +114,9 @@ int lchown32,lchown::lchown(const char *, uid_t, gid_t) int getcwd::__getcwd(char *, size_t) <?> int utime(const char *, const struct utimbuf *) <?> int utimes(const char *, const struct timeval *) +<?> int inotify_init(void) +<?> int inotify_add_watch(int, const char *, __u32) +<?> int inotify_rm_watch(int, __u32) ; ; I/O operations diff --git a/klibc/klibc/execvpe.c b/klibc/klibc/execvpe.c index afd791ab43..fcd5b6fd4a 100644 --- a/klibc/klibc/execvpe.c +++ b/klibc/klibc/execvpe.c @@ -9,7 +9,9 @@ * Since execlpe() and execvpe() aren't in POSIX, nor in glibc, * I have followed QNX precedent in the implementation of the PATH: * the PATH that is used is the one in the current environment, not - * in the new environment. + * in the new environment. Otherwise it would be impossible to pass + * a different PATH to the new process than the one one would want to + * use to search. */ #include <errno.h> diff --git a/klibc/klibc/strchr.c b/klibc/klibc/strchr.c index 192f83600c..f657095c6b 100644 --- a/klibc/klibc/strchr.c +++ b/klibc/klibc/strchr.c @@ -3,6 +3,7 @@ */ #include <string.h> +#include <klibc/compiler.h> char *strchr(const char *s, int c) { @@ -14,3 +15,5 @@ char *strchr(const char *s, int c) return (char *)s; } + +__ALIAS(char *, index, (const char *, int), strchr) diff --git a/klibc/klibc/strrchr.c b/klibc/klibc/strrchr.c index 3b42464059..5a0cbe386e 100644 --- a/klibc/klibc/strrchr.c +++ b/klibc/klibc/strrchr.c @@ -3,6 +3,7 @@ */ #include <string.h> +#include <klibc/compiler.h> char *strrchr(const char *s, int c) { @@ -16,3 +17,5 @@ char *strrchr(const char *s, int c) return (char *)found; } + +__ALIAS(char *, rindex, (const char *, int), strrchr) diff --git a/klibc/version b/klibc/version index 5b09c67c20..45a1b3f445 100644 --- a/klibc/version +++ b/klibc/version @@ -1 +1 @@ -1.0.14 +1.1.2 |