diff options
author | Ulrich Drepper <drepper@redhat.com> | 2000-06-13 07:33:12 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2000-06-13 07:33:12 +0000 |
commit | ab95290c787fb6e22bf03f23059b97559e1ad7d7 (patch) | |
tree | 892cff92b6d49d7c99a6d99c077882642fe6eda7 /sysdeps/generic/libc-start.c | |
parent | a5c88158b6170149fa1b98e1704ed9dcab457314 (diff) | |
download | glibc-ab95290c787fb6e22bf03f23059b97559e1ad7d7.tar.gz glibc-ab95290c787fb6e22bf03f23059b97559e1ad7d7.tar.xz glibc-ab95290c787fb6e22bf03f23059b97559e1ad7d7.zip |
Update.
2000-06-13 Ulrich Drepper <drepper@redhat.com> * misc/sys/cdefs.h: Define __bounded and __unbounded if __BOUNDED_POINTERS__ is not defined. 2000-06-07 Greg McGary <greg@mcgary.org> * sysdeps/generic/bp-sym.h: New file. * sysdeps/generic/bp-start.h: New file. * sysdeps/i386/elf/start.S: Designate BP symbols. * sysdeps/generic/libc-start.c: Wrap bounds around argv & envp and each of their string members. 2000-06-07 Greg McGary <greg@mcgary.org> * sysdeps/unix/make-syscalls.sh: Add comments to output that aid debugging & comprehension. Map simple syscall signatures to number of args. Generate BP syscall thunk definitions. * sysdeps/generic/bp-thunks.h: New file. * sysdeps/unix/syscalls.list: Replace arg-count with simple return+arg signature. * sysdeps/unix/common/syscalls.list: Likewise. * sysdeps/unix/inet/syscalls.list: Likewise. * sysdeps/unix/mman/syscalls.list: Likewise. * sysdeps/unix/sysv/syscalls.list: Likewise. * sysdeps/unix/sysv/linux/syscalls.list: Likewise. * sysdeps/unix/sysv/linux/i386/syscalls.list: Likewise. 2000-06-07 Greg McGary <greg@mcgary.org> * Makeconfig (CPPFLAGS-.ob): pass -fbounded-pointers for all files *.[cS]. (CFLAGS-.ob): Don't optimize sibling calls. (bppfx): New variable. * Makerules (elide-bp-thunks): New variable. (elide-routines.*): Elide BP-* files for all but *.ob. (sources): Include bp-thunks. * iconv/gconv_simple.c: Remove unnecessary prototype. * iconv/gconv_trans.c: Pretty print.
Diffstat (limited to 'sysdeps/generic/libc-start.c')
-rw-r--r-- | sysdeps/generic/libc-start.c | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/sysdeps/generic/libc-start.c b/sysdeps/generic/libc-start.c index f5486f91e1..a9517c3218 100644 --- a/sysdeps/generic/libc-start.c +++ b/sysdeps/generic/libc-start.c @@ -19,22 +19,34 @@ #include <stdlib.h> #include <unistd.h> #include <ldsodefs.h> +#include <bp-start.h> +#include <bp-sym.h> extern void __libc_init_first (int argc, char **argv, char **envp); extern int _dl_starting_up; weak_extern (_dl_starting_up) extern int __libc_multiple_libcs; -extern void *__libc_stack_end; +extern void *__unbounded __libc_stack_end; /* Prototype for local function. */ extern void __libc_check_standard_fds (void); int -__libc_start_main (int (*main) (int, char **, char **), int argc, - char **argv, void (*init) (void), void (*fini) (void), - void (*rtld_fini) (void), void *stack_end) +/* GKM FIXME: GCC: this should get __BP_ prefix by virtue of the + BPs in the arglist of startup_info.main and startup_info.init. */ +BP_SYM (__libc_start_main) (int (*main) (int, char **, char **), + int argc, char *__unbounded *__unbounded ubp_av, + void (*init) (void), void (*fini) (void), + void (*rtld_fini) (void), void *__unbounded stack_end) { + char *__unbounded *__unbounded ubp_ev = &ubp_av[argc + 1]; +#if __BOUNDED_POINTERS__ + char **argv; +#else +# define argv ubp_av +#endif + #ifndef SHARED /* 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 @@ -44,12 +56,11 @@ __libc_start_main (int (*main) (int, char **, char **), int argc, __libc_multiple_libcs = dummy_addr && !_dl_starting_up; #endif + INIT_ARGV_and_ENVIRON; + /* Store the lowest stack address. */ __libc_stack_end = stack_end; - /* Set the global _environ variable correctly. */ - __environ = &argv[argc + 1]; - #ifndef SHARED /* Some security at this point. Prevent starting a SUID binary where the standard file descriptors are not opened. We have to do this |