[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[commits] r8712 - in /trunk/libc: ./ nptl/sysdeps/pthread/ nptl/sysdeps/pthread/bits/
- To: commits@xxxxxxxxxx
- Subject: [commits] r8712 - in /trunk/libc: ./ nptl/sysdeps/pthread/ nptl/sysdeps/pthread/bits/
- From: maxim@xxxxxxxxxx
- Date: Mon, 27 Jul 2009 16:26:25 -0000
Author: maxim
Date: Mon Jul 27 09:26:25 2009
New Revision: 8712
Log:
Add BIG_MACROS option group.
* option-groups.def (OPTION_EGLIBC_BIG_MACROS): Define new option
group.
* option-groups.defaults (OPTION_EGLIBC_BIG_MACROS): Define default.
* nptl/sysdeps/pthread/small-macros-fns.c: New file. Define wrappers.
* nptl/sysdeps/pthread/Makefile (nptl/sysdep_routines): Add
small-macros-fns.
* nptl/sysdeps/pthread/bits/libc-lock.h (gnu/option-groups.h): Include.
(errno.h): Include, make implicit dependency explicit.
(__libc_lock_lock, __libc_lock_lock_recursive),
(__libc_lock_trylock, __libc_lock_trylock_recursive),
(__libc_lock_unlock, __libc_lock_unlock_recursive):
If OPTION_EGLIBC_BIG_MACROS, define to macro;
define to function call otherwise.
Added:
trunk/libc/nptl/sysdeps/pthread/small-macros-fns.c
Modified:
trunk/libc/ChangeLog.eglibc
trunk/libc/nptl/sysdeps/pthread/Makefile
trunk/libc/nptl/sysdeps/pthread/bits/libc-lock.h
trunk/libc/option-groups.def
trunk/libc/option-groups.defaults
Modified: trunk/libc/ChangeLog.eglibc
==============================================================================
--- trunk/libc/ChangeLog.eglibc (original)
+++ trunk/libc/ChangeLog.eglibc Mon Jul 27 09:26:25 2009
@@ -1,3 +1,21 @@
+2009-07-27 Maxim Kuvyrkov <maxim@xxxxxxxxxxxxxxxx>
+
+ Add BIG_MACROS option group.
+
+ * option-groups.def (OPTION_EGLIBC_BIG_MACROS): Define new option
+ group.
+ * option-groups.defaults (OPTION_EGLIBC_BIG_MACROS): Define default.
+ * nptl/sysdeps/pthread/small-macros-fns.c: New file. Define wrappers.
+ * nptl/sysdeps/pthread/Makefile (nptl/sysdep_routines): Add
+ small-macros-fns.
+ * nptl/sysdeps/pthread/bits/libc-lock.h (gnu/option-groups.h): Include.
+ (errno.h): Include, make implicit dependency explicit.
+ (__libc_lock_lock, __libc_lock_lock_recursive),
+ (__libc_lock_trylock, __libc_lock_trylock_recursive),
+ (__libc_lock_unlock, __libc_lock_unlock_recursive):
+ If OPTION_EGLIBC_BIG_MACROS, define to macro;
+ define to function call otherwise.
+
2009-06-26 Maxim Kuvyrkov <maxim@xxxxxxxxxxxxxxxx>
Make --disable-versioning work.
Modified: trunk/libc/nptl/sysdeps/pthread/Makefile
==============================================================================
--- trunk/libc/nptl/sysdeps/pthread/Makefile (original)
+++ trunk/libc/nptl/sysdeps/pthread/Makefile Mon Jul 27 09:26:25 2009
@@ -25,6 +25,9 @@
ifeq ($(subdir),nptl)
libpthread-sysdep_routines += errno-loc
+ifeq ($(OPTION_EGLIBC_BIG_MACROS),n)
+sysdep_routines += small-macros-fns
+endif
endif
ifeq ($(subdir),rt)
Modified: trunk/libc/nptl/sysdeps/pthread/bits/libc-lock.h
==============================================================================
--- trunk/libc/nptl/sysdeps/pthread/bits/libc-lock.h (original)
+++ trunk/libc/nptl/sysdeps/pthread/bits/libc-lock.h Mon Jul 27 09:26:25 2009
@@ -35,6 +35,8 @@
# include <lowlevellock.h>
# include <tls.h>
# include <pthread-functions.h>
+# include <errno.h> /* For EBUSY. */
+# include <gnu/option-groups.h> /* For __OPTION_EGLIBC_BIG_MACROS. */
#endif
/* Mutex type. */
@@ -238,8 +240,20 @@
/* Lock the named lock variable. */
#if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)
+# if __OPTION_EGLIBC_BIG_MACROS != 1
+/* EGLIBC: Declare wrapper function for a big macro if either
+ !__OPTION_EGLIBC_BIG_MACROS or we are using a back door from
+ small-macros-fns.c (__OPTION_EGLIBC_BIG_MACROS == 2). */
+extern void __libc_lock_lock_fn (__libc_lock_t *);
+libc_hidden_proto (__libc_lock_lock_fn);
+# endif /* __OPTION_EGLIBC_BIG_MACROS != 1 */
+# if __OPTION_EGLIBC_BIG_MACROS
# define __libc_lock_lock(NAME) \
({ lll_lock (NAME, LLL_PRIVATE); 0; })
+# else
+# define __libc_lock_lock(NAME) \
+ __libc_lock_lock_fn (&(NAME))
+# endif /* __OPTION_EGLIBC_BIG_MACROS */
#else
# define __libc_lock_lock(NAME) \
__libc_maybe_call (__pthread_mutex_lock, (&(NAME)), 0)
@@ -251,6 +265,14 @@
/* Lock the recursive named lock variable. */
#if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)
+# if __OPTION_EGLIBC_BIG_MACROS != 1
+/* EGLIBC: Declare wrapper function for a big macro if either
+ !__OPTION_EGLIBC_BIG_MACROS or we are using a back door from
+ small-macros-fns.c (__OPTION_EGLIBC_BIG_MACROS == 2). */
+extern void __libc_lock_lock_recursive_fn (__libc_lock_recursive_t *);
+libc_hidden_proto (__libc_lock_lock_recursive_fn);
+# endif /* __OPTION_EGLIBC_BIG_MACROS != 1 */
+# if __OPTION_EGLIBC_BIG_MACROS
# define __libc_lock_lock_recursive(NAME) \
do { \
void *self = THREAD_SELF; \
@@ -261,6 +283,10 @@
} \
++(NAME).cnt; \
} while (0)
+# else
+# define __libc_lock_lock_recursive(NAME) \
+ __libc_lock_lock_recursive_fn (&(NAME))
+# endif /* __OPTION_EGLIBC_BIG_MACROS */
#else
# define __libc_lock_lock_recursive(NAME) \
__libc_maybe_call (__pthread_mutex_lock, (&(NAME).mutex), 0)
@@ -268,8 +294,20 @@
/* Try to lock the named lock variable. */
#if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)
+# if __OPTION_EGLIBC_BIG_MACROS != 1
+/* EGLIBC: Declare wrapper function for a big macro if either
+ !__OPTION_EGLIBC_BIG_MACROS or we are using a back door from
+ small-macros-fns.c (__OPTION_EGLIBC_BIG_MACROS == 2). */
+extern int __libc_lock_trylock_fn (__libc_lock_t *);
+libc_hidden_proto (__libc_lock_trylock_fn);
+# endif /* __OPTION_EGLIBC_BIG_MACROS != 1 */
+# if __OPTION_EGLIBC_BIG_MACROS
# define __libc_lock_trylock(NAME) \
lll_trylock (NAME)
+# else
+# define __libc_lock_trylock(NAME) \
+ __libc_lock_trylock_fn (&(NAME))
+# endif /* __OPTION_EGLIBC_BIG_MACROS */
#else
# define __libc_lock_trylock(NAME) \
__libc_maybe_call (__pthread_mutex_trylock, (&(NAME)), 0)
@@ -281,6 +319,14 @@
/* Try to lock the recursive named lock variable. */
#if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)
+# if __OPTION_EGLIBC_BIG_MACROS != 1
+/* EGLIBC: Declare wrapper function for a big macro if either
+ !__OPTION_EGLIBC_BIG_MACROS or we are using a back door from
+ small-macros-fns.c (__OPTION_EGLIBC_BIG_MACROS == 2). */
+extern int __libc_lock_trylock_recursive_fn (__libc_lock_recursive_t *);
+libc_hidden_proto (__libc_lock_trylock_recursive_fn);
+# endif /* __OPTION_EGLIBC_BIG_MACROS != 1 */
+# if __OPTION_EGLIBC_BIG_MACROS
# define __libc_lock_trylock_recursive(NAME) \
({ \
int result = 0; \
@@ -299,6 +345,10 @@
++(NAME).cnt; \
result; \
})
+# else
+# define __libc_lock_trylock_recursive(NAME) \
+ __libc_lock_trylock_recursive_fn (&(NAME))
+# endif /* __OPTION_EGLIBC_BIG_MACROS */
#else
# define __libc_lock_trylock_recursive(NAME) \
__libc_maybe_call (__pthread_mutex_trylock, (&(NAME)), 0)
@@ -309,8 +359,20 @@
/* Unlock the named lock variable. */
#if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)
+# if __OPTION_EGLIBC_BIG_MACROS != 1
+/* EGLIBC: Declare wrapper function for a big macro if either
+ !__OPTION_EGLIBC_BIG_MACROS, or we are using a back door from
+ small-macros-fns.c (__OPTION_EGLIBC_BIG_MACROS == 2). */
+extern void __libc_lock_unlock_fn (__libc_lock_t *);
+libc_hidden_proto (__libc_lock_unlock_fn);
+# endif /* __OPTION_EGLIBC_BIG_MACROS != 1 */
+# if __OPTION_EGLIBC_BIG_MACROS
# define __libc_lock_unlock(NAME) \
lll_unlock (NAME, LLL_PRIVATE)
+# else
+# define __libc_lock_unlock(NAME) \
+ __libc_lock_unlock_fn (&(NAME))
+# endif /* __OPTION_EGLIBC_BIG_MACROS */
#else
# define __libc_lock_unlock(NAME) \
__libc_maybe_call (__pthread_mutex_unlock, (&(NAME)), 0)
@@ -320,6 +382,14 @@
/* Unlock the recursive named lock variable. */
#if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)
+# if __OPTION_EGLIBC_BIG_MACROS != 1
+/* EGLIBC: Declare wrapper function for a big macro if either
+ !__OPTION_EGLIBC_BIG_MACROS, or we are using a back door from
+ small-macros-fns.c (__OPTION_EGLIBC_BIG_MACROS == 2). */
+extern void __libc_lock_unlock_recursive_fn (__libc_lock_recursive_t *);
+libc_hidden_proto (__libc_lock_unlock_recursive_fn);
+# endif /* __OPTION_EGLIBC_BIG_MACROS != 1 */
+# if __OPTION_EGLIBC_BIG_MACROS
/* We do no error checking here. */
# define __libc_lock_unlock_recursive(NAME) \
do { \
@@ -329,6 +399,10 @@
lll_unlock ((NAME).lock, LLL_PRIVATE); \
} \
} while (0)
+# else
+# define __libc_lock_unlock_recursive(NAME) \
+ __libc_lock_unlock_recursive_fn (&(NAME))
+# endif /* __OPTION_EGLIBC_BIG_MACROS */
#else
# define __libc_lock_unlock_recursive(NAME) \
__libc_maybe_call (__pthread_mutex_unlock, (&(NAME)), 0)
Added: trunk/libc/nptl/sysdeps/pthread/small-macros-fns.c
==============================================================================
--- trunk/libc/nptl/sysdeps/pthread/small-macros-fns.c (added)
+++ trunk/libc/nptl/sysdeps/pthread/small-macros-fns.c Mon Jul 27 09:26:25 2009
@@ -1,0 +1,70 @@
+/* EGLIBC: function wrappers for big macros.
+ Copyright (C) 2009 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 Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser 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. */
+
+/* Handle macros from ./bits/libc-lock.h. */
+#if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)
+
+/* Get the macros for function bodies through a back door. */
+# undef __OPTION_EGLIBC_BIG_MACROS
+# define __OPTION_EGLIBC_BIG_MACROS 2
+# include <bits/libc-lock.h>
+
+void
+__libc_lock_lock_fn (__libc_lock_t *name)
+{
+ __libc_lock_lock (*name);
+}
+libc_hidden_def (__libc_lock_lock_fn);
+
+void
+__libc_lock_lock_recursive_fn (__libc_lock_recursive_t *name)
+{
+ __libc_lock_lock_recursive (*name);
+}
+libc_hidden_def (__libc_lock_lock_recursive_fn);
+
+int
+__libc_lock_trylock_fn (__libc_lock_t *name)
+{
+ return __libc_lock_trylock (*name);
+}
+libc_hidden_def (__libc_lock_trylock_fn);
+
+int
+__libc_lock_trylock_recursive_fn (__libc_lock_recursive_t *name)
+{
+ return __libc_lock_trylock_recursive (*name);
+}
+libc_hidden_def (__libc_lock_trylock_recursive_fn);
+
+void
+__libc_lock_unlock_fn (__libc_lock_t *name)
+{
+ __libc_lock_unlock (*name);
+}
+libc_hidden_def (__libc_lock_unlock_fn);
+
+void
+__libc_lock_unlock_recursive_fn (__libc_lock_recursive_t *name)
+{
+ __libc_lock_unlock_recursive (*name);
+}
+libc_hidden_def (__libc_lock_unlock_recursive_fn);
+
+#endif /*defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)*/
Modified: trunk/libc/option-groups.def
==============================================================================
--- trunk/libc/option-groups.def (original)
+++ trunk/libc/option-groups.def Mon Jul 27 09:26:25 2009
@@ -84,6 +84,14 @@
backtrace
backtrace_symbols
backtrace_symbols_fd
+
+config OPTION_EGLIBC_BIG_MACROS
+ bool "Use extensive inline code"
+ help
+ This option group specifies whether certain pieces of code
+ should be inlined to achieve maximum speed. If this option
+ group is not selected, function calls will be used instead,
+ hence reducing the library footprint.
config OPTION_EGLIBC_BSD
bool "BSD-specific functions, and their compatibility stubs"
Modified: trunk/libc/option-groups.defaults
==============================================================================
--- trunk/libc/option-groups.defaults (original)
+++ trunk/libc/option-groups.defaults Mon Jul 27 09:26:25 2009
@@ -10,6 +10,7 @@
# By default, all option groups are enabled.
OPTION_EGLIBC_ADVANCED_INET6 = y
OPTION_EGLIBC_BACKTRACE = y
+OPTION_EGLIBC_BIG_MACROS = y
OPTION_EGLIBC_BSD = y
OPTION_EGLIBC_CXX_TESTS = y
OPTION_EGLIBC_CATGETS = y