[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

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