diff options
Diffstat (limited to 'main/uclibc')
-rw-r--r-- | main/uclibc/0001-ldd-segfault-fix.patch | 49 | ||||
-rw-r--r-- | main/uclibc/0001-linuxthreads-fixes-from-Will-Newton-will.newton-AT-g.patch | 281 | ||||
-rw-r--r-- | main/uclibc/APKBUILD | 65 | ||||
-rw-r--r-- | main/uclibc/ppoll.patch | 59 | ||||
-rw-r--r-- | main/uclibc/pthread-new-aliasing-fix.diff | 147 | ||||
-rw-r--r-- | main/uclibc/uclibc-0.9.30.1-pthread_getattr_np.patch | 137 | ||||
-rw-r--r-- | main/uclibc/uclibc-0.9.30.1-resolv.patch | 13 | ||||
-rw-r--r-- | main/uclibc/uclibc-fork-hook.diff | 36 | ||||
-rw-r--r-- | main/uclibc/uclibc-i386-floating-stacks.diff | 23 | ||||
-rw-r--r-- | main/uclibc/uclibc-resolv-cname-fix.diff | 16 | ||||
-rw-r--r-- | main/uclibc/uclibcconfig | 246 |
11 files changed, 1072 insertions, 0 deletions
diff --git a/main/uclibc/0001-ldd-segfault-fix.patch b/main/uclibc/0001-ldd-segfault-fix.patch new file mode 100644 index 0000000000..4384fa548c --- /dev/null +++ b/main/uclibc/0001-ldd-segfault-fix.patch @@ -0,0 +1,49 @@ +From f29b6882327573ec4e694c1c852307c957d544b9 Mon Sep 17 00:00:00 2001 +From: Natanael Copa <ncopa@alpinelinux.org> +Date: Tue, 5 May 2009 14:10:42 +0000 +Subject: [PATCH] ldd segfault fix + +Fixes ldd segfault on this testcase: + +extern void _dl_getenv(void); +void foo(void) +{ + printf("foo: %x\n", &_dl_getenv); +} + +linked as -shared +--- + utils/ldd.c | 8 +++++--- + 1 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/utils/ldd.c b/utils/ldd.c +index 1f1dc25..2cd173c 100644 +--- a/utils/ldd.c ++++ b/utils/ldd.c +@@ -576,18 +576,20 @@ static struct library *find_elf_interpreter(ElfW(Ehdr) *ehdr) + } + newlib->name = NULL; + newlib->path = NULL; +- return NULL; ++ break; + } + } +- if (newlib == NULL) ++ if (newlib == NULL) { + newlib = malloc(sizeof(struct library)); ++ if (newlib) ++ newlib->next = NULL; ++ } + if (!newlib) + return NULL; + newlib->name = malloc(strlen(s) + 1); + strcpy(newlib->name, s); + newlib->path = strdup(newlib->name); + newlib->resolved = 1; +- newlib->next = NULL; + + #if 0 + /*printf("find_elf_interpreter is adding '%s' to '%s'\n", newlib->name, newlib->path); */ +-- +1.6.2.3 + diff --git a/main/uclibc/0001-linuxthreads-fixes-from-Will-Newton-will.newton-AT-g.patch b/main/uclibc/0001-linuxthreads-fixes-from-Will-Newton-will.newton-AT-g.patch new file mode 100644 index 0000000000..6b54d25f28 --- /dev/null +++ b/main/uclibc/0001-linuxthreads-fixes-from-Will-Newton-will.newton-AT-g.patch @@ -0,0 +1,281 @@ +From 52c9ef85a65f4dc25a4d1ff79c0fba1ed53ef43a Mon Sep 17 00:00:00 2001 +From: Denis Vlasenko <vda.linux@googlemail.com> +Date: Thu, 12 Mar 2009 20:56:59 +0000 +Subject: [PATCH 01/39] linuxthreads fixes from Will Newton (will.newton AT gmail.com): + * share Sys V semaphores in order to get appropriate SEM_UNDO semantics. + * correct guardaddr in pthread_free() for TLS case + * move spinlock unlocking before restart() + * When exit was called from a signal handler, the restart + from the manager processing the exit request instead restarted the thread + in pthread_cond_timedwait. + (see http://sources.redhat.com/ml/libc-ports/2006-05/msg00000.html) + +--- + libpthread/linuxthreads/descr.h | 2 -- + libpthread/linuxthreads/manager.c | 15 ++++++++------- + libpthread/linuxthreads/pthread.c | 26 +++++++++++++++----------- + libpthread/linuxthreads/specific.c | 10 ++++++---- + libpthread/linuxthreads/spinlock.c | 14 +++++++++++++- + libpthread/linuxthreads/spinlock.h | 6 ++++-- + libpthread/linuxthreads/sysdeps/i386/tls.h | 2 -- + 7 files changed, 46 insertions(+), 29 deletions(-) + +diff --git a/libpthread/linuxthreads/descr.h b/libpthread/linuxthreads/descr.h +index 24ec30b..47a9acd 100644 +--- a/libpthread/linuxthreads/descr.h ++++ b/libpthread/linuxthreads/descr.h +@@ -123,9 +123,7 @@ struct _pthread_descr_struct + union dtv *dtvp; + pthread_descr self; /* Pointer to this structure */ + int multiple_threads; +-# ifdef NEED_DL_SYSINFO + uintptr_t sysinfo; +-# endif + } data; + void *__padding[16]; + } p_header; +diff --git a/libpthread/linuxthreads/manager.c b/libpthread/linuxthreads/manager.c +index be1e8d2..b068d6c 100644 +--- a/libpthread/linuxthreads/manager.c ++++ b/libpthread/linuxthreads/manager.c +@@ -742,15 +742,15 @@ static int pthread_handle_create(pthread_t *thread, const pthread_attr_t *attr, + pid = __clone2(pthread_start_thread_event, + (void **)new_thread_bottom, + (char *)stack_addr - new_thread_bottom, +- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | ++ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM | + __pthread_sig_cancel, new_thread); + #elif _STACK_GROWS_UP + pid = __clone(pthread_start_thread_event, (void *) new_thread_bottom, +- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | ++ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM | + __pthread_sig_cancel, new_thread); + #else + pid = __clone(pthread_start_thread_event, stack_addr, +- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | ++ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM | + __pthread_sig_cancel, new_thread); + #endif + saved_errno = errno; +@@ -783,15 +783,15 @@ static int pthread_handle_create(pthread_t *thread, const pthread_attr_t *attr, + pid = __clone2(pthread_start_thread, + (void **)new_thread_bottom, + (char *)stack_addr - new_thread_bottom, +- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | ++ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM | + __pthread_sig_cancel, new_thread); + #elif _STACK_GROWS_UP + pid = __clone(pthread_start_thread, (void *) new_thread_bottom, +- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | ++ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM | + __pthread_sig_cancel, new_thread); + #else + pid = __clone(pthread_start_thread, stack_addr, +- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | ++ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM | + __pthread_sig_cancel, new_thread); + #endif /* !NEED_SEPARATE_REGISTER_STACK */ + saved_errno = errno; +@@ -892,10 +892,11 @@ static void pthread_free(pthread_descr th) + #ifdef _STACK_GROWS_UP + # ifdef USE_TLS + size_t stacksize = guardaddr - th->p_stackaddr; ++ guardaddr = th->p_stackaddr; + # else + size_t stacksize = guardaddr - (char *)th; +-# endif + guardaddr = (char *)th; ++# endif + #else + /* Guardaddr is always set, even if guardsize is 0. This allows + us to compute everything else. */ +diff --git a/libpthread/linuxthreads/pthread.c b/libpthread/linuxthreads/pthread.c +index 91333f2..4d1d906 100644 +--- a/libpthread/linuxthreads/pthread.c ++++ b/libpthread/linuxthreads/pthread.c +@@ -740,17 +740,17 @@ int __pthread_initialize_manager(void) + pid = __clone2(__pthread_manager_event, + (void **) __pthread_manager_thread_bos, + THREAD_MANAGER_STACK_SIZE, +- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND, ++ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM, + mgr); + #elif _STACK_GROWS_UP + pid = __clone(__pthread_manager_event, + (void **) __pthread_manager_thread_bos, +- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND, ++ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM, + mgr); + #else + pid = __clone(__pthread_manager_event, + (void **) __pthread_manager_thread_tos, +- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND, ++ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM, + mgr); + #endif + +@@ -780,13 +780,13 @@ int __pthread_initialize_manager(void) + #ifdef NEED_SEPARATE_REGISTER_STACK + pid = __clone2(__pthread_manager, (void **) __pthread_manager_thread_bos, + THREAD_MANAGER_STACK_SIZE, +- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND, mgr); ++ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM, mgr); + #elif _STACK_GROWS_UP + pid = __clone(__pthread_manager, (void **) __pthread_manager_thread_bos, +- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND, mgr); ++ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM, mgr); + #else + pid = __clone(__pthread_manager, (void **) __pthread_manager_thread_tos, +- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND, mgr); ++ CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_SYSVSEM, mgr); + #endif + } + if (__builtin_expect (pid, 0) == -1) { +@@ -972,6 +972,10 @@ static void pthread_onexit_process(int retcode, void *arg) + struct pthread_request request; + pthread_descr self = thread_self(); + ++ /* Make sure we come back here after suspend(), in case we entered ++ from a signal handler. */ ++ THREAD_SETMEM(self, p_signal_jmp, NULL); ++ + request.req_thread = self; + request.req_kind = REQ_PROCESS_EXIT; + request.req_args.exit.code = retcode; +@@ -1201,13 +1205,13 @@ void __pthread_wait_for_restart_signal(pthread_descr self) + + void __pthread_restart_old(pthread_descr th) + { +- if (atomic_increment(&th->p_resume_count) == -1) ++ if (pthread_atomic_increment(&th->p_resume_count) == -1) + kill(th->p_pid, __pthread_sig_restart); + } + + void __pthread_suspend_old(pthread_descr self) + { +- if (atomic_decrement(&self->p_resume_count) <= 0) ++ if (pthread_atomic_decrement(&self->p_resume_count) <= 0) + __pthread_wait_for_restart_signal(self); + } + +@@ -1218,7 +1222,7 @@ __pthread_timedsuspend_old(pthread_descr self, const struct timespec *abstime) + int was_signalled = 0; + sigjmp_buf jmpbuf; + +- if (atomic_decrement(&self->p_resume_count) == 0) { ++ if (pthread_atomic_decrement(&self->p_resume_count) == 0) { + /* Set up a longjmp handler for the restart signal, unblock + the signal and sleep. */ + +@@ -1275,9 +1279,9 @@ __pthread_timedsuspend_old(pthread_descr self, const struct timespec *abstime) + being delivered. */ + + if (!was_signalled) { +- if (atomic_increment(&self->p_resume_count) != -1) { ++ if (pthread_atomic_increment(&self->p_resume_count) != -1) { + __pthread_wait_for_restart_signal(self); +- atomic_decrement(&self->p_resume_count); /* should be zero now! */ ++ pthread_atomic_decrement(&self->p_resume_count); /* should be zero now! */ + /* woke spontaneously and consumed restart signal */ + return 1; + } +diff --git a/libpthread/linuxthreads/specific.c b/libpthread/linuxthreads/specific.c +index 92eec3d..764bf1e 100644 +--- a/libpthread/linuxthreads/specific.c ++++ b/libpthread/linuxthreads/specific.c +@@ -104,13 +104,14 @@ int pthread_key_delete(pthread_key_t key) + that if the key is reallocated later by pthread_key_create, its + associated values will be NULL in all threads. + +- If no threads have been created yet, clear it just in the +- current thread. */ ++ If no threads have been created yet, or if we are exiting, clear ++ it just in the current thread. */ + + struct pthread_key_delete_helper_args args; + args.idx1st = key / PTHREAD_KEY_2NDLEVEL_SIZE; + args.idx2nd = key % PTHREAD_KEY_2NDLEVEL_SIZE; +- if (__pthread_manager_request != -1) ++ if (__pthread_manager_request != -1 ++ && !(__builtin_expect (__pthread_exit_requested, 0))) + { + struct pthread_request request; + +@@ -203,8 +204,9 @@ void __pthread_destroy_specifics() + __pthread_lock(THREAD_GETMEM(self, p_lock), self); + for (i = 0; i < PTHREAD_KEY_1STLEVEL_SIZE; i++) { + if (THREAD_GETMEM_NC(self, p_specific[i]) != NULL) { +- free(THREAD_GETMEM_NC(self, p_specific[i])); ++ void *p = THREAD_GETMEM_NC(self, p_specific[i]); + THREAD_SETMEM_NC(self, p_specific[i], NULL); ++ free(p); + } + } + __pthread_unlock(THREAD_GETMEM(self, p_lock)); +diff --git a/libpthread/linuxthreads/spinlock.c b/libpthread/linuxthreads/spinlock.c +index f325402..f0cf19c 100644 +--- a/libpthread/linuxthreads/spinlock.c ++++ b/libpthread/linuxthreads/spinlock.c +@@ -637,8 +637,20 @@ void __pthread_alt_unlock(struct _pthread_fastlock *lock) + #if defined HAS_COMPARE_AND_SWAP + wait_node_dequeue(pp_head, pp_max_prio, p_max_prio); + #endif ++ ++ /* Release the spinlock *before* restarting. */ ++#if defined TEST_FOR_COMPARE_AND_SWAP ++ if (!__pthread_has_cas) ++#endif ++#if !defined HAS_COMPARE_AND_SWAP || defined TEST_FOR_COMPARE_AND_SWAP ++ { ++ __pthread_release(&lock->__spinlock); ++ } ++#endif ++ + restart(p_max_prio->thr); +- break; ++ ++ return; + } + } + +diff --git a/libpthread/linuxthreads/spinlock.h b/libpthread/linuxthreads/spinlock.h +index 210ead4..2a3c227 100644 +--- a/libpthread/linuxthreads/spinlock.h ++++ b/libpthread/linuxthreads/spinlock.h +@@ -172,7 +172,8 @@ static __inline__ int __pthread_alt_trylock (struct _pthread_fastlock * lock) + + /* Operations on pthread_atomic, which is defined in internals.h */ + +-static __inline__ long atomic_increment(struct pthread_atomic *pa) ++static __inline__ long ++pthread_atomic_increment (struct pthread_atomic *pa) + { + long oldval; + +@@ -184,7 +185,8 @@ static __inline__ long atomic_increment(struct pthread_atomic *pa) + } + + +-static __inline__ long atomic_decrement(struct pthread_atomic *pa) ++static __inline__ long ++pthread_atomic_decrement (struct pthread_atomic *pa) + { + long oldval; + +diff --git a/libpthread/linuxthreads/sysdeps/i386/tls.h b/libpthread/linuxthreads/sysdeps/i386/tls.h +index 2abd3a0..4c9b680 100644 +--- a/libpthread/linuxthreads/sysdeps/i386/tls.h ++++ b/libpthread/linuxthreads/sysdeps/i386/tls.h +@@ -46,9 +46,7 @@ typedef struct + dtv_t *dtv; + void *self; /* Pointer to the thread descriptor. */ + int multiple_threads; +-#ifdef NEED_DL_SYSINFO + uintptr_t sysinfo; +-#endif + } tcbhead_t; + + #else /* __ASSEMBLER__ */ +-- +1.6.3.2 + diff --git a/main/uclibc/APKBUILD b/main/uclibc/APKBUILD new file mode 100644 index 0000000000..22914f15a6 --- /dev/null +++ b/main/uclibc/APKBUILD @@ -0,0 +1,65 @@ +# Maintainer: Natanael Copa <ncopa@alpinelinux.org> +pkgname=uclibc +pkgver=0.9.30.1 +pkgrel=11 +pkgdesc="C library for developing embedded Linux systems" +url=http://uclibc.org +license="LGPL-2" +_mynamever=uClibc-$pkgver + +subpackages="$pkgname-dev" +depends_dev="linux-headers" + +source="http://uclibc.org/downloads/$_mynamever.tar.bz2 + $pkgname-0.9.30.1-resolv.patch + uclibc-0.9.30.1-pthread_getattr_np.patch + 0001-ldd-segfault-fix.patch + 0001-linuxthreads-fixes-from-Will-Newton-will.newton-AT-g.patch + pthread-new-aliasing-fix.diff + uclibc-resolv-cname-fix.diff + uclibc-i386-floating-stacks.diff + ppoll.patch + uclibc-fork-hook.diff + uclibcconfig + " + +_prepare() { + local i gcc_major + cd "$srcdir/$_mynamever/" + # patches goes here + for i in ../*.patch ../*.diff; do + msg "Applying $i..." + patch -p1 < $i || return 1 + done +} + +_compile() { + cd "$srcdir/$_mynamever/" + cp ../uclibcconfig .config + make silentoldconfig + # this is a hack to get uclibc-i386-floating-stacks.diff working + touch libc/sysdeps/linux/i386/sysdep.h + make || return 1 +} + +_install() { + cd "$srcdir/$_mynamever/" + make install DESTDIR="$pkgdir" install_utils + install -Dm755 extra/scripts/getent "$pkgdir"/usr/bin/getent +} + +build() { + _prepare && _compile && _install +} + +md5sums="1a4b84e5536ad8170563ffa88c34679c uClibc-0.9.30.1.tar.bz2 +ea91460617601b6e084ead66bc3948f5 uclibc-0.9.30.1-resolv.patch +cf80c0d44a41e02f389be427ee615d61 uclibc-0.9.30.1-pthread_getattr_np.patch +4079b20c763727863bc53408e4988434 0001-ldd-segfault-fix.patch +bcd1c4c9c87f092fb4631559e6ec13ba 0001-linuxthreads-fixes-from-Will-Newton-will.newton-AT-g.patch +969187e1da84d0a0a5957b392a3d5a2b pthread-new-aliasing-fix.diff +bbb8475963e791f596c34c81ef5583d7 uclibc-resolv-cname-fix.diff +0b3966ab7774ac42ecf34a7b596c661b uclibc-i386-floating-stacks.diff +60738298e377295d359768a09adac0bb ppoll.patch +55bb709f5efd937df323f0d39a202cfd uclibc-fork-hook.diff +0a87f57d3e5001027f43b7c959d96319 uclibcconfig" diff --git a/main/uclibc/ppoll.patch b/main/uclibc/ppoll.patch new file mode 100644 index 0000000000..e73733e216 --- /dev/null +++ b/main/uclibc/ppoll.patch @@ -0,0 +1,59 @@ +commit f82635e74a7e174f71f955eaa4f5dc788e596cc0 +Author: Denis Vlasenko <vda.linux@googlemail.com> +Date: Wed Jan 28 23:42:01 2009 +0000 + + fix ppoll. we forgot to pass 5th parameter to the syscall + +diff --git a/libc/sysdeps/linux/common/ppoll.c b/libc/sysdeps/linux/common/ppoll.c +index edcb1dc..d550ae8 100644 +--- a/libc/sysdeps/linux/common/ppoll.c ++++ b/libc/sysdeps/linux/common/ppoll.c +@@ -17,6 +17,7 @@ + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + ++#include <signal.h> + #include <sys/syscall.h> + #include <sys/poll.h> + +@@ -26,24 +27,26 @@ + + # define __NR___libc_ppoll __NR_ppoll + static __always_inline +-_syscall4(int, __libc_ppoll, struct pollfd *, fds, +- nfds_t, nfds, const struct timespec *, timeout, +- const __sigset_t *, sigmask) ++_syscall5(int, __libc_ppoll, ++ struct pollfd *, fds, ++ nfds_t, nfds, ++ const struct timespec *, timeout, ++ const __sigset_t *, sigmask, ++ size_t, sigsetsize) + + int +-ppoll (struct pollfd *fds, nfds_t nfds, const struct timespec *timeout, ++ppoll(struct pollfd *fds, nfds_t nfds, const struct timespec *timeout, + const __sigset_t *sigmask) + { +- /* The Linux kernel can in some situations update the timeout value. +- We do not want that so use a local variable. */ +- struct timespec tval; +- if (timeout != NULL) +- { +- tval = *timeout; +- timeout = &tval; +- } +- +- return __libc_ppoll(fds, nfds, timeout, sigmask); ++ /* The Linux kernel can in some situations update the timeout value. ++ We do not want that so use a local variable. */ ++ struct timespec tval; ++ if (timeout != NULL) { ++ tval = *timeout; ++ timeout = &tval; ++ } ++ ++ return __libc_ppoll(fds, nfds, timeout, sigmask, _NSIG / 8); + } + libc_hidden_def(ppoll) + diff --git a/main/uclibc/pthread-new-aliasing-fix.diff b/main/uclibc/pthread-new-aliasing-fix.diff new file mode 100644 index 0000000000..2b2b37723a --- /dev/null +++ b/main/uclibc/pthread-new-aliasing-fix.diff @@ -0,0 +1,147 @@ +diff --git a/libpthread/linuxthreads/cancel.c b/libpthread/linuxthreads/cancel.c +index 3435680..1412b57 100644 +--- a/libpthread/linuxthreads/cancel.c ++++ b/libpthread/linuxthreads/cancel.c +@@ -152,8 +152,8 @@ void pthread_testcancel(void) + __pthread_do_exit(PTHREAD_CANCELED, CURRENT_STACK_FRAME); + } + +-void _pthread_cleanup_push(struct _pthread_cleanup_buffer * buffer, +- void (*routine)(void *), void * arg) ++void __pthread_cleanup_push(struct _pthread_cleanup_buffer * buffer, ++ void (*routine)(void *), void * arg) + { + pthread_descr self = thread_self(); + buffer->__routine = routine; +@@ -163,17 +163,19 @@ void _pthread_cleanup_push(struct _pthread_cleanup_buffer * buffer, + buffer->__prev = NULL; + THREAD_SETMEM(self, p_cleanup, buffer); + } ++strong_alias(__pthread_cleanup_push, _pthread_cleanup_push); + +-void _pthread_cleanup_pop(struct _pthread_cleanup_buffer * buffer, +- int execute) ++void __pthread_cleanup_pop(struct _pthread_cleanup_buffer * buffer, ++ int execute) + { + pthread_descr self = thread_self(); + if (execute) buffer->__routine(buffer->__arg); + THREAD_SETMEM(self, p_cleanup, buffer->__prev); + } ++strong_alias(__pthread_cleanup_pop, _pthread_cleanup_pop); + +-void _pthread_cleanup_push_defer(struct _pthread_cleanup_buffer * buffer, +- void (*routine)(void *), void * arg) ++void __pthread_cleanup_push_defer(struct _pthread_cleanup_buffer * buffer, ++ void (*routine)(void *), void * arg) + { + pthread_descr self = thread_self(); + buffer->__routine = routine; +@@ -185,9 +187,10 @@ void _pthread_cleanup_push_defer(struct _pthread_cleanup_buffer * buffer, + THREAD_SETMEM(self, p_canceltype, PTHREAD_CANCEL_DEFERRED); + THREAD_SETMEM(self, p_cleanup, buffer); + } ++strong_alias(__pthread_cleanup_push_defer, _pthread_cleanup_push_defer); + +-void _pthread_cleanup_pop_restore(struct _pthread_cleanup_buffer * buffer, +- int execute) ++void __pthread_cleanup_pop_restore(struct _pthread_cleanup_buffer * buffer, ++ int execute) + { + pthread_descr self = thread_self(); + if (execute) buffer->__routine(buffer->__arg); +@@ -198,6 +201,7 @@ void _pthread_cleanup_pop_restore(struct _pthread_cleanup_buffer * buffer, + THREAD_GETMEM(self, p_canceltype) == PTHREAD_CANCEL_ASYNCHRONOUS) + __pthread_do_exit(PTHREAD_CANCELED, CURRENT_STACK_FRAME); + } ++strong_alias(__pthread_cleanup_pop_restore, _pthread_cleanup_pop_restore); + + extern void __rpc_thread_destroy(void); + void __pthread_perform_cleanup(char *currentframe) +diff --git a/libpthread/linuxthreads/forward.c b/libpthread/linuxthreads/forward.c +index f9f8ea1..385e79f 100644 +--- a/libpthread/linuxthreads/forward.c ++++ b/libpthread/linuxthreads/forward.c +@@ -24,6 +24,10 @@ + /* psm: keep this before internals.h */ + /* libc_hidden_proto(exit) */ + ++#define hidden_strong_alias(name, aliasname) \ ++ extern __typeof (name) aliasname __attribute__ ((alias (#name), \ ++ visibility ("hidden"))); ++ + #include "internals.h" + + /* Pointers to the libc functions. */ +@@ -104,8 +108,7 @@ FORWARD (pthread_equal, (pthread_t thread1, pthread_t thread2), + + /* Use an alias to avoid warning, as pthread_exit is declared noreturn. */ + FORWARD2 (__pthread_exit, void, (void *retval), (retval), exit (EXIT_SUCCESS)) +-strong_alias (__pthread_exit, pthread_exit) +- ++hidden_strong_alias (__pthread_exit, pthread_exit) + + FORWARD (pthread_getschedparam, + (pthread_t target_thread, int *policy, struct sched_param *param), +@@ -120,16 +123,16 @@ FORWARD (pthread_mutex_destroy, (pthread_mutex_t *mutex), (mutex), 0) + FORWARD (pthread_mutex_init, + (pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr), + (mutex, mutexattr), 0) +-strong_alias(pthread_mutex_init, __pthread_mutex_init) ++hidden_strong_alias(pthread_mutex_init, __pthread_mutex_init) + + FORWARD (pthread_mutex_lock, (pthread_mutex_t *mutex), (mutex), 0) +-strong_alias(pthread_mutex_lock, __pthread_mutex_lock) ++hidden_strong_alias(pthread_mutex_lock, __pthread_mutex_lock) + + FORWARD (pthread_mutex_trylock, (pthread_mutex_t *mutex), (mutex), 0) +-strong_alias(pthread_mutex_trylock, __pthread_mutex_trylock) ++hidden_strong_alias(pthread_mutex_trylock, __pthread_mutex_trylock) + + FORWARD (pthread_mutex_unlock, (pthread_mutex_t *mutex), (mutex), 0) +-strong_alias(pthread_mutex_unlock, __pthread_mutex_unlock) ++hidden_strong_alias(pthread_mutex_unlock, __pthread_mutex_unlock) + + FORWARD2 (pthread_self, pthread_t, (void), (), return 0) + +diff --git a/libpthread/linuxthreads/internals.h b/libpthread/linuxthreads/internals.h +index eb0a519..4ad6a0d 100644 +--- a/libpthread/linuxthreads/internals.h ++++ b/libpthread/linuxthreads/internals.h +@@ -380,6 +380,17 @@ extern int __pthread_setschedparam (pthread_t thread, int policy, + extern int __pthread_setcancelstate (int state, int * oldstate); + extern int __pthread_setcanceltype (int type, int * oldtype); + ++extern void __pthread_cleanup_push (struct _pthread_cleanup_buffer *__buffer, ++ void (*__routine) (void *), ++ void *__arg) __THROW; ++extern void __pthread_cleanup_pop (struct _pthread_cleanup_buffer *__buffer, ++ int __execute) __THROW; ++extern void __pthread_cleanup_push_defer (struct _pthread_cleanup_buffer *__buffer, ++ void (*__routine) (void *), ++ void *__arg) __THROW; ++extern void __pthread_cleanup_pop_restore (struct _pthread_cleanup_buffer *__buffer, ++ int __execute) __THROW; ++ + extern void __pthread_restart_old(pthread_descr th); + extern void __pthread_suspend_old(pthread_descr self); + extern int __pthread_timedsuspend_old(pthread_descr self, const struct timespec *abstime); +diff --git a/libpthread/linuxthreads/pthread.c b/libpthread/linuxthreads/pthread.c +index 4d1d906..012b74b 100644 +--- a/libpthread/linuxthreads/pthread.c ++++ b/libpthread/linuxthreads/pthread.c +@@ -280,10 +280,10 @@ struct pthread_functions __pthread_functions = + .ptr_pthread_sigaction = __pthread_sigaction, + .ptr_pthread_sigwait = __pthread_sigwait, + .ptr_pthread_raise = __pthread_raise, +- .ptr__pthread_cleanup_push = _pthread_cleanup_push, +- .ptr__pthread_cleanup_push_defer = _pthread_cleanup_push_defer, +- .ptr__pthread_cleanup_pop = _pthread_cleanup_pop, +- .ptr__pthread_cleanup_pop_restore = _pthread_cleanup_pop_restore, ++ .ptr__pthread_cleanup_push = __pthread_cleanup_push, ++ .ptr__pthread_cleanup_push_defer = __pthread_cleanup_push_defer, ++ .ptr__pthread_cleanup_pop = __pthread_cleanup_pop, ++ .ptr__pthread_cleanup_pop_restore = __pthread_cleanup_pop_restore, + }; + #ifdef SHARED + # define ptr_pthread_functions &__pthread_functions diff --git a/main/uclibc/uclibc-0.9.30.1-pthread_getattr_np.patch b/main/uclibc/uclibc-0.9.30.1-pthread_getattr_np.patch new file mode 100644 index 0000000000..28469be236 --- /dev/null +++ b/main/uclibc/uclibc-0.9.30.1-pthread_getattr_np.patch @@ -0,0 +1,137 @@ +--- uClibc-0.9.30.1.orig/libpthread/linuxthreads.old/sysdeps/pthread/pthread.h 2009-03-30 15:01:48.000000000 +0000 ++++ uClibc-0.9.30.1/libpthread/linuxthreads.old/sysdeps/pthread/pthread.h 2009-03-30 15:48:16.000000000 +0000 +@@ -288,16 +288,12 @@ + __attr, size_t *__restrict __stacksize) + __THROW; + +-#if 0 +-/* Not yet implemented in uClibc! */ +- + #ifdef __USE_GNU + /* Initialize thread attribute *ATTR with attributes corresponding to the + already running thread TH. It shall be called on uninitialized ATTR + and destroyed with pthread_attr_destroy when no longer needed. */ + extern int pthread_getattr_np (pthread_t __th, pthread_attr_t *__attr) __THROW; + #endif +-#endif + + /* Functions for scheduling control. */ + +@@ -599,6 +595,11 @@ + cancelled. */ + extern void pthread_testcancel (void); + ++/* Return the previously set address for the stack. */ ++extern int pthread_attr_getstack (__const pthread_attr_t *__restrict __attr, ++ void **__restrict __stackaddr, ++ size_t *__restrict __stacksize) __THROW; ++ + + /* Install a cleanup handler: ROUTINE will be called with arguments ARG + when the thread is cancelled or calls pthread_exit. ROUTINE will also +--- a/libpthread/linuxthreads.old/attr.c.orig 2007-11-22 16:55:08.000000000 +0000 ++++ b/libpthread/linuxthreads.old/attr.c 2009-03-30 19:15:51.000000000 +0000 +@@ -38,6 +38,14 @@ + libpthread_hidden_proto(pthread_attr_getscope) + libpthread_hidden_proto(pthread_attr_setscope) + ++#include <sys/resource.h> ++#include <inttypes.h> ++#include <stdio.h> ++#include <stdio_ext.h> ++#include <stdlib.h> ++#include <sys/resource.h> ++ ++ + /* NOTE: With uClibc I don't think we need this versioning stuff. + * Therefore, define the function pthread_attr_init() here using + * a strong symbol. */ +@@ -235,4 +243,88 @@ + *stacksize = attr->__stacksize; + return 0; + } ++ ++ ++extern int *__libc_stack_end; ++ + weak_alias (__pthread_attr_getstacksize, pthread_attr_getstacksize) ++int pthread_getattr_np(pthread_t thread, pthread_attr_t *attr) ++{ ++ static void *stackBase = 0; ++ static size_t stackSize = 0; ++ int ret = 0; ++ /* Stack size limit. */ ++ struct rlimit rl; ++ ++ /* The safest way to get the top of the stack is to read ++ /proc/self/maps and locate the line into which ++ __libc_stack_end falls. */ ++ FILE *fp = fopen("/proc/self/maps", "rc"); ++ if (fp == NULL) ++ ret = errno; ++ /* We need the limit of the stack in any case. */ ++ else if (getrlimit (RLIMIT_STACK, &rl) != 0) ++ ret = errno; ++ else { ++ /* We need no locking. */ ++ __fsetlocking (fp, FSETLOCKING_BYCALLER); ++ ++ /* Until we found an entry (which should always be the case) ++ mark the result as a failure. */ ++ ret = ENOENT; ++ ++ char *line = NULL; ++ size_t linelen = 0; ++ uintptr_t last_to = 0; ++ ++ while (! feof_unlocked (fp)) { ++ if (getdelim (&line, &linelen, '\n', fp) <= 0) ++ break; ++ ++ uintptr_t from; ++ uintptr_t to; ++ if (sscanf (line, "%x-%x", &from, &to) != 2) ++ continue; ++ if (from <= (uintptr_t) __libc_stack_end ++ && (uintptr_t) __libc_stack_end < to) { ++ /* Found the entry. Now we have the info we need. */ ++ attr->__stacksize = rl.rlim_cur; ++#ifdef _STACK_GROWS_UP ++ /* Don't check to enforce a limit on the __stacksize */ ++ attr->__stackaddr = (void *) from; ++#else ++ attr->__stackaddr = (void *) to; ++ ++ /* The limit might be too high. */ ++ if ((size_t) attr->__stacksize > (size_t) attr->__stackaddr - last_to) ++ attr->__stacksize = (size_t) attr->__stackaddr - last_to; ++#endif ++ ++ /* We succeed and no need to look further. */ ++ ret = 0; ++ break; ++ } ++ last_to = to; ++ } ++ ++ fclose (fp); ++ free (line); ++ } ++ return ret; ++} ++ ++int __pthread_attr_getstack (const pthread_attr_t *attr, void **stackaddr, ++ size_t *stacksize) ++{ ++ /* XXX This function has a stupid definition. The standard specifies ++ no error value but what is if no stack address was set? We simply ++ return the value we have in the member. */ ++#ifndef _STACK_GROWS_UP ++ *stackaddr = (char *) attr->__stackaddr - attr->__stacksize; ++#else ++ *stackaddr = attr->__stackaddr; ++#endif ++ *stacksize = attr->__stacksize; ++ return 0; ++} ++weak_alias (__pthread_attr_getstack, pthread_attr_getstack) diff --git a/main/uclibc/uclibc-0.9.30.1-resolv.patch b/main/uclibc/uclibc-0.9.30.1-resolv.patch new file mode 100644 index 0000000000..55b7d991e1 --- /dev/null +++ b/main/uclibc/uclibc-0.9.30.1-resolv.patch @@ -0,0 +1,13 @@ +diff -ru uClibc-0.9.30.1.orig/libc/inet/resolv.c uClibc-0.9.30.1/libc/inet/resolv.c +--- uClibc-0.9.30.1.orig/libc/inet/resolv.c 2009-03-10 15:32:14.000000000 +0000 ++++ uClibc-0.9.30.1/libc/inet/resolv.c 2009-03-10 15:39:20.000000000 +0000 +@@ -1331,7 +1331,8 @@ + i = __dns_lookup(dname, type, __nameserversXX, __nameserverXX, &packet, &a); + + if (i < 0) { +- h_errno = TRY_AGAIN; ++ if (!h_errno) /* TODO: can this ever happen? */ ++ h_errno = TRY_AGAIN; + return -1; + } + diff --git a/main/uclibc/uclibc-fork-hook.diff b/main/uclibc/uclibc-fork-hook.diff new file mode 100644 index 0000000000..0126918836 --- /dev/null +++ b/main/uclibc/uclibc-fork-hook.diff @@ -0,0 +1,36 @@ +diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/fork.c b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/fork.c +index e15b99b..70c750d 100644 +--- a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/fork.c ++++ b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/fork.c +@@ -20,6 +20,7 @@ + #include <errno.h> + #include <fork.h> + #include <bits/libc-lock.h> ++#include <internals.h> + + struct fork_block __fork_block = + { +@@ -28,3 +29,12 @@ struct fork_block __fork_block = + .parent_list = { &__fork_block.parent_list, &__fork_block.parent_list }, + .child_list = { &__fork_block.child_list, &__fork_block.child_list } + }; ++ ++pid_t ++__libc_fork (void) ++{ ++ return __libc_maybe_call2 (pthread_fork, (&__fork_block), ARCH_FORK ()); ++} ++weak_alias (__libc_fork, __fork) ++libc_hidden_def (__fork) ++weak_alias (__libc_fork, fork) +diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/fork.h b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/fork.h +index 85477eb..1e7379e 100644 +--- a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/fork.h ++++ b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/fork.h +@@ -54,5 +54,5 @@ extern int __register_atfork (void (*__prepare) (void), + void *dso_handle); + + #ifndef ARCH_FORK +-# define ARCH_FORK() __libc_fork() ++# define ARCH_FORK() INLINE_SYSCALL (fork, 0) + #endif diff --git a/main/uclibc/uclibc-i386-floating-stacks.diff b/main/uclibc/uclibc-i386-floating-stacks.diff new file mode 100644 index 0000000000..553195e69f --- /dev/null +++ b/main/uclibc/uclibc-i386-floating-stacks.diff @@ -0,0 +1,23 @@ +--- uClibc-0.9.30.1/libpthread/linuxthreads/sysdeps/i386/pt-machine.h Thu Sep 25 13:55:14 2008 ++++ /root/uClibc-0.9.30.1-patched/libpthread/linuxthreads/sysdeps/i386/pt-machine.h Wed Jun 24 13:13:31 2009 +@@ -113,6 +113,8 @@ + } + #endif /* __ASSEMBLER__ */ + ++#include "./useldt.h" ++ + #endif /* pt-machine.h */ + + #endif +--- uClibc-0.9.30.1/libpthread/linuxthreads/sysdeps/i386/useldt.h Tue May 15 00:35:00 2007 ++++ /root/uClibc-0.9.30.1-patched/libpthread/linuxthreads/sysdeps/i386/useldt.h Wed Jun 24 13:22:38 2009 +@@ -23,7 +23,8 @@ + #include <stddef.h> /* For offsetof. */ + #include <stdlib.h> /* For abort(). */ + #include <sysdep.h> +- ++#include <sys/syscall.h> ++#include <kernel-features.h> + + /* We don't want to include the kernel header. So duplicate the + information. */ diff --git a/main/uclibc/uclibc-resolv-cname-fix.diff b/main/uclibc/uclibc-resolv-cname-fix.diff new file mode 100644 index 0000000000..041e150f35 --- /dev/null +++ b/main/uclibc/uclibc-resolv-cname-fix.diff @@ -0,0 +1,16 @@ +--- a/libc/inet/resolv.c.orig 2009-06-18 09:38:26.000000000 +0300 ++++ b/libc/inet/resolv.c 2009-06-18 09:38:32.000000000 +0300 +@@ -1337,10 +1337,9 @@ int res_query(const char *dname, int cla + + free(a.dotted); + +- if (a.atype == type) { /* CNAME */ +- i = MIN(anslen, i); +- memcpy(answer, packet, i); +- } ++ i = MIN(anslen, i); ++ memcpy(answer, packet, i); ++ + free(packet); + return i; + } diff --git a/main/uclibc/uclibcconfig b/main/uclibc/uclibcconfig new file mode 100644 index 0000000000..8cc64d90a8 --- /dev/null +++ b/main/uclibc/uclibcconfig @@ -0,0 +1,246 @@ +# +# Automatically generated make config: don't edit +# Version: 0.9.30.1 +# Mon Jun 15 09:42:10 2009 +# +# TARGET_alpha is not set +# TARGET_arm is not set +# TARGET_avr32 is not set +# TARGET_bfin is not set +# TARGET_cris is not set +# TARGET_e1 is not set +# TARGET_frv is not set +# TARGET_h8300 is not set +# TARGET_hppa is not set +TARGET_i386=y +# TARGET_i960 is not set +# TARGET_ia64 is not set +# TARGET_m68k is not set +# TARGET_microblaze is not set +# TARGET_mips is not set +# TARGET_nios is not set +# TARGET_nios2 is not set +# TARGET_powerpc is not set +# TARGET_sh is not set +# TARGET_sh64 is not set +# TARGET_sparc is not set +# TARGET_v850 is not set +# TARGET_vax is not set +# TARGET_x86_64 is not set +# TARGET_xtensa is not set + +# +# Target Architecture Features and Options +# +TARGET_ARCH="i386" +FORCE_OPTIONS_FOR_ARCH=y +# CONFIG_GENERIC_386 is not set +# CONFIG_386 is not set +CONFIG_486=y +# CONFIG_586 is not set +# CONFIG_586MMX is not set +# CONFIG_686 is not set +# CONFIG_PENTIUMII is not set +# CONFIG_PENTIUMIII is not set +# CONFIG_PENTIUM4 is not set +# CONFIG_K6 is not set +# CONFIG_K7 is not set +# CONFIG_ELAN is not set +# CONFIG_CRUSOE is not set +# CONFIG_WINCHIPC6 is not set +# CONFIG_WINCHIP2 is not set +# CONFIG_CYRIXIII is not set +# CONFIG_NEHEMIAH is not set +TARGET_SUBARCH="" + +# +# Using ELF file format +# +ARCH_LITTLE_ENDIAN=y + +# +# Using Little Endian +# +ARCH_HAS_MMU=y +ARCH_USE_MMU=y +UCLIBC_HAS_FLOATS=y +UCLIBC_HAS_FPU=y +DO_C99_MATH=y +UCLIBC_HAS_FENV=y +UCLIBC_HAS_LONG_DOUBLE_MATH=y +KERNEL_HEADERS="/usr/include" +HAVE_DOT_CONFIG=y + +# +# General Library Settings +# +# HAVE_NO_PIC is not set +DOPIC=y +# ARCH_HAS_NO_SHARED is not set +# ARCH_HAS_NO_LDSO is not set +HAVE_SHARED=y +FORCE_SHAREABLE_TEXT_SEGMENTS=y +LDSO_LDD_SUPPORT=y +LDSO_CACHE_SUPPORT=y +# LDSO_PRELOAD_FILE_SUPPORT is not set +LDSO_BASE_FILENAME="ld.so" +UCLIBC_STATIC_LDCONFIG=y +LDSO_RUNPATH=y +UCLIBC_CTOR_DTOR=y +# LDSO_GNU_HASH_SUPPORT is not set +# HAS_NO_THREADS is not set +UCLIBC_HAS_THREADS=y +# PTHREADS_DEBUG_SUPPORT is not set +# LINUXTHREADS_OLD is not set +LINUXTHREADS_NEW=y +UCLIBC_HAS_SYSLOG=y +UCLIBC_HAS_LFS=y +# MALLOC is not set +# MALLOC_SIMPLE is not set +MALLOC_STANDARD=y +MALLOC_GLIBC_COMPAT=y +UCLIBC_DYNAMIC_ATEXIT=y +COMPAT_ATEXIT=y +UCLIBC_SUSV3_LEGACY=y +UCLIBC_SUSV3_LEGACY_MACROS=y +# UCLIBC_HAS_STUBS is not set +UCLIBC_HAS_SHADOW=y +UCLIBC_HAS_PROGRAM_INVOCATION_NAME=y +UCLIBC_HAS___PROGNAME=y +UCLIBC_HAS_PTY=y +ASSUME_DEVPTS=y +UNIX98PTY_ONLY=y +# UCLIBC_HAS_GETPT is not set +UCLIBC_HAS_TM_EXTENSIONS=y +UCLIBC_HAS_TZ_CACHING=y +UCLIBC_HAS_TZ_FILE=y +UCLIBC_HAS_TZ_FILE_READ_MANY=y +UCLIBC_TZ_FILE_PATH="/etc/TZ" + +# +# Advanced Library Settings +# +UCLIBC_PWD_BUFFER_SIZE=256 +UCLIBC_GRP_BUFFER_SIZE=256 + +# +# Support various families of functions +# +UCLIBC_LINUX_MODULE_24=y +UCLIBC_LINUX_SPECIFIC=y +UCLIBC_HAS_GNU_ERROR=y +UCLIBC_BSD_SPECIFIC=y +UCLIBC_HAS_BSD_ERR=y +UCLIBC_HAS_OBSOLETE_BSD_SIGNAL=y +UCLIBC_HAS_OBSOLETE_SYSV_SIGNAL=y +# UCLIBC_NTP_LEGACY is not set +UCLIBC_SV4_DEPRECATED=y +UCLIBC_HAS_REALTIME=y +UCLIBC_HAS_ADVANCED_REALTIME=y +UCLIBC_HAS_EPOLL=y +UCLIBC_HAS_XATTR=y +UCLIBC_HAS_PROFILING=y +UCLIBC_HAS_CRYPT_IMPL=y +UCLIBC_HAS_CRYPT=y +UCLIBC_HAS_NETWORK_SUPPORT=y +UCLIBC_HAS_SOCKET=y +UCLIBC_HAS_IPV4=y +UCLIBC_HAS_IPV6=y +UCLIBC_HAS_RPC=y +UCLIBC_HAS_FULL_RPC=y +UCLIBC_HAS_REENTRANT_RPC=y +UCLIBC_USE_NETLINK=y +UCLIBC_SUPPORT_AI_ADDRCONFIG=y +UCLIBC_HAS_BSD_RES_CLOSE=y + +# +# String and Stdio Support +# +UCLIBC_HAS_STRING_GENERIC_OPT=y +UCLIBC_HAS_STRING_ARCH_OPT=y +UCLIBC_HAS_CTYPE_TABLES=y +UCLIBC_HAS_CTYPE_SIGNED=y +# UCLIBC_HAS_CTYPE_UNSAFE is not set +UCLIBC_HAS_CTYPE_CHECKED=y +# UCLIBC_HAS_CTYPE_ENFORCED is not set +UCLIBC_HAS_WCHAR=y +# UCLIBC_HAS_LOCALE is not set +UCLIBC_HAS_HEXADECIMAL_FLOATS=y +UCLIBC_HAS_GLIBC_CUSTOM_PRINTF=y +UCLIBC_PRINTF_SCANF_POSITIONAL_ARGS=9 +# UCLIBC_HAS_SCANF_GLIBC_A_FLAG is not set +# UCLIBC_HAS_STDIO_BUFSIZ_NONE is not set +# UCLIBC_HAS_STDIO_BUFSIZ_256 is not set +# UCLIBC_HAS_STDIO_BUFSIZ_512 is not set +# UCLIBC_HAS_STDIO_BUFSIZ_1024 is not set +# UCLIBC_HAS_STDIO_BUFSIZ_2048 is not set +UCLIBC_HAS_STDIO_BUFSIZ_4096=y +# UCLIBC_HAS_STDIO_BUFSIZ_8192 is not set +UCLIBC_HAS_STDIO_BUILTIN_BUFFER_NONE=y +# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_4 is not set +# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_8 is not set +# UCLIBC_HAS_STDIO_SHUTDOWN_ON_ABORT is not set +UCLIBC_HAS_STDIO_GETC_MACRO=y +UCLIBC_HAS_STDIO_PUTC_MACRO=y +UCLIBC_HAS_STDIO_AUTO_RW_TRANSITION=y +# UCLIBC_HAS_FOPEN_LARGEFILE_MODE is not set +UCLIBC_HAS_FOPEN_EXCLUSIVE_MODE=y +UCLIBC_HAS_GLIBC_CUSTOM_STREAMS=y +UCLIBC_HAS_PRINTF_M_SPEC=y +UCLIBC_HAS_ERRNO_MESSAGES=y +# UCLIBC_HAS_SYS_ERRLIST is not set +UCLIBC_HAS_SIGNUM_MESSAGES=y +# UCLIBC_HAS_SYS_SIGLIST is not set +UCLIBC_HAS_GNU_GETOPT=y +UCLIBC_HAS_GNU_GETSUBOPT=y + +# +# Big and Tall +# +UCLIBC_HAS_REGEX=y +UCLIBC_HAS_REGEX_OLD=y +UCLIBC_HAS_FNMATCH=y +UCLIBC_HAS_FNMATCH_OLD=y +UCLIBC_HAS_WORDEXP=y +UCLIBC_HAS_FTW=y +UCLIBC_HAS_GLOB=y +UCLIBC_HAS_GNU_GLOB=y + +# +# Library Installation Options +# +SHARED_LIB_LOADER_PREFIX="/lib" +RUNTIME_PREFIX="/" +DEVEL_PREFIX="/usr" + +# +# Security options +# +UCLIBC_BUILD_PIE=y +UCLIBC_HAS_ARC4RANDOM=y +# HAVE_NO_SSP is not set +UCLIBC_HAS_SSP=y +UCLIBC_HAS_SSP_COMPAT=y +# SSP_QUICK_CANARY is not set +# PROPOLICE_BLOCK_ABRT is not set +PROPOLICE_BLOCK_SEGV=y +UCLIBC_BUILD_SSP=y +UCLIBC_BUILD_RELRO=y +UCLIBC_BUILD_NOW=y +UCLIBC_BUILD_NOEXECSTACK=y + +# +# uClibc development/debugging options +# +CROSS_COMPILER_PREFIX="" +UCLIBC_EXTRA_CFLAGS="" +# DODEBUG is not set +# DOSTRIP is not set +# DOASSERTS is not set +# SUPPORT_LD_DEBUG is not set +# SUPPORT_LD_DEBUG_EARLY is not set +# UCLIBC_MALLOC_DEBUGGING is not set +WARNINGS="-Wall" +# EXTRA_WARNINGS is not set +# DOMULTI is not set +# UCLIBC_MJN3_ONLY is not set |