summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--klibc/MCONFIG4
-rw-r--r--klibc/include/klibc/compiler.h4
-rw-r--r--klibc/include/klibc/extern.h2
-rw-r--r--klibc/include/malloc.h21
-rw-r--r--klibc/include/stdlib.h6
-rw-r--r--klibc/include/string.h2
-rw-r--r--klibc/include/sys/inotify.h16
-rw-r--r--klibc/klibc.spec.in4
-rw-r--r--klibc/klibc/SYSCALLS.def3
-rw-r--r--klibc/klibc/execvpe.c4
-rw-r--r--klibc/klibc/strchr.c3
-rw-r--r--klibc/klibc/strrchr.c3
-rw-r--r--klibc/version2
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