]> git.ipfire.org Git - thirdparty/glibc.git/blame - sysdeps/unix/bsd/ultrix4/mips/start.S
update from main archive
[thirdparty/glibc.git] / sysdeps / unix / bsd / ultrix4 / mips / start.S
CommitLineData
c4029823 1/* Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc.
28f540f4
RM
2 Contributed by Brendan Kehoe (brendan@zen.org).
3
4The GNU C Library is free software; you can redistribute it and/or
5modify it under the terms of the GNU Library General Public License as
6published by the Free Software Foundation; either version 2 of the
7License, or (at your option) any later version.
8
9The GNU C Library is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12Library General Public License for more details.
13
14You should have received a copy of the GNU Library General Public
15License along with the GNU C Library; see the file COPYING.LIB. If
16not, write to the Free Software Foundation, Inc., 675 Mass Ave,
17Cambridge, MA 02139, USA. */
18
19#include <sysdep.h>
20
c4029823 21__errno:
28f540f4
RM
22.comm errno, 4
23
24ENTRY(__start)
25 .set noreorder
26
27 /* The first thing on the stack is argc. */
28 lw s0, 0(sp)
29 nop
30
31 /* Set up the global pointer. */
32 la gp, _gp
33
34 /* Then set up argv. */
35 addiu s1, sp, 4
36
37 /* To compute where envp is, first we have to jump ahead four
38 bytes from what argv was. This will bring us ahead, so we don't
39 need to compute the NULL at the end of argv later. */
40 addiu v1, s1, 4
41
42 /* Now, compute the space to skip given the number of arguments
43 we've got. We do this by multiplying argc by 4. */
44 sll v0, s0, 2
45
46 /* Now, add (argv+4) with the space to skip...that's envp. */
47 addu s2, v1, v0
48
49 /* __environ = envp; */
50 sw s2, __environ
51
52 addiu sp, sp, -24
53
54 /* __libc_init (argc, argv, envp); */
55 move a0, s0
56 move a1, s1
57 jal __libc_init
58 move a2, s2
59
60 /* errno = 0; */
61 sw zero, errno
62
63 /* exit (main (argc, argv, envp)); */
64 move a0, s0
65 move a1, s1
66 jal main
67 move a2, s2
68
69 /* Make the value returned by main be the argument to exit. */
70 jal exit
71 move a0, v0
77162807 72 .end __start