mirror of
https://sourceware.org/git/glibc.git
synced 2025-06-12 08:21:58 +03:00
Update.
2001-01-05 H.J. Lu <hjl@gnu.org> * elf/dl-support.c (non_dynamic_init): Move the auxiliary vector checking to ... (_dl_aux_init): Here. New function. Defined only if HAVE_AUX_VECTOR is defined. * sysdeps/generic/libc-start.c (__libc_start_main): Call _dl_aux_init for static binaries if HAVE_AUX_VECTOR is defined. * sysdeps/powerpc/elf/libc-start.c (__libc_start_main): Call _dl_aux_init. * sysdeps/unix/sysv/linux/ldsodefs.h (DL_FIND_AUXV): Removed. (HAVE_AUX_VECTOR): Defined. (_dl_aux_init): Declared.
This commit is contained in:
17
ChangeLog
17
ChangeLog
@ -1,3 +1,20 @@
|
|||||||
|
2001-01-05 H.J. Lu <hjl@gnu.org>
|
||||||
|
|
||||||
|
* elf/dl-support.c (non_dynamic_init): Move the auxiliary
|
||||||
|
vector checking to ...
|
||||||
|
(_dl_aux_init): Here. New function. Defined only if
|
||||||
|
HAVE_AUX_VECTOR is defined.
|
||||||
|
|
||||||
|
* sysdeps/generic/libc-start.c (__libc_start_main): Call
|
||||||
|
_dl_aux_init for static binaries if HAVE_AUX_VECTOR is defined.
|
||||||
|
|
||||||
|
* sysdeps/powerpc/elf/libc-start.c (__libc_start_main): Call
|
||||||
|
_dl_aux_init.
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/ldsodefs.h (DL_FIND_AUXV): Removed.
|
||||||
|
(HAVE_AUX_VECTOR): Defined.
|
||||||
|
(_dl_aux_init): Declared.
|
||||||
|
|
||||||
2001-01-05 Ben Collins <bcollins@debian.org>
|
2001-01-05 Ben Collins <bcollins@debian.org>
|
||||||
|
|
||||||
* manual/string.texi (Finding Tokens in a String): Document XPG
|
* manual/string.texi (Finding Tokens in a String): Document XPG
|
||||||
|
@ -108,34 +108,31 @@ int _dl_starting_up = 1;
|
|||||||
__libc_lock_define_initialized_recursive (, _dl_load_lock)
|
__libc_lock_define_initialized_recursive (, _dl_load_lock)
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef HAVE_AUX_VECTOR
|
||||||
extern int _dl_clktck;
|
extern int _dl_clktck;
|
||||||
|
|
||||||
static void non_dynamic_init (int argc, char **argv, char **envp)
|
void
|
||||||
__attribute__ ((unused));
|
internal_function
|
||||||
|
_dl_aux_init (ElfW(auxv_t) *av)
|
||||||
static void
|
|
||||||
non_dynamic_init (int argc, char **argv, char **envp)
|
|
||||||
{
|
{
|
||||||
#ifdef DL_FIND_AUXV
|
|
||||||
ElfW(auxv_t) *av;
|
|
||||||
|
|
||||||
DL_FIND_AUXV (av, envp);
|
|
||||||
|
|
||||||
for (; av->a_type != AT_NULL; ++av)
|
for (; av->a_type != AT_NULL; ++av)
|
||||||
switch (av->a_type)
|
switch (av->a_type)
|
||||||
{
|
{
|
||||||
case AT_PAGESZ:
|
case AT_PAGESZ:
|
||||||
_dl_pagesize = av->a_un.a_val;
|
_dl_pagesize = av->a_un.a_val;
|
||||||
break;
|
break;
|
||||||
case AT_PLATFORM:
|
|
||||||
_dl_platform = av->a_un.a_ptr;
|
|
||||||
break;
|
|
||||||
case AT_CLKTCK:
|
case AT_CLKTCK:
|
||||||
_dl_clktck = av->a_un.a_val;
|
_dl_clktck = av->a_un.a_val;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static void non_dynamic_init (void) __attribute__ ((unused));
|
||||||
|
|
||||||
|
static void
|
||||||
|
non_dynamic_init (void)
|
||||||
|
{
|
||||||
if (!_dl_pagesize)
|
if (!_dl_pagesize)
|
||||||
_dl_pagesize = __getpagesize ();
|
_dl_pagesize = __getpagesize ();
|
||||||
|
|
||||||
|
@ -1464,7 +1464,7 @@ spirit to the GNU version, but may modify the @var{path} by removing
|
|||||||
trailing '/' characters. If the @var{path} is made up entirely of '/'
|
trailing '/' characters. If the @var{path} is made up entirely of '/'
|
||||||
characters, then "/" will be returned. Also, if @var{path} is
|
characters, then "/" will be returned. Also, if @var{path} is
|
||||||
@code{NULL} or an empty string, then "." is returned. The prototype for
|
@code{NULL} or an empty string, then "." is returned. The prototype for
|
||||||
the XPG version can be found in @file{string.h}.
|
the XPG version can be found in @file{libgen.h}.
|
||||||
|
|
||||||
Example of using XPG @code{basename}:
|
Example of using XPG @code{basename}:
|
||||||
|
|
||||||
|
@ -59,6 +59,10 @@ BP_SYM (__libc_start_main) (int (*main) (int, char **, char **),
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef SHARED
|
#ifndef SHARED
|
||||||
|
# ifdef HAVE_AUX_VECTOR
|
||||||
|
void *__unbounded *__unbounded auxvec;
|
||||||
|
# endif
|
||||||
|
|
||||||
/* The next variable is only here to work around a bug in gcc <= 2.7.2.2.
|
/* The next variable is only here to work around a bug in gcc <= 2.7.2.2.
|
||||||
If the address would be taken inside the expression the optimizer
|
If the address would be taken inside the expression the optimizer
|
||||||
would try to be too smart and throws it away. Grrr. */
|
would try to be too smart and throws it away. Grrr. */
|
||||||
@ -85,6 +89,13 @@ BP_SYM (__libc_start_main) (int (*main) (int, char **, char **),
|
|||||||
loader did the work already. */
|
loader did the work already. */
|
||||||
if (__builtin_expect (__libc_enable_secure, 0))
|
if (__builtin_expect (__libc_enable_secure, 0))
|
||||||
__libc_check_standard_fds ();
|
__libc_check_standard_fds ();
|
||||||
|
|
||||||
|
# ifdef HAVE_AUX_VECTOR
|
||||||
|
for (auxvec = (void *__unbounded *__unbounded) ubp_ev;
|
||||||
|
*auxvec; auxvec++);
|
||||||
|
++auxvec;
|
||||||
|
_dl_aux_init ((ElfW(auxv_t) *) auxvec);
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Register the destructor of the dynamic linker if there is any. */
|
/* Register the destructor of the dynamic linker if there is any. */
|
||||||
|
@ -76,6 +76,7 @@ BP_SYM (__libc_start_main) (int argc, char *__unbounded *__unbounded ubp_av,
|
|||||||
while (*(char *__unbounded *__unbounded) auxvec != NULL)
|
while (*(char *__unbounded *__unbounded) auxvec != NULL)
|
||||||
++auxvec;
|
++auxvec;
|
||||||
++auxvec;
|
++auxvec;
|
||||||
|
_dl_aux_init ((ElfW(auxv_t) *) auxvec);
|
||||||
rtld_fini = NULL;
|
rtld_fini = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,15 +24,10 @@
|
|||||||
|
|
||||||
/* Now define our stuff. */
|
/* Now define our stuff. */
|
||||||
|
|
||||||
/* Locating the auxiliary vector. */
|
/* We have the auxiliary vector. */
|
||||||
#ifndef DL_FIND_AUXV
|
#define HAVE_AUX_VECTOR
|
||||||
# define DL_FIND_AUXV(auxp, envp) \
|
|
||||||
do { \
|
/* Used by static binaries to check the auxiliary vector. */
|
||||||
void **_tmp; \
|
extern void _dl_aux_init (ElfW(auxv_t) *av) internal_function;
|
||||||
for (_tmp = (void **) (envp); *_tmp; ++_tmp) \
|
|
||||||
continue; \
|
|
||||||
(auxp) = (void *) ++_tmp; \
|
|
||||||
} while (0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* ldsodefs.h */
|
#endif /* ldsodefs.h */
|
||||||
|
Reference in New Issue
Block a user