home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / zip / mint / mntlib16.lzh / MNTLIB16 / GCRT0.S < prev    next >
Text File  |  1993-08-03  |  2KB  |  71 lines

  1. | gcrt0.o: linked in when profiling is enabled
  2. |
  3. | Initilization code; this is common to both 16 and 32 bit libraries,
  4. | so be careful!
  5. |
  6.     .globl    __app        | short, declared in crtinit.c
  7.     .globl    __base        | BASEPAGE *, declared in crtinit.c
  8.     .globl    __heapbase    | void *
  9.     .globl    __stksize    | long, declared by user or in stack.c
  10.  
  11. |
  12. | Assumption: programs always start with a0 == 0, accessories with
  13. | a0 == basepage
  14. |
  15.     .text
  16.     .even
  17.     .globl    __start
  18. __start:
  19.     subl    a6, a6        | clear a6 for debuggers
  20.     cmpw    #0, a0        | test if acc or program
  21.     beq    __startprg    | if a program, go elsewhere
  22.     movel    a0, __base    | acc basepage is in A0
  23.     movel    __heapbase, sp    | stack must be set from heap
  24.     addl    __stksize, sp
  25.     jmp    __acc_main    | function is in crtinit.c
  26. |
  27. | program startup code: doesn't actually do much, other than push
  28. | the basepage onto the stack and call _start1 in crtinit.c
  29. |
  30. __startprg:
  31.     movel    sp@(4), a0    | get basepage
  32.     movel    a0, __base    | save it
  33.     movel    a0@(4), d0    | get _base->p_hitpa
  34.     andl    #0xfffffffe, d0    | round off
  35.     movel    d0, sp        | set stack (temporarily)
  36.     jmp    __crtinit    | in crtinit.c
  37.  
  38. |
  39. | _setstack: changes the stack pointer; called as
  40. |     void setstack( void *newsp )
  41. | called from crtinit.c once the new stack size has been decided upon
  42. |
  43. | WARNING WARNING WARNING: after you do this, local variables may no longer
  44. | be accessible!
  45. | destroys a0 and a7
  46.  
  47.     .globl    __setstack
  48. __setstack:
  49.     movel    sp@+, a0    | save return address
  50.     movel    sp@+, sp    | new stack pointer
  51.     jmp    a0@        | back to caller
  52.  
  53. |
  54. | interfaces for gprof: for crt0.s, does nothing, but for gcrt0.s branches
  55. | to the appropriate subroutines
  56. |
  57.     .globl    __monstartup
  58.     .globl    _monstartup
  59.     .globl    ___mcleanup
  60.     .globl    __mcleanup
  61.     .globl    __moncontrol
  62.     .globl    _moncontrol
  63.  
  64. __monstartup:
  65.     jmp    _monstartup
  66. __moncontrol:
  67.     jmp    _moncontrol
  68. ___mcleanup:
  69.     jmp    __mcleanup
  70.  
  71.