Logo Search packages:      
Sourcecode: linux version File versions  Download package

extable_32.c

/*
 * linux/arch/i386/mm/extable.c
 */

#include <linux/module.h>
#include <linux/spinlock.h>
#include <asm/uaccess.h>

int fixup_exception(struct pt_regs *regs)
{
      const struct exception_table_entry *fixup;

#ifdef CONFIG_PNPBIOS
      if (unlikely(SEGMENT_IS_PNP_CODE(regs->xcs)))
      {
            extern u32 pnp_bios_fault_eip, pnp_bios_fault_esp;
            extern u32 pnp_bios_is_utter_crap;
            pnp_bios_is_utter_crap = 1;
            printk(KERN_CRIT "PNPBIOS fault.. attempting recovery.\n");
            __asm__ volatile(
                  "movl %0, %%esp\n\t"
                  "jmp *%1\n\t"
                  : : "g" (pnp_bios_fault_esp), "g" (pnp_bios_fault_eip));
            panic("do_trap: can't hit this");
      }
#endif

      fixup = search_exception_tables(regs->eip);
      if (fixup) {
            regs->eip = fixup->fixup;
            return 1;
      }

      return 0;
}

Generated by  Doxygen 1.6.0   Back to index