diff options
Diffstat (limited to 'main/libc0.9.32/0001-static-build-fix-internal-locking-weaks-to-get-pulle.patch')
-rw-r--r-- | main/libc0.9.32/0001-static-build-fix-internal-locking-weaks-to-get-pulle.patch | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/main/libc0.9.32/0001-static-build-fix-internal-locking-weaks-to-get-pulle.patch b/main/libc0.9.32/0001-static-build-fix-internal-locking-weaks-to-get-pulle.patch new file mode 100644 index 0000000000..2898a0d02d --- /dev/null +++ b/main/libc0.9.32/0001-static-build-fix-internal-locking-weaks-to-get-pulle.patch @@ -0,0 +1,125 @@ +From 67403d1d692c3b8022b0adca127a2c14ef8e3237 Mon Sep 17 00:00:00 2001 +From: Timo Teras <timo.teras@iki.fi> +Date: Fri, 7 May 2010 11:28:27 +0300 +Subject: [PATCH 1/2] static build: fix internal locking weaks to get pulled in always + +Linker is smart and does not pull in weaks.os, ever. This happens +because that compilation unit does not get strong references and +ld eliminates dead code. We really need the weaks for static build +in a compilation unit that is always there, otherwise it won't work. + +Signed-off-by: Timo Teras <timo.teras@iki.fi> +--- + libc/misc/internals/__uClibc_main.c | 35 ++++++++++++++++++++++++++++++ + libc/misc/pthread/Makefile.in | 1 - + libc/misc/pthread/weaks.c | 40 ----------------------------------- + 3 files changed, 35 insertions(+), 41 deletions(-) + delete mode 100644 libc/misc/pthread/weaks.c + +diff --git a/libc/misc/internals/__uClibc_main.c b/libc/misc/internals/__uClibc_main.c +index f7e45c6..f9e1244 100644 +--- a/libc/misc/internals/__uClibc_main.c ++++ b/libc/misc/internals/__uClibc_main.c +@@ -68,6 +68,41 @@ uintptr_t __guard attribute_relro; + */ + + void internal_function _dl_aux_init (ElfW(auxv_t) *av); ++ ++/* ++ * uClibc internal locking requires that we have weak aliases ++ * for dummy functions in case libpthread.a is not linked in. ++ * This needs to be in compilation unit that is pulled always ++ * in or linker will disregard these weaks. ++ */ ++ ++static int __pthread_return_0 (pthread_mutex_t *unused) { return 0; } ++weak_alias (__pthread_return_0, __pthread_mutex_lock) ++weak_alias (__pthread_return_0, __pthread_mutex_trylock) ++weak_alias (__pthread_return_0, __pthread_mutex_unlock) ++ ++int weak_function ++__pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr) ++{ ++ return 0; ++} ++ ++void weak_function ++_pthread_cleanup_push_defer(struct _pthread_cleanup_buffer *__buffer, ++ void (*__routine) (void *), void *__arg) ++{ ++ __buffer->__routine = __routine; ++ __buffer->__arg = __arg; ++} ++ ++void weak_function ++_pthread_cleanup_pop_restore(struct _pthread_cleanup_buffer *__buffer, ++ int __execute) ++{ ++ if (__execute) ++ __buffer->__routine(__buffer->__arg); ++} ++ + #endif /* !SHARED */ + + /* +diff --git a/libc/misc/pthread/Makefile.in b/libc/misc/pthread/Makefile.in +index 69cdf10..2f436ac 100644 +--- a/libc/misc/pthread/Makefile.in ++++ b/libc/misc/pthread/Makefile.in +@@ -11,7 +11,6 @@ MISC_PTHREAD_DIR := $(top_srcdir)libc/misc/pthread + MISC_PTHREAD_OUT := $(top_builddir)libc/misc/pthread + + libc-shared-$(UCLIBC_HAS_TLS) += $(MISC_PTHREAD_OUT)/tsd.os +-libc-static-$(UCLIBC_HAS_THREADS) += $(MISC_PTHREAD_OUT)/weaks.o + + objclean-y += CLEAN_libc/misc/pthread + +diff --git a/libc/misc/pthread/weaks.c b/libc/misc/pthread/weaks.c +deleted file mode 100644 +index fb1d85f..0000000 +--- a/libc/misc/pthread/weaks.c ++++ /dev/null +@@ -1,40 +0,0 @@ +-/* The weak pthread functions for Linux. +- Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- +- The GNU C Library is free software; you can redistribute it and/or +- modify it under the terms of the GNU Library General Public License as +- published by the Free Software Foundation; either version 2 of the +- License, or (at your option) any later version. +- +- The GNU C Library 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 +- Library General Public License for more details. +- +- You should have received a copy of the GNU Library General Public +- License along with the GNU C Library; see the file COPYING.LIB. If not, +- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +- Boston, MA 02111-1307, USA. */ +- +-#include <libc-internal.h> +- +-/* Weaks for internal library use only. +- * +- * We need to define weaks here to cover all the pthread functions that +- * libc itself will use so that we aren't forced to link libc against +- * libpthread. This file is only used in libc.a and since we have +- * weaks here, they will be automatically overridden by libpthread.a +- * if it gets linked in. +- */ +- +-static int __pthread_return_0 (void) { return 0; } +-static void __pthread_return_void (void) { return; } +- +-weak_alias (__pthread_return_0, __pthread_mutex_init) +-weak_alias (__pthread_return_0, __pthread_mutex_lock) +-weak_alias (__pthread_return_0, __pthread_mutex_trylock) +-weak_alias (__pthread_return_0, __pthread_mutex_unlock) +-weak_alias (__pthread_return_void, _pthread_cleanup_push_defer) +-weak_alias (__pthread_return_void, _pthread_cleanup_pop_restore) +- +-- +1.6.3.3 + |