mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-29 11:41:21 +03:00
Update.
2003-08-07 Jakub Jelinek <jakub@redhat.com> * sysdeps/generic/ldsodefs.h (_rtld_global): Add _dl_rtld_lock_recursive and _dl_rtld_unlock_recursive. * elf/rtld.c (rtld_lock_default_lock_recursive, rtld_lock_default_unlock_recursive): New functions. (dl_main): Initialize _dl_rtld_lock_recursive and _dl_rtld_unlock_recursive. 2003-08-05 Jakub Jelinek <jakub@redhat.com> * elf/ldconfig.c (main): Append SLIBDIR and LIBDIR to config_file directories instead of prepending.
This commit is contained in:
14
ChangeLog
14
ChangeLog
@ -1,3 +1,17 @@
|
|||||||
|
2003-08-07 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
* sysdeps/generic/ldsodefs.h (_rtld_global): Add
|
||||||
|
_dl_rtld_lock_recursive and _dl_rtld_unlock_recursive.
|
||||||
|
* elf/rtld.c (rtld_lock_default_lock_recursive,
|
||||||
|
rtld_lock_default_unlock_recursive): New functions.
|
||||||
|
(dl_main): Initialize _dl_rtld_lock_recursive and
|
||||||
|
_dl_rtld_unlock_recursive.
|
||||||
|
|
||||||
|
2003-08-05 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
* elf/ldconfig.c (main): Append SLIBDIR and LIBDIR to
|
||||||
|
config_file directories instead of prepending.
|
||||||
|
|
||||||
2003-08-02 Ulrich Drepper <drepper@redhat.com>
|
2003-08-02 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
* sysdeps/unix/sysv/linux/kernel-features.h: Define
|
* sysdeps/unix/sysv/linux/kernel-features.h: Define
|
||||||
|
@ -1117,12 +1117,12 @@ main (int argc, char **argv)
|
|||||||
|
|
||||||
if (!opt_only_cline)
|
if (!opt_only_cline)
|
||||||
{
|
{
|
||||||
|
parse_conf (config_file);
|
||||||
|
|
||||||
/* Always add the standard search paths. */
|
/* Always add the standard search paths. */
|
||||||
add_system_dir (SLIBDIR);
|
add_system_dir (SLIBDIR);
|
||||||
if (strcmp (SLIBDIR, LIBDIR))
|
if (strcmp (SLIBDIR, LIBDIR))
|
||||||
add_system_dir (LIBDIR);
|
add_system_dir (LIBDIR);
|
||||||
|
|
||||||
parse_conf (config_file);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
search_dirs ();
|
search_dirs ();
|
||||||
|
20
elf/rtld.c
20
elf/rtld.c
@ -588,6 +588,20 @@ _dl_initial_error_catch_tsd (void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined SHARED && defined _LIBC_REENTRANT \
|
||||||
|
&& defined __rtld_lock_default_lock_recursive
|
||||||
|
static void rtld_lock_default_lock_recursive (void *lock)
|
||||||
|
{
|
||||||
|
__rtld_lock_default_lock_recursive (lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void rtld_lock_default_unlock_recursive (void *lock)
|
||||||
|
{
|
||||||
|
__rtld_lock_default_unlock_recursive (lock);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
static const char *library_path; /* The library search path. */
|
static const char *library_path; /* The library search path. */
|
||||||
static const char *preloadlist; /* The list preloaded objects. */
|
static const char *preloadlist; /* The list preloaded objects. */
|
||||||
static int version_info; /* Nonzero if information about
|
static int version_info; /* Nonzero if information about
|
||||||
@ -626,6 +640,12 @@ dl_main (const ElfW(Phdr) *phdr,
|
|||||||
GL(dl_init_static_tls) = &_dl_nothread_init_static_tls;
|
GL(dl_init_static_tls) = &_dl_nothread_init_static_tls;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined SHARED && defined _LIBC_REENTRANT \
|
||||||
|
&& defined __rtld_lock_default_lock_recursive
|
||||||
|
GL(dl_rtld_lock_recursive) = rtld_lock_default_lock_recursive;
|
||||||
|
GL(dl_rtld_unlock_recursive) = rtld_lock_default_unlock_recursive;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Process the environment variable which control the behaviour. */
|
/* Process the environment variable which control the behaviour. */
|
||||||
process_envvars (&mode);
|
process_envvars (&mode);
|
||||||
|
|
||||||
|
@ -1,3 +1,16 @@
|
|||||||
|
2003-08-07 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
* sysdeps/pthread/bits/libc-lock.h [_LIBC && SHARED]
|
||||||
|
(__rtld_lock_default_lock_recursive,
|
||||||
|
__rtld_lock_default_unlock_recursive): Define.
|
||||||
|
[_LIBC && SHARED] (__rtld_lock_lock_recursive,
|
||||||
|
__rtld_lock_unlock_recursive): Define using
|
||||||
|
GL(_dl_rtld_*lock_recursive).
|
||||||
|
* pthread.c (pthread_initialize): Initialize _dl_rtld_lock_recursive
|
||||||
|
and _dl_rtld_unlock_recursive. Lock GL(_dl_load_lock) the same
|
||||||
|
number of times as GL(_dl_load_lock) using non-mt implementation was
|
||||||
|
nested.
|
||||||
|
|
||||||
2003-07-31 Jakub Jelinek <jakub@redhat.com>
|
2003-07-31 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
* sysdeps/pthread/bits/typesizes.h (__SSIZE_T_TYPE): Define.
|
* sysdeps/pthread/bits/typesizes.h (__SSIZE_T_TYPE): Define.
|
||||||
|
@ -588,6 +588,15 @@ static void pthread_initialize(void)
|
|||||||
/* Transfer the old value from the dynamic linker's internal location. */
|
/* Transfer the old value from the dynamic linker's internal location. */
|
||||||
*__libc_dl_error_tsd () = *(*GL(dl_error_catch_tsd)) ();
|
*__libc_dl_error_tsd () = *(*GL(dl_error_catch_tsd)) ();
|
||||||
GL(dl_error_catch_tsd) = &__libc_dl_error_tsd;
|
GL(dl_error_catch_tsd) = &__libc_dl_error_tsd;
|
||||||
|
|
||||||
|
/* Make __rtld_lock_{,un}lock_recursive use pthread_mutex_{,un}lock,
|
||||||
|
keep the lock count from the ld.so implementation. */
|
||||||
|
GL(dl_rtld_lock_recursive) = (void *) __pthread_mutex_lock;
|
||||||
|
GL(dl_rtld_unlock_recursive) = (void *) __pthread_mutex_unlock;
|
||||||
|
unsigned int rtld_lock_count = GL(dl_load_lock).mutex.__m_count;
|
||||||
|
GL(dl_load_lock).mutex.__m_count = 0;
|
||||||
|
while (rtld_lock_count-- > 0)
|
||||||
|
__pthread_mutex_lock (&GL(dl_load_lock).mutex);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USE_TLS
|
#ifdef USE_TLS
|
||||||
|
@ -180,7 +180,6 @@ typedef pthread_key_t __libc_key_t;
|
|||||||
|
|
||||||
/* Lock the recursive named lock variable. */
|
/* Lock the recursive named lock variable. */
|
||||||
#define __libc_lock_lock_recursive(NAME) __libc_lock_lock ((NAME).mutex)
|
#define __libc_lock_lock_recursive(NAME) __libc_lock_lock ((NAME).mutex)
|
||||||
#define __rtld_lock_lock_recursive(NAME) __libc_lock_lock_recursive (NAME)
|
|
||||||
|
|
||||||
/* Try to lock the named lock variable. */
|
/* Try to lock the named lock variable. */
|
||||||
#define __libc_lock_trylock(NAME) \
|
#define __libc_lock_trylock(NAME) \
|
||||||
@ -203,8 +202,23 @@ typedef pthread_key_t __libc_key_t;
|
|||||||
|
|
||||||
/* Unlock the recursive named lock variable. */
|
/* Unlock the recursive named lock variable. */
|
||||||
#define __libc_lock_unlock_recursive(NAME) __libc_lock_unlock ((NAME).mutex)
|
#define __libc_lock_unlock_recursive(NAME) __libc_lock_unlock ((NAME).mutex)
|
||||||
#define __rtld_lock_unlock_recursive(NAME) __libc_lock_unlock_recursive (NAME)
|
|
||||||
|
|
||||||
|
#if defined _LIBC && defined SHARED
|
||||||
|
# define __rtld_lock_default_lock_recursive(lock) \
|
||||||
|
++((pthread_mutex_t *)(lock))->__m_count;
|
||||||
|
|
||||||
|
# define __rtld_lock_default_unlock_recursive(lock) \
|
||||||
|
--((pthread_mutex_t *)(lock))->__m_count;
|
||||||
|
|
||||||
|
# define __rtld_lock_lock_recursive(NAME) \
|
||||||
|
GL(dl_rtld_lock_recursive) (&(NAME).mutex)
|
||||||
|
|
||||||
|
# define __rtld_lock_unlock_recursive(NAME) \
|
||||||
|
GL(dl_rtld_unlock_recursive) (&(NAME).mutex)
|
||||||
|
#else
|
||||||
|
#define __rtld_lock_lock_recursive(NAME) __libc_lock_lock_recursive (NAME)
|
||||||
|
#define __rtld_lock_unlock_recursive(NAME) __libc_lock_unlock_recursive (NAME)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Define once control variable. */
|
/* Define once control variable. */
|
||||||
#if PTHREAD_ONCE_INIT == 0
|
#if PTHREAD_ONCE_INIT == 0
|
||||||
|
@ -1,3 +1,19 @@
|
|||||||
|
2003-08-07 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
* sysdeps/pthread/bits/libc-lock.h [_LIBC && SHARED]
|
||||||
|
(__rtld_lock_default_lock_recursive,
|
||||||
|
__rtld_lock_default_unlock_recursive): Define.
|
||||||
|
[_LIBC && SHARED] (__rtld_lock_lock_recursive,
|
||||||
|
__rtld_lock_unlock_recursive): Define using
|
||||||
|
GL(_dl_rtld_*lock_recursive).
|
||||||
|
* init.c (__pthread_initialize_minimal_internal): Initialize
|
||||||
|
_dl_rtld_lock_recursive and _dl_rtld_unlock_recursive.
|
||||||
|
Lock GL(_dl_load_lock) the same number of times as
|
||||||
|
GL(_dl_load_lock) using non-mt implementation was nested.
|
||||||
|
|
||||||
|
* pthreadP.h (__pthread_cleanup_upto): Add hidden_proto.
|
||||||
|
* pt-longjmp.c (__pthread_cleanup_upto): Add hidden_def.
|
||||||
|
|
||||||
2003-08-06 Jakub Jelinek <jakub@redhat.com>
|
2003-08-06 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
* tst-cancel17.c (do_test): Make len2 maximum of page size and
|
* tst-cancel17.c (do_test): Make len2 maximum of page size and
|
||||||
|
@ -270,6 +270,15 @@ __pthread_initialize_minimal_internal (void)
|
|||||||
/* Transfer the old value from the dynamic linker's internal location. */
|
/* Transfer the old value from the dynamic linker's internal location. */
|
||||||
*__libc_dl_error_tsd () = *(*GL(dl_error_catch_tsd)) ();
|
*__libc_dl_error_tsd () = *(*GL(dl_error_catch_tsd)) ();
|
||||||
GL(dl_error_catch_tsd) = &__libc_dl_error_tsd;
|
GL(dl_error_catch_tsd) = &__libc_dl_error_tsd;
|
||||||
|
|
||||||
|
/* Make __rtld_lock_{,un}lock_recursive use pthread_mutex_{,un}lock,
|
||||||
|
keep the lock count from the ld.so implementation. */
|
||||||
|
GL(dl_rtld_lock_recursive) = (void *) INTUSE (__pthread_mutex_lock);
|
||||||
|
GL(dl_rtld_unlock_recursive) = (void *) INTUSE (__pthread_mutex_unlock);
|
||||||
|
unsigned int rtld_lock_count = GL(dl_load_lock).mutex.__data.__count;
|
||||||
|
GL(dl_load_lock).mutex.__data.__count = 0;
|
||||||
|
while (rtld_lock_count-- > 0)
|
||||||
|
INTUSE (__pthread_mutex_lock) (&GL(dl_load_lock).mutex);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
GL(dl_init_static_tls) = &__pthread_init_static_tls;
|
GL(dl_init_static_tls) = &__pthread_init_static_tls;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2002 Free Software Foundation, Inc.
|
/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||||
|
|
||||||
@ -54,7 +54,7 @@ __pthread_cleanup_upto (__jmp_buf target, char *targetframe)
|
|||||||
|
|
||||||
THREAD_SETMEM (self, cleanup, cbuf);
|
THREAD_SETMEM (self, cleanup, cbuf);
|
||||||
}
|
}
|
||||||
|
hidden_def (__pthread_cleanup_upto)
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -217,6 +217,9 @@ extern void __reclaim_stacks (void) attribute_hidden;
|
|||||||
|
|
||||||
/* longjmp handling. */
|
/* longjmp handling. */
|
||||||
extern void __pthread_cleanup_upto (__jmp_buf target, char *targetframe);
|
extern void __pthread_cleanup_upto (__jmp_buf target, char *targetframe);
|
||||||
|
#if defined NOT_IN_libc && defined IS_IN_libpthread
|
||||||
|
hidden_proto (__pthread_cleanup_upto)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Functions with versioned interfaces. */
|
/* Functions with versioned interfaces. */
|
||||||
|
@ -248,9 +248,6 @@ typedef pthread_key_t __libc_key_t;
|
|||||||
__libc_maybe_call (__pthread_mutex_lock, (&(NAME).mutex), 0)
|
__libc_maybe_call (__pthread_mutex_lock, (&(NAME).mutex), 0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define __rtld_lock_lock_recursive(NAME) \
|
|
||||||
__libc_maybe_call (__pthread_mutex_lock, (&(NAME).mutex), 0)
|
|
||||||
|
|
||||||
/* Try to lock the named lock variable. */
|
/* Try to lock the named lock variable. */
|
||||||
#if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)
|
#if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)
|
||||||
# define __libc_lock_trylock(NAME) \
|
# define __libc_lock_trylock(NAME) \
|
||||||
@ -319,8 +316,25 @@ typedef pthread_key_t __libc_key_t;
|
|||||||
__libc_maybe_call (__pthread_mutex_unlock, (&(NAME)), 0)
|
__libc_maybe_call (__pthread_mutex_unlock, (&(NAME)), 0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define __rtld_lock_unlock_recursive(NAME) \
|
#if defined _LIBC && defined SHARED
|
||||||
|
# define __rtld_lock_default_lock_recursive(lock) \
|
||||||
|
++((pthread_mutex_t *)(lock))->__data.__count;
|
||||||
|
|
||||||
|
# define __rtld_lock_default_unlock_recursive(lock) \
|
||||||
|
--((pthread_mutex_t *)(lock))->__data.__count;
|
||||||
|
|
||||||
|
# define __rtld_lock_lock_recursive(NAME) \
|
||||||
|
GL(dl_rtld_lock_recursive) (&(NAME).mutex)
|
||||||
|
|
||||||
|
# define __rtld_lock_unlock_recursive(NAME) \
|
||||||
|
GL(dl_rtld_unlock_recursive) (&(NAME).mutex)
|
||||||
|
#else
|
||||||
|
# define __rtld_lock_lock_recursive(NAME) \
|
||||||
|
__libc_maybe_call (__pthread_mutex_lock, (&(NAME).mutex), 0)
|
||||||
|
|
||||||
|
# define __rtld_lock_unlock_recursive(NAME) \
|
||||||
__libc_maybe_call (__pthread_mutex_unlock, (&(NAME).mutex), 0)
|
__libc_maybe_call (__pthread_mutex_unlock, (&(NAME).mutex), 0)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Define once control variable. */
|
/* Define once control variable. */
|
||||||
#if PTHREAD_ONCE_INIT == 0
|
#if PTHREAD_ONCE_INIT == 0
|
||||||
|
@ -349,6 +349,12 @@ struct rtld_global
|
|||||||
/* Structure describing the dynamic linker itself. */
|
/* Structure describing the dynamic linker itself. */
|
||||||
EXTERN struct link_map _dl_rtld_map;
|
EXTERN struct link_map _dl_rtld_map;
|
||||||
|
|
||||||
|
#if defined SHARED && defined _LIBC_REENTRANT \
|
||||||
|
&& defined __rtld_lock_default_lock_recursive
|
||||||
|
EXTERN void (*_dl_rtld_lock_recursive) (void *);
|
||||||
|
EXTERN void (*_dl_rtld_unlock_recursive) (void *);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Keep the conditional TLS members at the end so the layout of the
|
/* Keep the conditional TLS members at the end so the layout of the
|
||||||
structure used by !USE_TLS code matches the prefix of the layout in
|
structure used by !USE_TLS code matches the prefix of the layout in
|
||||||
the USE_TLS rtld. Note that `struct link_map' is conditionally
|
the USE_TLS rtld. Note that `struct link_map' is conditionally
|
||||||
|
@ -45,13 +45,6 @@ __fpathconf (fd, name)
|
|||||||
case _PC_2_SYMLINKS:
|
case _PC_2_SYMLINKS:
|
||||||
return __statfs_symlinks (__fstatfs (fd, &fsbuf), &fsbuf);
|
return __statfs_symlinks (__fstatfs (fd, &fsbuf), &fsbuf);
|
||||||
|
|
||||||
case _PC_PIPE_BUF:
|
|
||||||
#ifdef PIPE_BUF
|
|
||||||
return PIPE_BUF;
|
|
||||||
#else
|
|
||||||
return __getpagesize ();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return posix_fpathconf (fd, name);
|
return posix_fpathconf (fd, name);
|
||||||
}
|
}
|
||||||
|
@ -46,13 +46,6 @@ __pathconf (const char *file, int name)
|
|||||||
case _PC_2_SYMLINKS:
|
case _PC_2_SYMLINKS:
|
||||||
return __statfs_symlinks (__statfs (file, &fsbuf), &fsbuf);
|
return __statfs_symlinks (__statfs (file, &fsbuf), &fsbuf);
|
||||||
|
|
||||||
case _PC_PIPE_BUF:
|
|
||||||
#ifdef PIPE_BUF
|
|
||||||
return PIPE_BUF;
|
|
||||||
#else
|
|
||||||
return __getpagesize ();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return posix_pathconf (file, name);
|
return posix_pathconf (file, name);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user