Annotation of linux/kernel/asm.s, revision 1.1

1.1     ! root        1: /*
        !             2:  * asm.s contains the low-level code for most hardware faults.
        !             3:  * page_exception is handled by the mm, so that isn't here. This
        !             4:  * file also handles (hopefully) fpu-exceptions due to TS-bit, as
        !             5:  * the fpu must be properly saved/resored. This hasn't been tested.
        !             6:  */
        !             7: 
        !             8: .globl _divide_error,_debug,_nmi,_int3,_overflow,_bounds,_invalid_op
        !             9: .globl _device_not_available,_double_fault,_coprocessor_segment_overrun
        !            10: .globl _invalid_TSS,_segment_not_present,_stack_segment
        !            11: .globl _general_protection,_coprocessor_error,_reserved
        !            12: 
        !            13: _divide_error:
        !            14:        pushl $_do_divide_error
        !            15: no_error_code:
        !            16:        xchgl %eax,(%esp)
        !            17:        pushl %ebx
        !            18:        pushl %ecx
        !            19:        pushl %edx
        !            20:        pushl %edi
        !            21:        pushl %esi
        !            22:        pushl %ebp
        !            23:        push %ds
        !            24:        push %es
        !            25:        push %fs
        !            26:        pushl $0                # "error code"
        !            27:        lea 44(%esp),%edx
        !            28:        pushl %edx
        !            29:        movl $0x10,%edx
        !            30:        mov %dx,%ds
        !            31:        mov %dx,%es
        !            32:        mov %dx,%fs
        !            33:        call *%eax
        !            34:        addl $8,%esp
        !            35:        pop %fs
        !            36:        pop %es
        !            37:        pop %ds
        !            38:        popl %ebp
        !            39:        popl %esi
        !            40:        popl %edi
        !            41:        popl %edx
        !            42:        popl %ecx
        !            43:        popl %ebx
        !            44:        popl %eax
        !            45:        iret
        !            46: 
        !            47: _debug:
        !            48:        pushl $_do_int3         # _do_debug
        !            49:        jmp no_error_code
        !            50: 
        !            51: _nmi:
        !            52:        pushl $_do_nmi
        !            53:        jmp no_error_code
        !            54: 
        !            55: _int3:
        !            56:        pushl $_do_int3
        !            57:        jmp no_error_code
        !            58: 
        !            59: _overflow:
        !            60:        pushl $_do_overflow
        !            61:        jmp no_error_code
        !            62: 
        !            63: _bounds:
        !            64:        pushl $_do_bounds
        !            65:        jmp no_error_code
        !            66: 
        !            67: _invalid_op:
        !            68:        pushl $_do_invalid_op
        !            69:        jmp no_error_code
        !            70: 
        !            71: math_emulate:
        !            72:        popl %eax
        !            73:        pushl $_do_device_not_available
        !            74:        jmp no_error_code
        !            75: _device_not_available:
        !            76:        pushl %eax
        !            77:        movl %cr0,%eax
        !            78:        bt $2,%eax                      # EM (math emulation bit)
        !            79:        jc math_emulate
        !            80:        clts                            # clear TS so that we can use math
        !            81:        movl _current,%eax
        !            82:        cmpl _last_task_used_math,%eax
        !            83:        je 1f                           # shouldn't happen really ...
        !            84:        pushl %ecx
        !            85:        pushl %edx
        !            86:        push %ds
        !            87:        movl $0x10,%eax
        !            88:        mov %ax,%ds
        !            89:        call _math_state_restore
        !            90:        pop %ds
        !            91:        popl %edx
        !            92:        popl %ecx
        !            93: 1:     popl %eax
        !            94:        iret
        !            95: 
        !            96: _coprocessor_segment_overrun:
        !            97:        pushl $_do_coprocessor_segment_overrun
        !            98:        jmp no_error_code
        !            99: 
        !           100: _reserved:
        !           101:        pushl $_do_reserved
        !           102:        jmp no_error_code
        !           103: 
        !           104: _coprocessor_error:
        !           105:        pushl $_do_coprocessor_error
        !           106:        jmp no_error_code
        !           107: 
        !           108: _double_fault:
        !           109:        pushl $_do_double_fault
        !           110: error_code:
        !           111:        xchgl %eax,4(%esp)              # error code <-> %eax
        !           112:        xchgl %ebx,(%esp)               # &function <-> %ebx
        !           113:        pushl %ecx
        !           114:        pushl %edx
        !           115:        pushl %edi
        !           116:        pushl %esi
        !           117:        pushl %ebp
        !           118:        push %ds
        !           119:        push %es
        !           120:        push %fs
        !           121:        pushl %eax                      # error code
        !           122:        lea 44(%esp),%eax               # offset
        !           123:        pushl %eax
        !           124:        movl $0x10,%eax
        !           125:        mov %ax,%ds
        !           126:        mov %ax,%es
        !           127:        mov %ax,%fs
        !           128:        call *%ebx
        !           129:        addl $8,%esp
        !           130:        pop %fs
        !           131:        pop %es
        !           132:        pop %ds
        !           133:        popl %ebp
        !           134:        popl %esi
        !           135:        popl %edi
        !           136:        popl %edx
        !           137:        popl %ecx
        !           138:        popl %ebx
        !           139:        popl %eax
        !           140:        iret
        !           141: 
        !           142: _invalid_TSS:
        !           143:        pushl $_do_invalid_TSS
        !           144:        jmp error_code
        !           145: 
        !           146: _segment_not_present:
        !           147:        pushl $_do_segment_not_present
        !           148:        jmp error_code
        !           149: 
        !           150: _stack_segment:
        !           151:        pushl $_do_stack_segment
        !           152:        jmp error_code
        !           153: 
        !           154: _general_protection:
        !           155:        pushl $_do_general_protection
        !           156:        jmp error_code
        !           157: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.