| 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 |