Commit | Line | Data |
---|---|---|
8cd657f4 JF |
1 | # C runtime startoff |
2 | ||
3 | .set exit,1 | |
4 | .globl _exit | |
5 | .globl start | |
6 | .globl _main | |
7 | .globl _environ | |
8 | .globl _xports | |
9 | .globl _gstart | |
10 | .globl _proflush | |
11 | ||
12 | ||
13 | # | |
14 | # C language startup routine | |
15 | ||
16 | # | |
17 | # special 512 byte area for nil (and possibly other atoms) | |
18 | # and special block of smallnums. | |
19 | # | |
20 | .long 0 | |
21 | .long 0 | |
22 | .long 0 | |
23 | .long -4 | |
24 | .long 20 | |
25 | .byte 'n,'i,'l,0 | |
26 | .long 0 | |
27 | .long 0 | |
28 | .long -4 | |
29 | .long 40 | |
30 | .byte 'e,'o,'f,0 | |
31 | .space 512-44 | |
32 | .long -128,-127,-126,-125,-124,-123,-122,-121 | |
33 | .long -120,-119,-118,-117,-116,-115,-114,-113 | |
34 | .long -112,-111,-110,-109,-108,-107,-106,-105 | |
35 | .long -104,-103,-102,-101,-100,-99,-98,-97 | |
36 | .long -96,-95,-94,-93,-92,-91,-90,-89 | |
37 | .long -88,-87,-86,-85,-84,-83,-82,-81 | |
38 | .long -80,-79,-78,-77,-76,-75,-74,-73 | |
39 | .long -72,-71,-70,-69,-68,-67,-66,-65 | |
40 | .long -64,-63,-62,-61,-60,-59,-58,-57 | |
41 | .long -56,-55,-54,-53,-52,-51,-50,-49 | |
42 | .long -48,-47,-46,-45,-44,-43,-42,-41 | |
43 | .long -40,-39,-38,-37,-36,-35,-34,-33 | |
44 | .long -32,-31,-30,-29,-28,-27,-26,-25 | |
45 | .long -24,-23,-22,-21,-20,-19,-18,-17 | |
46 | .long -16,-15,-14,-13,-12,-11,-10,-9 | |
47 | .long -8,-7,-6,-5,-4,-3,-2,-1 | |
48 | .long 0,1,2,3,4,5,6,7 | |
49 | .long 8,9,10,11,12,13,14,15 | |
50 | .long 16,17,18,19,20,21,22,23 | |
51 | .long 24,25,26,27,28,29,30,31 | |
52 | .long 32,33,34,35,36,37,38,39 | |
53 | .long 40,41,42,43,44,45,46,47 | |
54 | .long 48,49,50,51,52,53,54,55 | |
55 | .long 56,57,58,59,60,61,62,63 | |
56 | .long 64,65,66,67,68,69,70,71 | |
57 | .long 72,73,74,75,76,77,78,79 | |
58 | .long 80,81,82,83,84,85,86,87 | |
59 | .long 88,89,90,91,92,93,94,95 | |
60 | .long 96,97,98,99,100,101,102,103 | |
61 | .long 104,105,106,107,108,109,110,111 | |
62 | .long 112,113,114,115,116,117,118,119 | |
63 | .long 120,121,122,123,124,125,126,127 | |
64 | _xports: | |
65 | .long __iob+0 | |
66 | .long __iob+16 | |
67 | .long __iob+32 | |
68 | .long __iob+48 | |
69 | .long __iob+64 | |
70 | .long __iob+80 | |
71 | .long __iob+96 | |
72 | .long __iob+112 | |
73 | .long __iob+128 | |
74 | .long __iob+144 | |
75 | .long __iob+160 | |
76 | .long __iob+176 | |
77 | .long __iob+192 | |
78 | .long __iob+208 | |
79 | .long __iob+224 | |
80 | .long __iob+240 | |
81 | .long __iob+256 | |
82 | .long __iob+272 | |
83 | .long __iob+288 | |
84 | .long __iob+304 | |
85 | .space 512 - (20 * 4) | |
86 | ||
87 | start: | |
88 | .word 0x0000 | |
89 | subl2 $8,sp | |
90 | movl 8(sp),(sp) # argc | |
91 | movab 12(sp),r0 | |
92 | movl r0,4(sp) # argv | |
93 | L1: | |
94 | tstl (r0)+ # null args term ? | |
95 | bneq L1 | |
96 | cmpl r0,*4(sp) # end of 'env' or 'argv' ? | |
97 | blss L2 | |
98 | tstl -(r0) # envp's are in list | |
99 | L2: | |
100 | movl r0,8(sp) # env | |
101 | movl r0,_environ # indir is 0 if no env ; not 0 if env | |
102 | calls $3,_main | |
103 | pushl r0 | |
104 | calls $1,_exit | |
105 | chmk $exit | |
106 | _gstart: | |
107 | .word 0 | |
108 | moval start,r0 | |
109 | ret | |
110 | _proflush: | |
111 | .word 0 | |
112 | ret | |
113 | # | |
114 | .data | |
115 | _environ: .space 4 |