Skip to content

Commit be14601

Browse files
author
Tom Dohrmann
committed
support vmm_communication_exception
1 parent 6ba1dd6 commit be14601

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

src/structures/idt.rs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1276,6 +1276,15 @@ macro_rules! set_general_handler_entry {
12761276
}
12771277
$idt.machine_check.set_handler_fn(handler);
12781278
}};
1279+
($idt:expr, $handler:ident, $idx:ident, 0, 0, 0, 1, 1, 1, 0, 1) => {
1280+
extern "x86-interrupt" fn handler(
1281+
frame: $crate::structures::idt::InterruptStackFrame,
1282+
error_code: u64,
1283+
) {
1284+
$handler(frame, $idx.into(), Some(error_code));
1285+
}
1286+
$idt.vmm_communication_exception.set_handler_fn(handler);
1287+
};
12791288
($idt:expr, $handler:ident, $idx:ident, 0, 0, 0, 1, 1, 1, 1, 0) => {{
12801289
extern "x86-interrupt" fn handler(
12811290
frame: $crate::structures::idt::InterruptStackFrame,
@@ -1286,8 +1295,9 @@ macro_rules! set_general_handler_entry {
12861295
$idt.security_exception.set_handler_fn(handler);
12871296
}};
12881297

1289-
// reserved
1298+
// reserved_1
12901299
($idt:expr, $handler:ident, $idx:ident, 0, 0, 0, 0, 1, 1, 1, 1) => {};
1300+
// reserved_2
12911301
($idt:expr, $handler:ident, $idx:ident, 0, 0, 0, 1, 0, 1, 0, 1) => {};
12921302
($idt:expr, $handler:ident, $idx:ident, 0, 0, 0, 1, 0, 1, 1, 0) => {};
12931303
($idt:expr, $handler:ident, $idx:ident, 0, 0, 0, 1, 0, 1, 1, 1) => {};
@@ -1296,8 +1306,7 @@ macro_rules! set_general_handler_entry {
12961306
($idt:expr, $handler:ident, $idx:ident, 0, 0, 0, 1, 1, 0, 1, 0) => {};
12971307
($idt:expr, $handler:ident, $idx:ident, 0, 0, 0, 1, 1, 0, 1, 1) => {};
12981308
($idt:expr, $handler:ident, $idx:ident, 0, 0, 0, 1, 1, 1, 0, 0) => {};
1299-
($idt:expr, $handler:ident, $idx:ident, 0, 0, 0, 1, 1, 1, 0, 1) => {};
1300-
($idt:expr, $handler:ident, $idx:ident, 0, 0, 0, 1, 1, 1, 1, 0) => {};
1309+
// reserved_3
13011310
($idt:expr, $handler:ident, $idx:ident, 0, 0, 0, 1, 1, 1, 1, 1) => {};
13021311

13031312
// set entries with `HandlerFunc` signature
@@ -1377,7 +1386,7 @@ mod test {
13771386
}
13781387
set_general_handler!(&mut idt, general_handler);
13791388
for i in 0..256 {
1380-
if i == 15 || i == 31 || (i >= 21 && i <= 29) {
1389+
if i == 15 || i == 31 || (i >= 21 && i <= 28) {
13811390
// reserved entries should not be set
13821391
assert!(!entry_present(&idt, i));
13831392
} else {

0 commit comments

Comments
 (0)