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