crt1.c (216338) | crt1.c (232832) |
---|---|
1/* LINTLIBRARY */ 2/*- 3 * Copyright 2001 David E. O'Brien. 4 * All rights reserved. 5 * Copyright (c) 1995, 1998 Berkeley Software Design, Inc. 6 * All rights reserved. 7 * Copyright 1996-1998 John D. Polstra. 8 * All rights reserved. --- 17 unchanged lines hidden (view full) --- 26 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 30 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 */ 32 33#include <sys/cdefs.h> | 1/* LINTLIBRARY */ 2/*- 3 * Copyright 2001 David E. O'Brien. 4 * All rights reserved. 5 * Copyright (c) 1995, 1998 Berkeley Software Design, Inc. 6 * All rights reserved. 7 * Copyright 1996-1998 John D. Polstra. 8 * All rights reserved. --- 17 unchanged lines hidden (view full) --- 26 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 30 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 */ 32 33#include <sys/cdefs.h> |
34__FBSDID("$FreeBSD: head/lib/csu/sparc64/crt1.c 216338 2010-12-09 21:31:21Z dim $"); | 34__FBSDID("$FreeBSD: head/lib/csu/sparc64/crt1.c 232832 2012-03-11 20:04:09Z kib $"); |
35 36#ifndef lint 37#ifndef __GNUC__ 38#error "GCC is needed to compile this file" 39#endif 40#endif /* lint */ 41 42#include <stdlib.h> 43 44#include "libc_private.h" 45#include "crtbrand.c" | 35 36#ifndef lint 37#ifndef __GNUC__ 38#error "GCC is needed to compile this file" 39#endif 40#endif /* lint */ 41 42#include <stdlib.h> 43 44#include "libc_private.h" 45#include "crtbrand.c" |
46#include "ignore_init.c" |
|
46 47struct Struct_Obj_Entry; 48struct ps_strings; 49 | 47 48struct Struct_Obj_Entry; 49struct ps_strings; 50 |
50extern int _DYNAMIC; 51#pragma weak _DYNAMIC 52 53extern void _fini(void); 54extern void _init(void); 55extern int main(int, char **, char **); | |
56extern void __sparc_utrap_setup(void); 57 58#ifdef GCRT 59extern void _mcleanup(void); 60extern void monstartup(void *, void *); 61extern int eprol; 62extern int etext; 63#endif 64 | 51extern void __sparc_utrap_setup(void); 52 53#ifdef GCRT 54extern void _mcleanup(void); 55extern void monstartup(void *, void *); 56extern int eprol; 57extern int etext; 58#endif 59 |
65char **environ; 66const char *__progname = ""; 67 | |
68void _start(char **, void (*)(void), struct Struct_Obj_Entry *, 69 struct ps_strings *); 70 71/* The entry function. */ 72/* 73 * %o0 holds ps_strings pointer. 74 * 75 * Note: kernel may (is not set in stone yet) pass ELF aux vector in %o1, --- 8 unchanged lines hidden (view full) --- 84/* ARGSUSED */ 85void 86_start(char **ap, void (*cleanup)(void), struct Struct_Obj_Entry *obj __unused, 87 struct ps_strings *ps_strings __unused) 88{ 89 int argc; 90 char **argv; 91 char **env; | 60void _start(char **, void (*)(void), struct Struct_Obj_Entry *, 61 struct ps_strings *); 62 63/* The entry function. */ 64/* 65 * %o0 holds ps_strings pointer. 66 * 67 * Note: kernel may (is not set in stone yet) pass ELF aux vector in %o1, --- 8 unchanged lines hidden (view full) --- 76/* ARGSUSED */ 77void 78_start(char **ap, void (*cleanup)(void), struct Struct_Obj_Entry *obj __unused, 79 struct ps_strings *ps_strings __unused) 80{ 81 int argc; 82 char **argv; 83 char **env; |
92 const char *s; | |
93 94 argc = *(long *)(void *)ap; 95 argv = ap + 1; 96 env = ap + 2 + argc; 97 environ = env; | 84 85 argc = *(long *)(void *)ap; 86 argv = ap + 1; 87 env = ap + 2 + argc; 88 environ = env; |
98 if (argc > 0 && argv[0] != NULL) { 99 __progname = argv[0]; 100 for (s = __progname; *s != '\0'; s++) 101 if (*s == '/') 102 __progname = s + 1; 103 } | 89 if (argc > 0 && argv[0] != NULL) 90 handle_progname(argv[0]); |
104 105 if (&_DYNAMIC != NULL) 106 atexit(cleanup); 107 else { 108 __sparc_utrap_setup(); 109 _init_tls(); 110 } 111#ifdef GCRT 112 atexit(_mcleanup); | 91 92 if (&_DYNAMIC != NULL) 93 atexit(cleanup); 94 else { 95 __sparc_utrap_setup(); 96 _init_tls(); 97 } 98#ifdef GCRT 99 atexit(_mcleanup); |
113#endif 114 atexit(_fini); 115#ifdef GCRT | |
116 monstartup(&eprol, &etext); 117#endif | 100 monstartup(&eprol, &etext); 101#endif |
118 _init(); 119 exit( main(argc, argv, env) ); | 102 103 handle_static_init(argc, argv, env); 104 exit(main(argc, argv, env)); |
120} 121 122#ifdef GCRT 123__asm__(".text"); 124__asm__("eprol:"); 125__asm__(".previous"); 126#endif | 105} 106 107#ifdef GCRT 108__asm__(".text"); 109__asm__("eprol:"); 110__asm__(".previous"); 111#endif |