From 87936cd0130414cccc8a7427498dd5491ec2664f Mon Sep 17 00:00:00 2001 From: "Peter S. Mazinger" Date: Wed, 23 Mar 2011 17:08:07 +0100 Subject: errno and *_init cleanup Define a common view of __errno_location, __h_errno_location in common header and use that everywhere, __uClibc_main.c is no special. The rule adopted: for enabled threads we make in libc the __GI_x() variants strong, x() weak and (should) provide another strong x() in libpthread. If threads are disabled, even the __GI_x() variants are weak. _stdio_init,_stdio_term,_locale_init: make all hidden weak in common header Signed-off-by: Peter S. Mazinger Signed-off-by: Bernhard Reutner-Fischer --- include/netdb.h | 5 +++++ libc/misc/internals/__errno_location.c | 9 +-------- libc/misc/internals/__h_errno_location.c | 2 +- libc/misc/internals/__uClibc_main.c | 18 ++++++------------ libc/misc/locale/locale.c | 1 - libc/stdio/_stdio.c | 2 +- libc/sysdeps/linux/common/bits/errno.h | 5 +++++ libc/sysdeps/linux/common/bits/uClibc_locale.h | 2 +- libc/sysdeps/linux/common/bits/uClibc_stdio.h | 4 ++-- 9 files changed, 22 insertions(+), 26 deletions(-) diff --git a/include/netdb.h b/include/netdb.h index 10669b9a5..0bf79c0e3 100644 --- a/include/netdb.h +++ b/include/netdb.h @@ -59,6 +59,11 @@ __BEGIN_DECLS /* Function to get address of global `h_errno' variable. */ extern int *__h_errno_location (void) __THROW __attribute__ ((__const__)); +#ifdef _LIBC +# ifndef __UCLIBC_HAS_THREADS__ +extern int weak_const_function *__h_errno_location(void); +# endif +#endif libc_hidden_proto(__h_errno_location) /* Macros for accessing h_errno from inside libc. */ diff --git a/libc/misc/internals/__errno_location.c b/libc/misc/internals/__errno_location.c index aec7641ce..340950037 100644 --- a/libc/misc/internals/__errno_location.c +++ b/libc/misc/internals/__errno_location.c @@ -6,15 +6,8 @@ #include "internal_errno.h" -/* psm: moved to bits/errno.h: */ -int * -#ifndef __UCLIBC_HAS_THREADS__ -weak_const_function -#endif -__errno_location (void) +int *__errno_location(void) { return &errno; } -#ifdef IS_IN_libc /* not really need, only to keep in sync w/ libc_hidden_proto */ libc_hidden_weak(__errno_location) -#endif diff --git a/libc/misc/internals/__h_errno_location.c b/libc/misc/internals/__h_errno_location.c index 213d39894..113677682 100644 --- a/libc/misc/internals/__h_errno_location.c +++ b/libc/misc/internals/__h_errno_location.c @@ -6,7 +6,7 @@ #include "internal_errno.h" -int * weak_const_function __h_errno_location (void) +int *__h_errno_location(void) { return &h_errno; } diff --git a/libc/misc/internals/__uClibc_main.c b/libc/misc/internals/__uClibc_main.c index bda1bb8b4..9f7258d8a 100644 --- a/libc/misc/internals/__uClibc_main.c +++ b/libc/misc/internals/__uClibc_main.c @@ -15,9 +15,6 @@ */ #include -#ifndef __UCLIBC_HAS_THREADS_NATIVE__ -#define _ERRNO_H -#endif #include #include #include @@ -25,13 +22,13 @@ #include #include #include -#include -#include +#include +#include +#include #include #include #include #ifdef __UCLIBC_HAS_THREADS_NATIVE__ -#include #include #include #include @@ -39,6 +36,9 @@ #ifdef __UCLIBC_HAS_THREADS__ #include #endif +#ifdef __UCLIBC_HAS_LOCALE__ +#include +#endif #ifndef SHARED void *__libc_stack_end = NULL; @@ -116,12 +116,6 @@ static __always_inline int not_null_ptr(const void *p) /* * Prototypes. */ -extern int *weak_const_function __errno_location(void); -extern int *weak_const_function __h_errno_location(void); -extern void weak_function _stdio_init(void) attribute_hidden; -#ifdef __UCLIBC_HAS_LOCALE__ -extern void weak_function _locale_init(void) attribute_hidden; -#endif #ifdef __UCLIBC_HAS_THREADS__ #if !defined (__UCLIBC_HAS_THREADS_NATIVE__) || defined (SHARED) extern void weak_function __pthread_initialize_minimal(void); diff --git a/libc/misc/locale/locale.c b/libc/misc/locale/locale.c index 254eb70d5..2c99f06b7 100644 --- a/libc/misc/locale/locale.c +++ b/libc/misc/locale/locale.c @@ -906,7 +906,6 @@ void attribute_hidden _locale_init_l(__locale_t base) _locale_set_l((unsigned char*) C_LOCALE_SELECTOR, base); } -void _locale_init(void) attribute_hidden; void _locale_init(void) { /* TODO: mmap the locale file */ diff --git a/libc/stdio/_stdio.c b/libc/stdio/_stdio.c index f9cbd46ea..397997228 100644 --- a/libc/stdio/_stdio.c +++ b/libc/stdio/_stdio.c @@ -252,7 +252,7 @@ void _stdio_term(void) } #if defined __STDIO_BUFFERS || !defined __UCLIBC__ -void attribute_hidden _stdio_init(void) +void _stdio_init(void) { #ifdef __STDIO_BUFFERS int old_errno = errno; diff --git a/libc/sysdeps/linux/common/bits/errno.h b/libc/sysdeps/linux/common/bits/errno.h index 0bf6354fb..459cc7058 100644 --- a/libc/sysdeps/linux/common/bits/errno.h +++ b/libc/sysdeps/linux/common/bits/errno.h @@ -43,6 +43,11 @@ # ifndef __ASSEMBLER__ /* Function to get address of global `errno' variable. */ extern int *__errno_location (void) __THROW __attribute__ ((__const__)); +# ifdef _LIBC +# ifndef __UCLIBC_HAS_THREADS__ +extern int weak_const_function *__errno_location(void); +# endif +# endif libc_hidden_proto(__errno_location) # ifdef __UCLIBC_HAS_THREADS__ diff --git a/libc/sysdeps/linux/common/bits/uClibc_locale.h b/libc/sysdeps/linux/common/bits/uClibc_locale.h index 05d9b4d40..6273fa392 100644 --- a/libc/sysdeps/linux/common/bits/uClibc_locale.h +++ b/libc/sysdeps/linux/common/bits/uClibc_locale.h @@ -93,7 +93,7 @@ typedef struct __uclibc_locale_struct *__locale_t; #ifdef _LIBC /* extern void _locale_set(const unsigned char *p); */ -/* extern void _locale_init(void); */ +extern void weak_function _locale_init(void) attribute_hidden; #include #include diff --git a/libc/sysdeps/linux/common/bits/uClibc_stdio.h b/libc/sysdeps/linux/common/bits/uClibc_stdio.h index 06000a85c..095220aa6 100644 --- a/libc/sysdeps/linux/common/bits/uClibc_stdio.h +++ b/libc/sysdeps/linux/common/bits/uClibc_stdio.h @@ -327,8 +327,8 @@ struct __STDIO_FILE_STRUCT { **********************************************************************/ #if defined _LIBC && (defined IS_IN_libc || defined NOT_IN_libc) -extern void _stdio_init(void) attribute_hidden; -extern void _stdio_term(void) attribute_hidden; +extern void weak_function _stdio_init(void) attribute_hidden; +extern void weak_function _stdio_term(void) attribute_hidden; #ifdef __STDIO_HAS_OPENLIST -- cgit v1.2.3