Spaces:
Runtime error
Runtime error
File size: 795 Bytes
8df6da4 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
/*
* Copyright 2010 Siemens AG
* Author: Jan Kiszka
*
* Released under GPLv2.
*/
#include "libcflat.h"
#include "x86/desc.h"
#define TSS_RETURN (FIRST_SPARE_SEL)
void fault_entry(void);
static __attribute__((used, regparm(1))) void
fault_handler(unsigned long error_code)
{
print_current_tss_info();
printf("error code %lx\n", error_code);
tss.eip += 2;
gdt32[TSS_MAIN / 8].access &= ~2;
set_gdt_task_gate(TSS_RETURN, tss_intr.prev);
}
asm (
"fault_entry:\n"
" mov (%esp),%eax\n"
" call fault_handler\n"
" jmp $" xstr(TSS_RETURN) ", $0\n"
);
int main(int ac, char **av)
{
const long invalid_segment = 0x1234;
setup_tss32();
set_intr_task_gate(13, fault_entry);
asm (
"mov %0,%%es\n"
: : "r" (invalid_segment) : "edi"
);
printf("post fault\n");
return 0;
}
|