head_em.s 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. .global lino,filn
  2. .global EXIT
  3. .global begtext,begdata,begbss
  4. .global EARRAY,ERANGE,ESET,EIDIVZ,EHEAP,EILLINS,ECASE,EBADGTO
  5. .global hol0,reghp,limhp,trpim,trppc
  6. ! runtime startof for sparc on sun4
  7. LINO_AD = 0
  8. FILN_AD = 4
  9. EARRAY = 0
  10. ERANGE = 1
  11. ESET = 2
  12. EIDIVZ = 6
  13. EHEAP = 17
  14. EILLINS = 18
  15. ECASE = 20
  16. EBADGTO = 27
  17. .seg "text"
  18. begtext:
  19. clr %fp
  20. ld [%sp + 0x40], %o0
  21. add %sp, 0x44, %o1
  22. sll %o0, 0x2, %o2
  23. add %o2, 0x4, %o2
  24. add %o1, %o2, %o2
  25. set -0x100000, %g4 ! should be a few M
  26. clr %l1
  27. mov %sp, %l0
  28. add %sp, %g4, %sp
  29. dec 12, %l0
  30. ! enable divide by 0 trap and improper
  31. ! trap
  32. st %fsr, [%l0]
  33. ld [%l0], %o3
  34. set 0x09000000, %o4
  35. or %o3, %o4, %o3
  36. st %o3, [%l0]
  37. ld [%l0], %fsr
  38. st %o0, [%l0]
  39. st %o1, [%l0+4]
  40. st %o2, [%l0+8]
  41. call __m_a_i_n
  42. nop
  43. dec 4, %l0
  44. st %g0, [%l0]
  45. EXIT:
  46. call __exit
  47. nop
  48. .seg "data"
  49. begdata:
  50. .word 0 ! may be at virtual address 0 with no problem
  51. hol0:
  52. lino:
  53. .word 0 ! lino
  54. filn:
  55. .word 0 ! filn
  56. reghp:
  57. .word __end
  58. limhp:
  59. .word __end
  60. trppc:
  61. .word 0
  62. trpim:
  63. .word 0 ! USED TO BE 2 BYTES; IS THIS RIGHT?
  64. .seg "bss"
  65. begbss: !initialization is not needed because ALL entries are in zero space!