[BACK]Return to SRT0.S CVS log [TXT][DIR] Up to [local] / sys / arch / mvme68k / stand / libsa

Annotation of sys/arch/mvme68k/stand/libsa/SRT0.S, Revision 1.1.1.1

1.1       nbrk        1: |      $OpenBSD: SRT0.S,v 1.7 2001/07/04 08:06:56 niklas Exp $
                      2: |      $NetBSD: SRT0.S,v 1.2 1995/08/12 18:38:55 gwr Exp $
                      3:
                      4: | Copyright (c) 1995 Gordon W. Ross
                      5: | All rights reserved.
                      6: |
                      7: | Redistribution and use in source and binary forms, with or without
                      8: | modification, are permitted provided that the following conditions
                      9: | are met:
                     10: | 1. Redistributions of source code must retain the above copyright
                     11: |    notice, this list of conditions and the following disclaimer.
                     12: | 2. Redistributions in binary form must reproduce the above copyright
                     13: |    notice, this list of conditions and the following disclaimer in the
                     14: |    documentation and/or other materials provided with the distribution.
                     15: | 3. The name of the author may not be used to endorse or promote products
                     16: |    derived from this software without specific prior written permission.
                     17: | 4. All advertising materials mentioning features or use of this software
                     18: |    must display the following acknowledgement:
                     19: |      This product includes software developed by Gordon Ross
                     20: |
                     21: | THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
                     22: | IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
                     23: | OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
                     24: | IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
                     25: | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
                     26: | NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
                     27: | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
                     28: | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
                     29: | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
                     30: | THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
                     31:
                     32: |      this is a pre-startup wrapper for bugcrt which relocates the
                     33: |      code to the correct place before exec()ing.
                     34:
                     35: |      SRT0.S - Stand-alone Run-Time startup code, part 0
                     36:        .file   "SRT0.S"
                     37:        .text
                     38:        .globl  __estack
                     39: __estack:
                     40:        .globl  xstart
                     41: xstart:
                     42: | first, relocate code to correct place without touching critical regs
                     43: | (args are in: d0, d1, d4, a0, a1, a2, a3, a4, a5, a6)
                     44: |      [a3 and a4 only when netbooting]
                     45:        movl    a3, d3                  | SAVE a3 in d3
                     46:        movl    a4, d5                  | SAVE a4 in d5
                     47:        lea     pc@(xstart:w), a3       | a3 = current addr (could be anywhere)
                     48:        lea     xstart:l, a4            | a4 = desired location (LINKADDR)
                     49:        cmpl    a3, a4                  | already there?
                     50:        beqs    restart                 | short-circuit out
                     51:
                     52:                                        | Relocate the code and data
                     53:        movl    #_edata,d2              | Desired end of program
                     54:        subl    a4,d2                   | Calculate length, round up.
                     55:        lsrl    #2,d2
                     56: Lcp:
                     57:        movl    a3@+, a4@+
                     58:        dbra    d2, Lcp
                     59:
                     60: | Force a long jump to the relocated code (not pc-relative)
                     61:        lea     restart:l, a3
                     62:        jmp     a3@
                     63:
                     64: restart:
                     65: | now in the relocated code
                     66:
                     67: | Set up stack (just before relocated text)
                     68:        lea     __estack:l, a3
                     69:        movl    a3, sp
                     70:
                     71: | now that we have relocated, call the bugcrt  (note we skip over the special
                     72: |      bug header which has a PC and SP in it)
                     73:        movl    d3, a3                  | RESTORE a3
                     74:        movl    d5, a4                  | RESTORE a4
                     75:        jmp     _start
                     76:
                     77: | The end.

CVSweb