annotate src/ecrt0.c @ 622:11502791fc1c

[xemacs-hg @ 2001-06-22 01:49:57 by ben] dired-msw.c: Fix problem noted by Michael Sperber with directories containing [] and code that destructively modifies an existing string. term\AT386.el: Fix warnings. term\apollo.el: Removed. Kill kill kill. Sync with FSF and remove most crap. term\linux.el: Removed. Sync with FSF. Don't define most defns, because they are automatically defined by termcap. But do add defns for keys that normally get defined as f13, f14, etc. and really ought to be shift-f3, shift-f4, etc. (NOTE: I did this based on Cygwin, which emulates the Linux console. I would appreciate it if someone on Linux could verify.) term\cygwin.el: New. Load term/linux. term\lk201.el, term\news.el, term\vt100.el: Sync with FSF. Fix warnings. dialog-gtk.el: Fix warning. For 21.4: help.el, update-elc.el: Compile in proper order. Maybe for 21.4: keydefs.el: Add a defn for M-?, previously undefined, to access help -- in case the terminal is not set up right, or f1 gets redefined. README: Rewrite.
author ben
date Fri, 22 Jun 2001 01:50:04 +0000
parents 3ecd8885ac67
children 943eaba38521
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 /* C code startup routine.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 Copyright (C) 1985, 1986, 1992, 1993 Free Software Foundation, Inc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4 This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6 XEmacs is free software; you can redistribute it and/or modify it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 under the terms of the GNU General Public License as published by the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 Free Software Foundation; either version 2, or (at your option) any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 later version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11 XEmacs is distributed in the hope that it will be useful, but WITHOUT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 along with XEmacs; see the file COPYING. If not, write to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 Boston, MA 02111-1307, USA. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21 /* Synched up with: FSF 19.30. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24 /* The standard Vax 4.2 Unix crt0.c cannot be used for Emacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25 because it makes `environ' an initialized variable.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26 It is easiest to have a special crt0.c on all machines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 though I don't know whether other machines actually need it. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 /* On the vax and 68000, in BSD4.2 and USG5.2,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 this is the data format on startup:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 (vax) ap and fp are unpredictable as far as I know; don't use them.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 sp -> word containing argc
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 word pointing to first arg string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34 [word pointing to next arg string]... 0 or more times
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36 Optionally:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 [word pointing to environment variable]... 1 or more times
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38 ...
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 And always:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 first arg string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 [next arg string]... 0 or more times
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45 /* On the 16000, at least in the one 4.2 system I know about,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 the initial data format is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 sp -> word containing argc
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 word containing argp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 word pointing to first arg string, and so on as above
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 #ifdef emacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 #include <config.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 #ifdef __GNUC__
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 #define asm __asm
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60 /* Workaround for Sun cc 3.0, which doesn't handle asm's outside a fn. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 #if __SUNPRO_C >= 0x300
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 #define no_toplevel_asm
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 /* ******** WARNING ********
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 Do not insert any data definitions before data_start!
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 Since this is the first file linked, the address of the following
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 variable should correspond to the start of initialized data space.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 On some systems this is a constant that is independent of the text
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 size for shared executables. On others, it is a function of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 text size. In short, this seems to be the most portable way to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 discover the start of initialized data space dynamically at runtime,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 for either shared or unshared executables, on either swapping or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 virtual systems. It only requires that the linker allocate objects
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 in the order encountered, a reasonable model for most Unix systems.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 Similarly, note that the address of _start() should be the start
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 of text space. Fred Fish, UniSoft Systems Inc. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 int data_start = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 #ifdef NEED_ERRNO
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 int errno;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 #ifndef DONT_NEED_ENVIRON
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 char **environ;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 #ifndef static
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 /* On systems where the static storage class is usable, this function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 should be declared as static. Otherwise, the static keyword has
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 been defined to be something else, and code for those systems must
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93 take care of this declaration appropriately. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 static start1 ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 #ifdef APOLLO
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 extern char *malloc(), *realloc(), *(*_libc_malloc) (), *(*_libc_realloc)();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 extern void free(), (*_libc_free) (); extern int main();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 std_$call void unix_$main();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 _start()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 _libc_malloc = malloc;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 _libc_realloc = realloc;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 _libc_free = free;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 unix_$main(main); /* no return */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 #endif /* APOLLO */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 #if defined(orion) || defined(pyramid) || defined(celerity) || defined(ALLIANT) || defined(clipper) || defined(sps7)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113 #if defined(sps7) && defined(V3x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 asm(" section 10");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 asm(" ds.b 0xb0");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 #ifdef ALLIANT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119 /* _start must initialize _curbrk and _minbrk on the first startup;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 when starting up after dumping, it must initialize them to what they were
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121 before the dumping, since they are in the shared library and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122 are not dumped. See ADJUST_EXEC_HEADER in m-alliant.h. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123 extern unsigned char *_curbrk, *_minbrk;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124 extern unsigned char end;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125 unsigned char *_setbrk = &end;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126 #ifdef ALLIANT_2800
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 unsigned char *_end = &end;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131 #ifndef DUMMIES
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132 #define DUMMIES
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
134
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135 _start (DUMMIES argc, argv, envp)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136 int argc;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137 char **argv, **envp;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 #ifdef ALLIANT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 #ifdef ALLIANT_2800
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141 _curbrk = _end;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142 _minbrk = _end;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144 _curbrk = _setbrk;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145 _minbrk = _setbrk;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149 environ = envp;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151 exit (main (argc, argv, envp));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154 #endif /* orion or pyramid or celerity or alliant or clipper */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156 #if defined (ns16000) && !defined (sequent) && !defined (UMAX) && !defined (CRT0_DUMMIES)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158 _start ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 /* On 16000, _start pushes fp onto stack */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 start1 ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 /* ignore takes care of skipping the fp value pushed in start. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 static
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 start1 (ignore, argc, argv)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 int ignore;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168 int argc;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 char **argv;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 environ = argv + argc + 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 if (environ == *argv)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 environ--;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 exit (main (argc, argv, environ));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 #endif /* ns16000, not sequent and not UMAX, and not the CRT0_DUMMIES method */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 #ifdef UMAX
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 _start()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 asm(" exit [] # undo enter");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 asm(" .set exitsc,1");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 asm(" .set sigcatchall,0x400");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186 asm(" .globl _exit");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 asm(" .globl start");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 asm(" .globl __start");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 asm(" .globl _main");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 asm(" .globl _environ");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 asm(" .globl _sigvec");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 asm(" .globl sigentry");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 asm("start:");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 asm(" br .xstart");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 asm(" .org 0x20");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 asm(" .double p_glbl,0,0xf00000,0");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 asm(" .org 0x30");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199 asm(".xstart:");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200 asm(" adjspb $8");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 asm(" movd 8(sp),0(sp) # argc");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 asm(" addr 12(sp),r0");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 asm(" movd r0,4(sp) # argv");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 asm("L1:");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 asm(" movd r0,r1");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 asm(" addqd $4,r0");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 asm(" cmpqd $0,0(r1) # null args term ?");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 asm(" bne L1");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 asm(" cmpd r0,0(4(sp)) # end of 'env' or 'argv' ?");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 asm(" blt L2");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 asm(" addqd $-4,r0 # envp's are in list");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212 asm("L2:");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213 asm(" movd r0,8(sp) # env");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 asm(" movd r0,@_environ # indir is 0 if no env ; not 0 if env");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 asm(" movqd $0,tos # setup intermediate signal handler");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 asm(" addr @sv,tos");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217 asm(" movzwd $sigcatchall,tos");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 asm(" jsr @_sigvec");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 asm(" adjspb $-12");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 asm(" jsr @_main");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 asm(" adjspb $-12");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 asm(" movd r0,tos");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 asm(" jsr @_exit");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 asm(" adjspb $-4");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225 asm(" addr @exitsc,r0");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 asm(" svc");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227 asm(" .align 4 # sigvec arg");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228 asm("sv:");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 asm(" .double sigentry");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230 asm(" .double 0");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 asm(" .double 0");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 asm(" .comm p_glbl,1");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235 #endif /* UMAX */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 #ifdef CRT0_DUMMIES
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 /* Define symbol "start": here; some systems want that symbol. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 #ifdef DOT_GLOBAL_START
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241 asm(" .text ");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 asm(" .globl start ");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 asm(" start: ");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244 #endif /* DOT_GLOBAL_START */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 #ifdef NODOT_GLOBAL_START
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247 asm(" text ");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248 asm(" global start ");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249 asm(" start: ");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250 #endif /* NODOT_GLOBAL_START */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252 #ifdef m68000
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254 /* GCC 2.1, when optimization is turned off, seems to want to push a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255 word of garbage on the stack, which screws up the CRT0_DUMMIES
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 hack. So we hand-code _start in assembly language. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257 asm(".text ");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258 #ifndef sony_news
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259 asm(" .even ");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260 #else /* sony_news (not gas) */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
261 + asm(" .align 2 ");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262 #endif /* sony_news (not gas) */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
263 asm(".globl __start ");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264 asm("__start: ");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265 asm(" link a6,#0 ");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 asm(" jbsr _start1 ");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 asm(" unlk a6 ");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 asm(" rts ");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270 #else /* not m68000 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 _start ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275 /* On vax, nothing is pushed here */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276 /* On sequent, bogus fp is pushed here */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277 start1 ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
279
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280 #endif /* possibly m68000 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
281
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
282 #ifdef __bsdi__ /* for version number */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283 #include <sys/param.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
284 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285 #if defined(_BSDI_VERSION) && (_BSDI_VERSION >= 199501)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286 char *__progname;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288 static int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289 start1 (CRT0_DUMMIES int argc, char *xargv)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291 char **argv = &xargv;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292 environ = argv + argc + 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293 #if defined(_BSDI_VERSION) && (_BSDI_VERSION >= 199501)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294 __progname = argv[0];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
297 if ((char *)environ == xargv)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
298 environ--;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299 exit (main (argc, argv, environ));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301 /* Refer to `start1' so GCC will not think it is never called
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 and optimize it out. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303 (void) &start1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305 #else /* not CRT0_DUMMIES */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307 /* "m68k" and "m68000" both stand for m68000 processors,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308 but with different program-entry conventions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309 This is a kludge. Now that the CRT0_DUMMIES mechanism above exists,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
310 most of these machines could use the vax code above
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
311 with some suitable definition of CRT0_DUMMIES.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
312 Then the symbol m68k could be flushed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313 But I don't want to risk breaking these machines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314 in a version 17 patch release, so that change is being put off. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
315
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
316 #ifdef m68k /* Can't do it all from C */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
317 asm (" global _start");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
318 asm (" text");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
319 asm ("_start:");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
320 #ifndef NU
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321 #ifdef STRIDE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
322 asm (" comm havefpu%,2");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323 #else /* m68k, not STRIDE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324 asm (" comm splimit%,4");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325 #endif /* STRIDE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 asm (" global exit");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327 asm (" text");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328 #ifdef STRIDE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329 asm (" trap &3");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
330 asm (" mov.w %d0,havefpu%");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 #else /* m68k, not STRIDE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 asm (" mov.l %d0,splimit%");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333 #endif /* STRIDE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334 #endif /* not NU */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335 asm (" jsr start1");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336 asm (" mov.l %d0,(%sp)");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
337 asm (" jsr exit");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338 asm (" mov.l &1,%d0"); /* d0 = 1 => exit */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 asm (" trap &0");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 #else /* m68000, not m68k */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342 #ifdef m68000
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344 #ifdef ISI68K
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345 /* Added by ESM Sun May 24 12:44:02 1987 to get new ISI library to work */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346 /* Edited by Ray Mon May 15 15:59:56 EST 1989 so we can compile with gcc */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
347 #if defined(BSD4_3) && !defined(__GNUC__)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348 static foo () {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350 asm (" .globl is68020");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351 asm ("is68020:");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 #ifndef BSD4_3
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353 asm (" .long 0x00000000");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354 asm (" .long 0xffffffff");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 /* End of stuff added by ESM */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
356 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
357 asm (" .text");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358 asm (" .globl __start");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359 asm ("__start:");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360 asm (" .word 0");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
361 asm (" link a6,#0");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
362 asm (" jbsr _start1");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363 asm (" unlk a6");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364 asm (" rts");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365 #if defined(BSD4_3) && !defined(__GNUC__)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 #else /* not ISI68K */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370 _start ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
371 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372 #ifdef sun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373 #ifdef LISP_FLOAT_TYPE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374 finitfp_();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377 /* On 68000, _start pushes a6 onto stack */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378 start1 ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380 #endif /* not ISI68k */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
381 #endif /* m68000 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
382 #endif /* m68k */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
383
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
384 #if defined(m68k) || defined(m68000)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
385 /* ignore takes care of skipping the a6 value pushed in start. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
386 static
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
387 #if defined(m68k)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
388 start1 (argc, xargv)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
389 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
390 start1 (ignore, argc, xargv)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
391 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
392 int argc;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
393 char *xargv;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
394 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
395 char **argv = &xargv;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
396 environ = argv + argc + 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
397
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
398 if ((char *)environ == xargv)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
399 environ--;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
400 #ifdef sun_68881
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
401 asm(" jsr f68881_used");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
403 #ifdef sun_fpa
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
404 asm(" jsr ffpa_used");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
405 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
406 #ifdef sun_soft
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
407 asm(" jsr start_float");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
408 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
409 exit (main (argc, argv, environ));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
410 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
411
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
412 #endif /* m68k or m68000 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
414 #endif /* not CRT0_DUMMIES */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
415
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
416 #ifdef hp9000s300
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
417 int argc_value;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
418 char **argv_value;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
419 #ifdef OLD_HP_ASSEMBLER
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
420 asm(" text");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
421 asm(" globl __start");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
422 asm(" globl _exit");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
423 asm(" globl _main");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
424 asm("__start");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
425 asm(" dc.l 0");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
426 asm(" subq.w #0x1,d0");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
427 asm(" move.w d0,float_soft");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
428 asm(" move.l 0x4(a7),d0");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429 asm(" beq.s skip_1");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
430 asm(" move.l d0,a0");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
431 asm(" clr.l -0x4(a0)");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
432 asm("skip_1");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
433 asm(" move.l a7,a0");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
434 asm(" subq.l #0x8,a7");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
435 asm(" move.l (a0),(a7)");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
436 asm(" move.l (a0),_argc_value");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
437 asm(" addq.l #0x4,a0");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
438 asm(" move.l a0,0x4(a7)");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
439 asm(" move.l a0,_argv_value");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
440 asm("incr_loop");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
441 asm(" tst.l (a0)+");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
442 asm(" bne.s incr_loop");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
443 asm(" move.l 0x4(a7),a1");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444 asm(" cmp.l (a1),a0");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
445 asm(" blt.s skip_2");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
446 asm(" subq.l #0x4,a0");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
447 asm("skip_2");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
448 asm(" move.l a0,0x8(a7)");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
449 asm(" move.l a0,_environ");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
450 asm(" jsr _main");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
451 asm(" addq.l #0x8,a7");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
452 asm(" move.l d0,-(a7)");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
453 asm(" jsr _exit");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454 asm(" move.w #0x1,d0");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
455 asm(" trap #0x0");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
456 asm(" comm float_soft,4");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
457 /* float_soft is allocated in this way because C would
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
458 put an underscore character in its name otherwise. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
459
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
460 #else /* new hp assembler */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
461
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
462 asm(" text");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
463 asm(" global float_loc");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
464 asm(" set float_loc,0xFFFFB000");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
465 asm(" global fpa_loc");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
466 asm(" set fpa_loc,0xfff08000");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
467 asm(" global __start");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
468 asm(" global _exit");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
469 asm(" global _main");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
470 asm("__start:");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
471 asm(" byte 0,0,0,0");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
472 asm(" subq.w &1,%d0");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
473 asm(" mov.w %d0,float_soft");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
474 asm(" mov.w %d1,flag_68881");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
475 #ifndef HPUX_68010
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
476 asm(" beq.b skip_float");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
477 asm(" fmov.l &0x7400,%fpcr");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
478 /* asm(" fmov.l &0x7480,%fpcr"); */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
479 #endif /* HPUX_68010 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
480 asm("skip_float:");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
481 asm(" mov.l %a0,%d0");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
482 asm(" add.l %d0,%d0");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
483 asm(" subx.w %d1,%d1");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
484 asm(" mov.w %d1,flag_68010");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
485 asm(" add.l %d0,%d0");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
486 asm(" subx.w %d1,%d1");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
487 asm(" mov.w %d1,flag_fpa");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
488 asm(" tst.l %d2");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
489 asm(" ble.b skip_3");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490 asm(" lsl flag_68881");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
491 asm(" lsl flag_fpa");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
492 asm("skip_3:");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
493 asm(" mov.l 4(%a7),%d0");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
494 asm(" beq.b skip_1");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
495 asm(" mov.l %d0,%a0");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
496 asm(" clr.l -4(%a0)");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
497 asm("skip_1:");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
498 asm(" mov.l %a7,%a0");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
499 asm(" subq.l &8,%a7");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
500 asm(" mov.l (%a0),(%a7)");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
501 asm(" mov.l (%a0),_argc_value");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
502 asm(" addq.l &4,%a0");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
503 asm(" mov.l %a0,4(%a7)");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
504 asm(" mov.l %a0,_argv_value");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
505 asm("incr_loop:");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
506 asm(" tst.l (%a0)+");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
507 asm(" bne.b incr_loop");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
508 asm(" mov.l 4(%a7),%a1");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
509 asm(" cmp.l %a0,(%a1)");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
510 asm(" blt.b skip_2");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
511 asm(" subq.l &4,%a0");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
512 asm("skip_2:");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
513 asm(" mov.l %a0,8(%a7)");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
514 asm(" mov.l %a0,_environ");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
515 asm(" jsr _main");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
516 asm(" addq.l &8,%a7");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
517 asm(" mov.l %d0,-(%a7)");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
518 asm(" jsr _exit");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
519 asm(" mov.w &1,%d0");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
520 asm(" trap &0");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
521 asm(" comm float_soft, 4");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
522 asm(" comm flag_68881, 4");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
523 asm(" comm flag_68010, 4");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
524 asm(" comm flag_68040, 4");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
525 asm(" comm flag_fpa, 4");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
526
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
527 #endif /* new hp assembler */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
528 #endif /* hp9000s300 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
529
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
530 #ifdef GOULD
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
531
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
532 /* startup code has to be in near text rather
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
533 than fartext as allocated by the C compiler. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
534 asm(" .text");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
535 asm(" .align 2");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
536 asm(" .globl __start");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
537 asm(" .text");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
538 asm("__start:");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
539 /* setup base register b1 (function base). */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
540 asm(" .using b1,.");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
541 asm(" tpcbr b1");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
542 /* setup base registers b3 through b7 (data references). */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
543 asm(" file basevals,b3");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
544 /* setup base register b2 (stack pointer); it should be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
545 aligned on a 8-word boundary; but because it is pointing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
546 to argc, its value should be remembered (in r5). */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
547 asm(" movw b2,r4");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
548 asm(" movw b2,r5");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
549 asm(" andw #~0x1f,r4");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
550 asm(" movw r4,b2");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
551 /* allocate stack frame to do some work. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
552 asm(" subea 16w,b2");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
553 /* initialize signal catching for UTX/32 1.2; this is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
554 necessary to make restart from saved image work. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
555 asm(" movea sigcatch,r1");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
556 asm(" movw r1,8w[b2]");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
557 asm(" svc #1,#150");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
558 /* setup address of argc for start1. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
559 asm(" movw r5,8w[b2]");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
560 asm(" func #1,_start1");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
561 asm(" halt");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
562 /* space for ld to store base register initial values. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
563 asm(" .align 5");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
564 asm("basevals:");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
565 asm(" .word __base3,__base4,__base5,__base6,__base7");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
566
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
567 static
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
568 start1 (xargc)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
569 int *xargc;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
570 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
571 int argc;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
572 char **argv;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
573
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
574 argc = *xargc;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
575 argv = (char **)(xargc) + 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
576 environ = argv + argc + 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
577
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
578 if (environ == argv)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
579 environ--;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
580 exit (main (argc, argv, environ));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
581
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
582 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
583
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
584 #endif /* GOULD */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
585
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
586 #ifdef elxsi
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
587 #include <elxsi/argvcache.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
588
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
589 extern char **environ;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
590 extern int errno;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
591 extern void _init_doscan(), _init_iob();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
592 extern char end[];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
593 char *_init_brk = end;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
594
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
595 _start()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
596 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
597 environ = exec_cache.ac_envp;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
598 brk (_init_brk);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
599 errno = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
600 _init_doscan ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
601 _init_iob ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
602 _exit (exit (main (exec_cache.ac_argc,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
603 exec_cache.ac_argv,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
604 exec_cache.ac_envp)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
605 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
606 #endif /* elxsi */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
607
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
608
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
609 #ifdef sparc
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
610 #ifdef no_toplevel_asm
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
611 static no_toplevel_asm_wrapper() {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
612 #ifdef USG5_4
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
613 asm (".pushsection \".text\"");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
614 #endif /* USG5_4 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
615 #endif /* no_toplevel_asm */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
616 #ifdef USG5_4
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
617 asm (".global _start");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
618 asm (".text");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
619 asm ("_start:");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
620 asm (" mov 0, %fp");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
621 asm (" ld [%sp + 64], %o0");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
622 asm (" add %sp, 68, %o1");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
623 asm (" sll %o0, 2, %o2");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
624 asm (" add %o2, 4, %o2");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
625 asm (" add %o1, %o2, %o2");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
626 asm (" sethi %hi(_environ), %o3");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
627 asm (" st %o2, [%o3+%lo(_environ)]");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
628 asm (" andn %sp, 7, %sp");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
629 asm (" call main");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
630 asm (" sub %sp, 24, %sp");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
631 asm (" call _exit");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
632 asm (" nop");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
633 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
634 asm (".global __start");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
635 asm (".text");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
636 asm ("__start:");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
637 asm (" mov 0, %fp");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
638 asm (" ld [%sp + 64], %o0");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
639 asm (" add %sp, 68, %o1");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
640 asm (" sll %o0, 2, %o2");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
641 asm (" add %o2, 4, %o2");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
642 asm (" add %o1, %o2, %o2");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
643 asm (" sethi %hi(_environ), %o3");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
644 asm (" st %o2, [%o3+%lo(_environ)]");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
645 asm (" andn %sp, 7, %sp");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
646 asm (" call _main");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
647 asm (" sub %sp, 24, %sp");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
648 asm (" call __exit");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
649 asm (" nop");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
650 #endif /* USG5_4 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
651 #ifdef no_toplevel_asm
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
652 #ifdef USG5_4
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
653 asm (".popsection");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
654 #endif /* USG5_4 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
655 } /* no_toplevel_asm_wrapper() */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
656 #endif /* no_toplevel_asm */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
657 #endif /* sparc */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
658
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
659 #if __FreeBSD__ == 2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
660 char *__progname;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
661 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
662 #ifdef __bsdi__
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
663 #include <sys/param.h> /* for version number */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
664 #if defined(_BSDI_VERSION) && (_BSDI_VERSION >= 199501)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
665 char *__progname;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
666 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
667 #endif /* __bsdi__ */