1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-06-12 08:21:58 +03:00
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:
Ulrich Drepper
2001-01-07 02:00:21 +00:00
parent bf798a9534
commit e4a5f77de6
6 changed files with 45 additions and 24 deletions

View File

@ -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

View File

@ -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 ();

View File

@ -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}:

View File

@ -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. */

View File

@ -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;
} }

View File

@ -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 */