1 /*
2 * This file and its contents are supplied under the terms of the
3 * Common Development and Distribution License ("CDDL"), version 1.0.
4 * You may only use this file in accordance with the terms of version
5 * 1.0 of the CDDL.
6 *
7 * A full copy of the text of the CDDL should have accompanied this
8 * source. A copy of the CDDL is also available via the Internet at
9 * http://www.illumos.org/license/CDDL.
10 */
11
12 /*
13 * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
14 * Use is subject to license terms.
15 */
16
17 /* Copyright 2016, Richard Lowe. */
18
19 #include <sys/asm_linkage.h>
20 #include <sys/stack.h>
21
22 .file "mach-crt1.s"
23
24 .global _start_crt
25
26 #if defined(__sparcv9)
27 #define EB_MAX_SIZE 128
28 #else
29 #define EB_MAX_SIZE 64
30 #endif
31
32 ENTRY_NP(_start)
33 /*
34 * On entry, the stack is:
35 *
36 * .-----------------------. <--- %sp
37 * | |
38 * | Window |
39 * | |
40 * |-----------------------|
41 * | argc |
42 * |-----------------------|
43 * | argv[0] |
44 * | argv[1] |
45 * | argv[2] |
46 * | argv[3] |
47 * | ... |
48 * | argv[argc - 1] |
49 * |-----------------------|
50 * | NULL |
51 * |-----------------------|
52 * | envp[0] |
53 * | envp[1] |
54 * | envp[2] |
55 * | envp[3] |
56 * | ... |
57 * | envp[N] |
58 * |-----------------------|
59 * | NULL |
60 * .-----------------------.
61 *
62 * and an exit handler from the linker is in %g1
63 */
64 clr %fp ! don't trace the stack past this point
65
66 add %sp, WINDOWSIZE + STACK_BIAS, %l0 ! address of argc
67
68 ! allocate a minimally sized frame, and align ourselves
69 add %sp, -SA(MINFRAME - EB_MAX_SIZE), %sp
70
71 ldn [%l0], %o0 ! argc
72 add %l0, CPTRSIZE, %o1 ! argv
73 call _start_crt
74 mov %g1, %o2 ! exit_handler in delay slot
75 SET_SIZE(_start)