1#ifndef __ASSEMBLY__ 2#define __ASSEMBLY__ /* for some 2.2 kernel */ 3#endif 4#include <linux/sys.h> 5#include <linux/linkage.h> 6#include <asm/segment.h> 7#define ASSEMBLY 8#include <asm/smp.h> 9 10#define SAVE_ALL \ 11 cld; \ 12 pushl %es; \ 13 pushl %ds; \ 14 pushl %eax; \ 15 pushl %ebp; \ 16 pushl %edi; \ 17 pushl %esi; \ 18 pushl %edx; \ 19 pushl %ecx; \ 20 pushl %ebx; \ 21 movl $(__KERNEL_DS), %edx; \ 22 movl %edx, %ds; \ 23 movl %edx, %es; 24 25#define RESTORE_ALL \ 26 popl %ebx; \ 27 popl %ecx; \ 28 popl %edx; \ 29 popl %esi; \ 30 popl %edi; \ 31 popl %ebp; \ 32 popl %eax; \ 331: popl %ds; \ 342: popl %es; \ 35 addl $4, %esp; \ 363: iret; \ 37.section .fixup,"ax"; \ 384: movl $0, (%esp); \ 39 jmp 1b; \ 405: movl $0, (%esp); \ 41 jmp 2b; \ 426: pushl %ss; \ 43 popl %ds; \ 44 pushl %ss; \ 45 popl %es; \ 46 pushl $11; \ 47 call my_sys_exit;\ 48.previous; \ 49.section __ex_table,"a";\ 50 .align 4; \ 51 .long 1b, 4b; \ 52 .long 2b, 5b; \ 53 .long 3b, 6b; \ 54.previous 55 56ENTRY(op_nmi) 57 pushl %eax 58 SAVE_ALL 59 movl %esp, %edx 60 pushl %edx 61 call op_do_nmi 62 addl $4, %esp 63 RESTORE_ALL 64