linux/arch/x86/mm/extable_32.c
<<
>>
Prefs
   1/*
   2 * linux/arch/i386/mm/extable.c
   3 */
   4
   5#include <linux/module.h>
   6#include <linux/spinlock.h>
   7#include <asm/uaccess.h>
   8
   9int fixup_exception(struct pt_regs *regs)
  10{
  11        const struct exception_table_entry *fixup;
  12
  13#ifdef CONFIG_PNPBIOS
  14        if (unlikely(SEGMENT_IS_PNP_CODE(regs->xcs)))
  15        {
  16                extern u32 pnp_bios_fault_eip, pnp_bios_fault_esp;
  17                extern u32 pnp_bios_is_utter_crap;
  18                pnp_bios_is_utter_crap = 1;
  19                printk(KERN_CRIT "PNPBIOS fault.. attempting recovery.\n");
  20                __asm__ volatile(
  21                        "movl %0, %%esp\n\t"
  22                        "jmp *%1\n\t"
  23                        : : "g" (pnp_bios_fault_esp), "g" (pnp_bios_fault_eip));
  24                panic("do_trap: can't hit this");
  25        }
  26#endif
  27
  28        fixup = search_exception_tables(regs->eip);
  29        if (fixup) {
  30                regs->eip = fixup->fixup;
  31                return 1;
  32        }
  33
  34        return 0;
  35}
  36
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.