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

Annotation of sys/arch/i386/stand/libsa/debug_i386.S, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: debug_i386.S,v 1.12 2004/03/09 19:12:12 tom Exp $     */
        !             2:
        !             3: /*
        !             4:  * Copyright (c) 1997 Michael Shalayeff
        !             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:  *
        !            16:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
        !            17:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
        !            18:  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            19:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
        !            20:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            21:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            22:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            23:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            24:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            25:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            26:  * SUCH DAMAGE.
        !            27:  *
        !            28:  */
        !            29:
        !            30: #include <machine/asm.h>
        !            31: #include <machine/psl.h>
        !            32: #define _LOCORE
        !            33: #include <machine/segments.h>
        !            34: #include <machine/trap.h>
        !            35: #include <debug_md.h>
        !            36: #undef _LOCORE
        !            37:
        !            38:        /* do this way because some cpus (like cyrix 6x86) store garbage
        !            39:         * into high word, instead of zeroes.
        !            40:         */
        !            41: #define        pushsr(sr)      movl sr, %eax; pushl %eax
        !            42:
        !            43:        .text
        !            44:        .globl  alltraps
        !            45:
        !            46: alltraps:
        !            47:        pushal
        !            48:        pushsr(%ds)
        !            49:        pushsr(%es)
        !            50:        pushsr(%fs)
        !            51:        pushsr(%gs)
        !            52:                /* muck %cs, see note about pushsr() above */
        !            53:        movl    0xf*4(%esp), %eax
        !            54:        movzwl  %ax, %eax
        !            55:        movl    %eax, 0xf*4(%esp)
        !            56: #ifdef DEBUG_DEBUG
        !            57:        movl    $0xb8280, %edi
        !            58:        movl    0x0c*4(%esp), %eax      /* trapno */
        !            59:        addb    $'0', %al
        !            60:        movb    $0x17, %ah
        !            61:        shll    $16, %eax
        !            62:        movb    0x0d*4(%esp), %al       /* error */
        !            63:        addb    $'0', %al
        !            64:        movb    $0x17, %ah
        !            65:        movl    %eax, (%edi)
        !            66: #endif
        !            67:        call    _C_LABEL(check_regs)
        !            68: #ifdef DEBUG_DEBUG
        !            69:        movl    $0xb8290, %edi
        !            70:        movl    $0x47394738, (%edi)
        !            71: #endif
        !            72:        popl    %gs
        !            73:        popl    %fs
        !            74:        popl    %es
        !            75:        popl    %ds
        !            76:        popal
        !            77:        addl    $0x8, %esp
        !            78:        hlt
        !            79:        iret
        !            80:
        !            81: ENTRY(check_regs)
        !            82: #ifdef DEBUG_DEBUG
        !            83:        movl    $0xb8284, %edi
        !            84:        movl    $0x47334732, (%edi)
        !            85: #endif
        !            86:        movl    $0x10, %eax
        !            87:        mov     %ax, %ds
        !            88:        mov     %ax, %es
        !            89:        movl    $reg, %edi
        !            90:        cld
        !            91:        movl    0x0c*4(%esp), %eax; stosl /* %eax       */
        !            92:        movl    0x0b*4(%esp), %eax; stosl /* %ecx       */
        !            93:        movl    0x0a*4(%esp), %eax; stosl /* %edx       */
        !            94:        movl    0x09*4(%esp), %eax; stosl /* %ebx       */
        !            95:        movl    0x08*4(%esp), %eax; stosl /* %esp       */
        !            96:        movl    0x07*4(%esp), %eax; stosl /* %ebp       */
        !            97:        movl    0x06*4(%esp), %eax; stosl /* %esi       */
        !            98:        movl    0x05*4(%esp), %eax; stosl /* %edi       */
        !            99:        movl    0x0f*4(%esp), %eax; stosl /* %eip       */
        !           100:        movl    0x11*4(%esp), %eax; stosl /* %eflags    */
        !           101:        movl    0x10*4(%esp), %eax; stosl /* %cs        */
        !           102:        mov             %ss,  %ax ; stosl /* %ss        */
        !           103:        movl    0x04*4(%esp), %eax; stosl /* %ds        */
        !           104:        movl    0x03*4(%esp), %eax; stosl /* %es        */
        !           105:        movl    0x02*4(%esp), %eax; stosl /* %fs        */
        !           106:        movl    0x01*4(%esp), %eax; stosl /* %gs        */
        !           107:
        !           108: #ifdef DEBUG_DEBUG
        !           109:        movl    $0xb8288, %edi
        !           110:        movl    $0x47354734, (%edi)
        !           111: #endif
        !           112:        movl    0x0e*4(%esp), %ecx      /* error */
        !           113:        movl    0x0d*4(%esp), %eax      /* trapno */
        !           114:        pushl   %ecx
        !           115:        pushl   %eax
        !           116:        call    _C_LABEL(dump_regs)
        !           117:        popl    %eax
        !           118:        popl    %eax
        !           119:
        !           120: #ifdef DEBUG_DEBUG
        !           121:        movl    $0xb828c, %edi
        !           122:        movl    $0x47374736, (%edi)
        !           123: #endif
        !           124:        ret

CVSweb