diff options
author | Ulrich Drepper <drepper@redhat.com> | 1997-07-26 02:33:30 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1997-07-26 02:33:30 +0000 |
commit | 0a54e4010fe0085cd36deaff9442a7e88de3270d (patch) | |
tree | 050a1a47e17e5f1baa26a244524863884d8dc630 /sysdeps/generic | |
parent | 1522c3682ccf373e9d393ca73350be284fcf773b (diff) | |
download | glibc-0a54e4010fe0085cd36deaff9442a7e88de3270d.tar.gz glibc-0a54e4010fe0085cd36deaff9442a7e88de3270d.tar.xz glibc-0a54e4010fe0085cd36deaff9442a7e88de3270d.zip |
Update. cvs/libc-ud-970725
1997-07-26 04:14 Ulrich Drepper <drepper@cygnus.com> * elf/Makefile (distribute): Add genrtldtbl.awk. (before-compile): Add rtldtbl.h. (GAWK): New variable. (generated): Add trusted-dirs.h and rtldtbl.h. ($(objpfx)rtldtbl.h): New rule. File is needed by dl-load.c. * elf/dl-load.c: Rewrite. Now use cache and look for shared objects in machine dependent directories. * elf/dl-object.c (_dl_new_object): Initialize l_rpath_dirs member. * elf/dl-support.c: Rename function to non_dynamic_init and add initialization for _dl_platform, _dl_platformlen, _dl_pagesize and call to initializer for search path. * elf/elf.h: Add AT_PLATFORM and AT_HWCAP. * elf/genrtldtbl.awk: New file. * elf/link.h: Add type definitions and declarations for search path cache. * elf/rtld.c: Add definitions of variables used for search path cache. * sysdeps/generic/dl-sysdep.c: Let auxiliary vector initialize _dl_platform. Initialize _dl_pagesize early and use this value. * sysdeps/i386/dl-machine.h: Add code for _dl_platform handling. * sysdeps/mach/hurd/dl-sysdep.c: Initialize _dl_pagesize. * sysdeps/unix/sysv/linux/dl-sysdep.c: Use _dl_pagesize instead of calling getpagesize. * elf/dl-error.c (_dl_signal_error): Make message nicer. * nss/libnss_files.map: Fix typo. Reported by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>. * sysdeps/generic/strsep.c: Optimize case where separator set contains only one character. * sysdeps/libm-ieee754/s_ccosh.c: Correct sign of result for real == +-Inf. * sysdeps/libm-ieee754/s_ccoshf.c: Likewise. * sysdeps/libm-ieee754/s_ccoshl.c: Likewise. 1997-07-25 09:15 H.J. Lu <hjl@gnu.ai.mit.edu> * sysdeps/sparc/udiv_qrnnd.S: Check PIC instead of __PIC__. * sysdeps/unix/sysv/linux/sparc/__sigtrampoline.S: Likewise. * sysdeps/unix/mips/sysdep.S: Likewise. * sysdeps/unix/sysv/linux/mips/clone.S: Likewise. * sysdeps/mips/bsd-_setjmp.S: Remove __PIC__ comment. * sysdeps/mips/bsd-setjmp.S: Likewise. * sysdeps/mips/dl-machine.h: Remove extra stuff. * sysdeps/mips/mips64/dl-machine.h: Likewise. 1997-07-25 18:55 Philip Blundell <Philip.Blundell@pobox.com> * sysdeps/standalone/arm/sysdep.c: New file. 1997-07-25 13:25 Philip Blundell <Philip.Blundell@pobox.com> * aout/Makefile: New file. * Makeconfig (binfmt-subdir): Assume a.out when not ELF. * sysdeps/generic/machine-gmon.h: Add warning about limitations of __builtin_return_address(). * sysdeps/arm/machine-gmon.h: New file, use assembly to avoid above problem. 1997-07-25 16:24 H.J. Lu <hjl@gnu.ai.mit.edu> * elf/dl-deps.c (_dl_map_object_deps): Fix a typo. 1997-07-22 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * math/libm-test.c (ccos_test, ccosh_test): Fix sign in some tests. 1997-07-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * sunrpc/clnt_udp.c (clntudp_call): Rename cu_wait from timeout to not shadow the variable in the outer scope.
Diffstat (limited to 'sysdeps/generic')
-rw-r--r-- | sysdeps/generic/dl-sysdep.c | 37 | ||||
-rw-r--r-- | sysdeps/generic/machine-gmon.h | 4 | ||||
-rw-r--r-- | sysdeps/generic/strsep.c | 23 |
3 files changed, 52 insertions, 12 deletions
diff --git a/sysdeps/generic/dl-sysdep.c b/sysdeps/generic/dl-sysdep.c index e18f0b89a4..4f97f8547b 100644 --- a/sysdeps/generic/dl-sysdep.c +++ b/sysdeps/generic/dl-sysdep.c @@ -26,11 +26,14 @@ #include <link.h> #include <unistd.h> +#include <dl-machine.h> extern int _dl_argc; extern char **_dl_argv; extern char **_environ; extern size_t _dl_pagesize; +extern const char *_dl_platform; +extern size_t _dl_platformlen; extern void _end; extern void ENTRY_POINT (void); @@ -57,6 +60,7 @@ _dl_sysdep_start (void **start_argptr, _dl_argc = *(long *) start_argptr; _dl_argv = (char **) start_argptr + 1; _environ = &_dl_argv[_dl_argc + 1]; + _dl_platform = NULL; /* Default to nothing known about the platform. */ start_argptr = (void **) _environ; while (*start_argptr) ++start_argptr; @@ -93,6 +97,12 @@ _dl_sysdep_start (void **start_argptr, case AT_EGID: egid = av->a_un.a_val; break; + case AT_PLATFORM: + _dl_platform = av->a_un.a_ptr; + break; + case AT_HWCAP: + /* Well, what shall we use? A string or an integer with bits? */ + break; } /* Linux doesn't provide us with any of these values on the stack @@ -107,21 +117,28 @@ _dl_sysdep_start (void **start_argptr, __libc_enable_secure = uid != euid || gid != egid; + if (_dl_pagesize == 0) + _dl_pagesize = __getpagesize (); + #ifdef DL_SYSDEP_INIT DL_SYSDEP_INIT; #endif +#ifdef DL_PLATFORM_INIT + DL_PLATFORM_INIT; +#endif + + /* Determine the length of the platform name. */ + if (_dl_platform != NULL) + _dl_platformlen = strlen (_dl_platform); + if (__sbrk (0) == &_end) - { - /* The dynamic linker was run as a program, and so the initial break - starts just after our bss, at &_end. The malloc in dl-minimal.c - will consume the rest of this page, so tell the kernel to move the - break up that far. When the user program examines its break, it - will see this new value and not clobber our data. */ - size_t pg = __getpagesize (); - - __sbrk (pg - ((&_end - (void *) 0) & (pg - 1))); - } + /* The dynamic linker was run as a program, and so the initial break + starts just after our bss, at &_end. The malloc in dl-minimal.c + will consume the rest of this page, so tell the kernel to move the + break up that far. When the user program examines its break, it + will see this new value and not clobber our data. */ + __sbrk (_dl_pagesize - ((&_end - (void *) 0) & (_dl_pagesize - 1))); (*dl_main) (phdr, phnum, &user_entry); return user_entry; diff --git a/sysdeps/generic/machine-gmon.h b/sysdeps/generic/machine-gmon.h index c4a2168322..3b63707eaf 100644 --- a/sysdeps/generic/machine-gmon.h +++ b/sysdeps/generic/machine-gmon.h @@ -22,6 +22,10 @@ void *__builtin_return_address (unsigned int N) returns the return address of the frame N frames up. */ +/* Be warned that GCC cannot usefully compile __builtin_return_address(N) + for N != 0 on all machines. In this case, you may have to write + your own version of _mcount(). */ + #if __GNUC__ < 2 #error "This file uses __builtin_return_address, a GCC 2 extension." #endif diff --git a/sysdeps/generic/strsep.c b/sysdeps/generic/strsep.c index d17e53a772..b2c7e90c39 100644 --- a/sysdeps/generic/strsep.c +++ b/sysdeps/generic/strsep.c @@ -27,8 +27,27 @@ __strsep (char **stringp, const char *delim) if (! begin || *begin == '\0') return NULL; - /* Find the end of the token. */ - end = strpbrk (begin, delim); + /* A frequent case is when the delimiter string contains only one + character. Here we don't need to call the expensive `strpbrk' + function and instead work using `strchr'. */ + if (delim[0] == '\0' || delim[1] == '\0') + { + char ch = delim[0]; + + if (ch == '\0') + end = NULL; + else + { + while (*begin == ch) + ++begin; + + end = strchr (begin, delim[0]); + } + } + else + /* Find the end of the token. */ + end = strpbrk (begin, delim); + if (end) { /* Terminate the token and set *STRINGP past NUL character. */ |