Philipp Oppermann
8f8b46a9b6
Load null selectors to all data registers
...
This is required for some instructions such as iretq (ss must be valid or 0).
2017-01-14 16:38:33 +01:00
Philipp Oppermann
e179dadf70
Data segments aren't needed for 64-bit mode
2017-01-12 17:23:50 +01:00
Philipp Oppermann
1be2f42791
Make panic_fmt public to fix private_no_mangle_fns warning
2017-01-04 16:13:27 +01:00
Philipp Oppermann
a43b23b619
Catch double faults on a separate stack
2017-01-02 19:11:56 +01:00
Philipp Oppermann
006619920e
Reload code segment register and load TSS
2017-01-02 19:11:56 +01:00
Philipp Oppermann
c0d7206249
Make TSS and GDT statics by using spin::Once
2017-01-02 19:11:56 +01:00
Philipp Oppermann
31ffe60052
Add a new GDT module
2017-01-02 19:11:56 +01:00
Philipp Oppermann
d330a67659
Create a new TaskStateSegment
...
(that contains the double fault stack in its IST)
2017-01-02 19:11:56 +01:00
Philipp Oppermann
e08bd375ae
Allocate a new double fault stack in interrupts::init
2017-01-02 19:11:56 +01:00
Philipp Oppermann
8ad76ba496
Create a new MemoryAllocator (and initialize it)
2017-01-02 19:11:56 +01:00
Philipp Oppermann
4347ff235f
Add a new stack_allocator module
2017-01-02 19:11:56 +01:00
Philipp Oppermann
47755d541d
Trigger a stack overflow (still causes a triple fault)
2017-01-02 19:11:56 +01:00
Philipp Oppermann
dfa1cc48c9
Add a double fault handler (and trigger it)
2017-01-02 19:11:56 +01:00
Philipp Oppermann
7db15cf892
Reset source code to master again
...
(in order to follow the post and test the exact code from it)
2017-01-02 19:11:56 +01:00
Philipp Oppermann
c3bfcbcd8d
Silence dead code warning
2016-12-30 14:52:04 +01:00
Philipp Oppermann
58e7cc77d0
Data segment descriptors are not needed in 64-bit mode
2016-12-30 14:52:04 +01:00
Philipp Oppermann
0b03c18b06
Rewrite interrupts::init using a lazy_static IDT again
2016-12-30 14:52:04 +01:00
Philipp Oppermann
3e6b1a8a35
Rewrite gdt module using an array instead of Vec
2016-12-30 14:52:04 +01:00
Philipp Oppermann
ceb44d9c2e
Use x86's TaskStateSegment and use usize for stack pointers
2016-12-30 14:52:04 +01:00
Philipp Oppermann
ef786e1fe8
Update post and code
2016-12-30 14:52:04 +01:00
Philipp Oppermann
5f8de6e871
Create TSS and GDT modules and use a double fault stack
2016-12-30 14:52:04 +01:00
Philipp Oppermann
0cd2577abe
Some code for double faults post
2016-12-30 14:50:53 +01:00
Philipp Oppermann
02697891e2
Update x86 crate to version 0.8.0 ( #266 )
2016-12-21 14:59:57 +01:00
Philipp Oppermann
c5dd983949
Mark panic_fmt as no_mangle to work around rust-lang/rust#38281 ( #262 )
2016-12-19 11:32:20 +01:00
Philipp Oppermann
e9735738f7
Fix panic_fmt arguments: file is a &'static str
2016-11-26 12:15:34 +01:00
Philipp Oppermann
15feb9a120
Use references for the ExceptionStackFrame argument
...
We require/assume that these pointers are correct. Using references is cleaner than blindly dereferencing raw pointers.
Important: The Rust book guarantees that: “At runtime, a raw pointer * and a reference pointing to the same piece of data have an identical representation.”
2016-11-01 16:56:11 +01:00
Philipp Oppermann
7a0bb1ff7b
Print an empty line before exception error messages
2016-10-31 01:37:37 +01:00
Philipp Oppermann
9b83b2853e
Remove print_error and use normal println in exception handlers
2016-10-30 16:51:59 +01:00
Philipp Oppermann
212dcfa592
Make print_error safe by using the global writer
...
This is now possible since we fixed the deadlock problem.
2016-10-30 16:51:59 +01:00
Philipp Oppermann
d96df500a7
Create a new print function and use it in the print macro
...
This fixes the deadlock problem, because the format_args is now evaluated before locking the screen writer. So `println!("{:?}", {println!("");})` no longer triggers a deadlock.
2016-10-30 16:51:59 +01:00
Philipp Oppermann
d7a445b1bb
Use volatile operations for accessing the VGA buffer
2016-10-06 23:57:26 +02:00
Philipp Oppermann
a04924955a
Add missing license headers and update copyright year ( #232 )
2016-10-02 18:20:48 +02:00
Philipp Oppermann
6eba03dd58
Update bit_field to 0.5.0 and use new API
2016-09-27 13:24:01 +02:00
Philipp Oppermann
00701ca474
Add code for “Returning from Exceptions”
2016-09-21 14:34:32 +02:00
Philipp Oppermann
3bd5e56e3f
Use upstream lazy_static and update once crate
2016-08-04 20:09:25 +02:00
Philipp Oppermann
46d41d9c3d
Add missing rsi clobber in code as well
2016-08-04 01:07:51 +02:00
Philipp Oppermann
d13460812d
Run rustfmt
2016-08-03 17:00:18 +02:00
Philipp Oppermann
a9319ea83e
Translate error code and print cr2 register
2016-08-03 17:00:18 +02:00
Philipp Oppermann
69f1b58bb0
Add and test a handler_with_error_code macro and a page fault handler
2016-08-03 17:00:18 +02:00
Philipp Oppermann
df1e39edb2
Add and test an invalid opcode handler function
2016-08-03 17:00:18 +02:00
Philipp Oppermann
71ebb23ec3
Add a handler macro that creates wrapper functions
2016-08-03 17:00:18 +02:00
Philipp Oppermann
e7ee1faaba
Add a wrapper function and print the exception stack frame
2016-08-03 17:00:18 +02:00
Philipp Oppermann
d97a8a3210
Silence dead code warnings
2016-08-03 17:00:18 +02:00
Philipp Oppermann
297f8442b9
Reset src to master to be able to follow step-by-step
2016-08-03 17:00:18 +02:00
Philipp Oppermann
398ba7a424
Provoke a page fault
2016-08-03 17:00:18 +02:00
Philipp Oppermann
261f92e2e5
Print cr2 in page_fault_handler
2016-08-03 17:00:18 +02:00
Philipp Oppermann
e9d2d594ab
Add handler! macros
2016-08-03 17:00:18 +02:00
Philipp Oppermann
40b565947b
Test the two-stage exception handler in code
2016-08-03 17:00:18 +02:00
Philipp Oppermann
2e0f4f9161
Begin code for upcoming post
2016-08-03 17:00:11 +02:00
Philipp Oppermann
2445b47661
Add aligned .got and .got.plt sections to linker script
2016-07-14 18:07:26 +02:00