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