diff options
| author | Peter Wemm <peter@FreeBSD.org> | 2003-04-30 19:27:07 +0000 |
|---|---|---|
| committer | Peter Wemm <peter@FreeBSD.org> | 2003-04-30 19:27:07 +0000 |
| commit | 1b376078fdfb27f831b5e61ce15a9ac6f96b69dd (patch) | |
| tree | 572878ee8fc71e8c42b136a7a7f7d5a155324f3e /lib/csu/amd64 | |
| parent | fbc8f8a2dcb2a3c4b29a9f464a392572a6fd3193 (diff) | |
Notes
Diffstat (limited to 'lib/csu/amd64')
| -rw-r--r-- | lib/csu/amd64/crt1.c | 25 |
1 files changed, 5 insertions, 20 deletions
diff --git a/lib/csu/amd64/crt1.c b/lib/csu/amd64/crt1.c index 15a544c681768..15aec4438a3f0 100644 --- a/lib/csu/amd64/crt1.c +++ b/lib/csu/amd64/crt1.c @@ -43,7 +43,7 @@ typedef void (*fptr)(void); extern void _fini(void); extern void _init(void); extern int main(int, char **, char **); -extern void _start(char *, ...); +extern void _start(char **, void (*)(void)); #ifdef GCRT extern void _mcleanup(void); @@ -55,33 +55,18 @@ extern int etext; char **environ; const char *__progname = ""; -static __inline fptr -get_rtld_cleanup(void) -{ - fptr retval; - -#ifdef __GNUC__ - __asm__("movl %%edx,%0" : "=rm"(retval)); -#else - retval = (fptr)0; /* XXXX Fix this for other compilers */ -#endif - return(retval); -} - /* The entry function. */ void -_start(char *ap, ...) +_start(char **ap, void (*cleanup)(void)) { - fptr cleanup; int argc; char **argv; char **env; const char *s; - cleanup = get_rtld_cleanup(); - argv = ≈ - argc = *(long *)(void *)(argv - 1); - env = argv + argc + 1; + argc = *(long *)(void *)ap; + argv = ap + 1; + env = ap + 2 + argc; environ = env; if (argc > 0 && argv[0] != NULL) { __progname = argv[0]; |
