mirror of
https://github.com/phil-opp/blog_os.git
synced 2025-12-17 23:07:50 +00:00
docs: remove &mut
Replace `&mut InterruptStackFrame` to `InterruptStackFrame` due to the version updating. Closes #1030
This commit is contained in:
@@ -129,7 +129,7 @@ pub struct InterruptDescriptorTable {
|
|||||||
بیایید ابتدا به نوع `HandlerFunc` نگاه کنیم:
|
بیایید ابتدا به نوع `HandlerFunc` نگاه کنیم:
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
type HandlerFunc = extern "x86-interrupt" fn(_: &mut InterruptStackFrame);
|
type HandlerFunc = extern "x86-interrupt" fn(_: InterruptStackFrame);
|
||||||
```
|
```
|
||||||
|
|
||||||
این یک [نوع مستعار(type alias)] برای نوع "`extern "x86-interrupt" fn` است. کلمه کلیدی `extern` تابعی را با یک [قرارداد فراخوانی خارجی] تعریف می کند و اغلب برای برقراری ارتباط با کد C استفاده می شود(`extern "C" fn`) . اما قرارداد فراخوانی `x86-interrupt` چیست؟
|
این یک [نوع مستعار(type alias)] برای نوع "`extern "x86-interrupt" fn` است. کلمه کلیدی `extern` تابعی را با یک [قرارداد فراخوانی خارجی] تعریف می کند و اغلب برای برقراری ارتباط با کد C استفاده می شود(`extern "C" fn`) . اما قرارداد فراخوانی `x86-interrupt` چیست؟
|
||||||
@@ -255,7 +255,7 @@ pub fn init_idt() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
extern "x86-interrupt" fn breakpoint_handler(
|
extern "x86-interrupt" fn breakpoint_handler(
|
||||||
stack_frame: &mut InterruptStackFrame)
|
stack_frame: InterruptStackFrame)
|
||||||
{
|
{
|
||||||
println!("EXCEPTION: BREAKPOINT\n{:#?}", stack_frame);
|
println!("EXCEPTION: BREAKPOINT\n{:#?}", stack_frame);
|
||||||
}
|
}
|
||||||
@@ -269,7 +269,7 @@ extern "x86-interrupt" fn breakpoint_handler(
|
|||||||
error[E0658]: x86-interrupt ABI is experimental and subject to change (see issue #40180)
|
error[E0658]: x86-interrupt ABI is experimental and subject to change (see issue #40180)
|
||||||
--> src/main.rs:53:1
|
--> src/main.rs:53:1
|
||||||
|
|
|
|
||||||
53 | / extern "x86-interrupt" fn breakpoint_handler(stack_frame: &mut InterruptStackFrame) {
|
53 | / extern "x86-interrupt" fn breakpoint_handler(stack_frame: InterruptStackFrame) {
|
||||||
54 | | println!("EXCEPTION: BREAKPOINT\n{:#?}", stack_frame);
|
54 | | println!("EXCEPTION: BREAKPOINT\n{:#?}", stack_frame);
|
||||||
55 | | }
|
55 | | }
|
||||||
| |_^
|
| |_^
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ pub struct InterruptDescriptorTable {
|
|||||||
まず`HandlerFunc`型を見てみましょう:
|
まず`HandlerFunc`型を見てみましょう:
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
type HandlerFunc = extern "x86-interrupt" fn(_: &mut InterruptStackFrame);
|
type HandlerFunc = extern "x86-interrupt" fn(_: InterruptStackFrame);
|
||||||
```
|
```
|
||||||
|
|
||||||
これは、`extern "x86-interrupt" fn`型への[型エイリアス][type alias]です。`extern`は[外部呼び出し規約][foreign calling convention]に従う関数を定義するのに使われ、おもにC言語のコードと連携したいときに使われます (`extern "C" fn`) 。しかし、`x86-interrupt`呼び出し規約とは何なのでしょう?
|
これは、`extern "x86-interrupt" fn`型への[型エイリアス][type alias]です。`extern`は[外部呼び出し規約][foreign calling convention]に従う関数を定義するのに使われ、おもにC言語のコードと連携したいときに使われます (`extern "C" fn`) 。しかし、`x86-interrupt`呼び出し規約とは何なのでしょう?
|
||||||
@@ -253,7 +253,7 @@ pub fn init_idt() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
extern "x86-interrupt" fn breakpoint_handler(
|
extern "x86-interrupt" fn breakpoint_handler(
|
||||||
stack_frame: &mut InterruptStackFrame)
|
stack_frame: InterruptStackFrame)
|
||||||
{
|
{
|
||||||
println!("EXCEPTION: BREAKPOINT\n{:#?}", stack_frame);
|
println!("EXCEPTION: BREAKPOINT\n{:#?}", stack_frame);
|
||||||
}
|
}
|
||||||
@@ -267,7 +267,7 @@ extern "x86-interrupt" fn breakpoint_handler(
|
|||||||
error[E0658]: x86-interrupt ABI is experimental and subject to change (see issue #40180)
|
error[E0658]: x86-interrupt ABI is experimental and subject to change (see issue #40180)
|
||||||
--> src/main.rs:53:1
|
--> src/main.rs:53:1
|
||||||
|
|
|
|
||||||
53 | / extern "x86-interrupt" fn breakpoint_handler(stack_frame: &mut InterruptStackFrame) {
|
53 | / extern "x86-interrupt" fn breakpoint_handler(stack_frame: InterruptStackFrame) {
|
||||||
54 | | println!("EXCEPTION: BREAKPOINT\n{:#?}", stack_frame);
|
54 | | println!("EXCEPTION: BREAKPOINT\n{:#?}", stack_frame);
|
||||||
55 | | }
|
55 | | }
|
||||||
| |_^
|
| |_^
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ lazy_static! {
|
|||||||
|
|
||||||
// new
|
// new
|
||||||
extern "x86-interrupt" fn double_fault_handler(
|
extern "x86-interrupt" fn double_fault_handler(
|
||||||
stack_frame: &mut InterruptStackFrame, _error_code: u64) -> !
|
stack_frame: InterruptStackFrame, _error_code: u64) -> !
|
||||||
{
|
{
|
||||||
panic!("EXCEPTION: DOUBLE FAULT\n{:#?}", stack_frame);
|
panic!("EXCEPTION: DOUBLE FAULT\n{:#?}", stack_frame);
|
||||||
}
|
}
|
||||||
@@ -543,7 +543,7 @@ use blog_os::{exit_qemu, QemuExitCode, serial_println};
|
|||||||
use x86_64::structures::idt::InterruptStackFrame;
|
use x86_64::structures::idt::InterruptStackFrame;
|
||||||
|
|
||||||
extern "x86-interrupt" fn test_double_fault_handler(
|
extern "x86-interrupt" fn test_double_fault_handler(
|
||||||
_stack_frame: &mut InterruptStackFrame,
|
_stack_frame: InterruptStackFrame,
|
||||||
_error_code: u64,
|
_error_code: u64,
|
||||||
) -> ! {
|
) -> ! {
|
||||||
serial_println!("[ok]");
|
serial_println!("[ok]");
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ lazy_static! {
|
|||||||
|
|
||||||
// new
|
// new
|
||||||
extern "x86-interrupt" fn double_fault_handler(
|
extern "x86-interrupt" fn double_fault_handler(
|
||||||
stack_frame: &mut InterruptStackFrame, _error_code: u64) -> !
|
stack_frame: InterruptStackFrame, _error_code: u64) -> !
|
||||||
{
|
{
|
||||||
panic!("EXCEPTION: DOUBLE FAULT\n{:#?}", stack_frame);
|
panic!("EXCEPTION: DOUBLE FAULT\n{:#?}", stack_frame);
|
||||||
}
|
}
|
||||||
@@ -529,7 +529,7 @@ use blog_os::{exit_qemu, QemuExitCode, serial_println};
|
|||||||
use x86_64::structures::idt::InterruptStackFrame;
|
use x86_64::structures::idt::InterruptStackFrame;
|
||||||
|
|
||||||
extern "x86-interrupt" fn test_double_fault_handler(
|
extern "x86-interrupt" fn test_double_fault_handler(
|
||||||
_stack_frame: &mut InterruptStackFrame,
|
_stack_frame: InterruptStackFrame,
|
||||||
_error_code: u64,
|
_error_code: u64,
|
||||||
) -> ! {
|
) -> ! {
|
||||||
serial_println!("[ok]");
|
serial_println!("[ok]");
|
||||||
|
|||||||
@@ -205,7 +205,7 @@ lazy_static! {
|
|||||||
}
|
}
|
||||||
|
|
||||||
extern "x86-interrupt" fn timer_interrupt_handler(
|
extern "x86-interrupt" fn timer_interrupt_handler(
|
||||||
_stack_frame: &mut InterruptStackFrame)
|
_stack_frame: InterruptStackFrame)
|
||||||
{
|
{
|
||||||
print!(".");
|
print!(".");
|
||||||
}
|
}
|
||||||
@@ -230,7 +230,7 @@ extern "x86-interrupt" fn timer_interrupt_handler(
|
|||||||
// in src/interrupts.rs
|
// in src/interrupts.rs
|
||||||
|
|
||||||
extern "x86-interrupt" fn timer_interrupt_handler(
|
extern "x86-interrupt" fn timer_interrupt_handler(
|
||||||
_stack_frame: &mut InterruptStackFrame)
|
_stack_frame: InterruptStackFrame)
|
||||||
{
|
{
|
||||||
print!(".");
|
print!(".");
|
||||||
|
|
||||||
@@ -543,7 +543,7 @@ lazy_static! {
|
|||||||
}
|
}
|
||||||
|
|
||||||
extern "x86-interrupt" fn keyboard_interrupt_handler(
|
extern "x86-interrupt" fn keyboard_interrupt_handler(
|
||||||
_stack_frame: &mut InterruptStackFrame)
|
_stack_frame: InterruptStackFrame)
|
||||||
{
|
{
|
||||||
print!("k");
|
print!("k");
|
||||||
|
|
||||||
@@ -568,7 +568,7 @@ extern "x86-interrupt" fn keyboard_interrupt_handler(
|
|||||||
// in src/interrupts.rs
|
// in src/interrupts.rs
|
||||||
|
|
||||||
extern "x86-interrupt" fn keyboard_interrupt_handler(
|
extern "x86-interrupt" fn keyboard_interrupt_handler(
|
||||||
_stack_frame: &mut InterruptStackFrame)
|
_stack_frame: InterruptStackFrame)
|
||||||
{
|
{
|
||||||
use x86_64::instructions::port::Port;
|
use x86_64::instructions::port::Port;
|
||||||
|
|
||||||
@@ -609,7 +609,7 @@ extern "x86-interrupt" fn keyboard_interrupt_handler(
|
|||||||
// in src/interrupts.rs
|
// in src/interrupts.rs
|
||||||
|
|
||||||
extern "x86-interrupt" fn keyboard_interrupt_handler(
|
extern "x86-interrupt" fn keyboard_interrupt_handler(
|
||||||
_stack_frame: &mut InterruptStackFrame)
|
_stack_frame: InterruptStackFrame)
|
||||||
{
|
{
|
||||||
use x86_64::instructions::port::Port;
|
use x86_64::instructions::port::Port;
|
||||||
|
|
||||||
@@ -668,7 +668,7 @@ pc-keyboard = "0.5.0"
|
|||||||
// in/src/interrupts.rs
|
// in/src/interrupts.rs
|
||||||
|
|
||||||
extern "x86-interrupt" fn keyboard_interrupt_handler(
|
extern "x86-interrupt" fn keyboard_interrupt_handler(
|
||||||
_stack_frame: &mut InterruptStackFrame)
|
_stack_frame: InterruptStackFrame)
|
||||||
{
|
{
|
||||||
use pc_keyboard::{layouts, DecodedKey, HandleControl, Keyboard, ScancodeSet1};
|
use pc_keyboard::{layouts, DecodedKey, HandleControl, Keyboard, ScancodeSet1};
|
||||||
use spin::Mutex;
|
use spin::Mutex;
|
||||||
|
|||||||
@@ -288,7 +288,7 @@ use x86_64::structures::idt::PageFaultErrorCode;
|
|||||||
use crate::hlt_loop;
|
use crate::hlt_loop;
|
||||||
|
|
||||||
extern "x86-interrupt" fn page_fault_handler(
|
extern "x86-interrupt" fn page_fault_handler(
|
||||||
stack_frame: &mut InterruptStackFrame,
|
stack_frame: InterruptStackFrame,
|
||||||
error_code: PageFaultErrorCode,
|
error_code: PageFaultErrorCode,
|
||||||
) {
|
) {
|
||||||
use x86_64::registers::control::Cr2;
|
use x86_64::registers::control::Cr2;
|
||||||
|
|||||||
@@ -295,7 +295,7 @@ use x86_64::structures::idt::PageFaultErrorCode;
|
|||||||
use crate::hlt_loop;
|
use crate::hlt_loop;
|
||||||
|
|
||||||
extern "x86-interrupt" fn page_fault_handler(
|
extern "x86-interrupt" fn page_fault_handler(
|
||||||
stack_frame: &mut InterruptStackFrame,
|
stack_frame: InterruptStackFrame,
|
||||||
error_code: PageFaultErrorCode,
|
error_code: PageFaultErrorCode,
|
||||||
) {
|
) {
|
||||||
use x86_64::registers::control::Cr2;
|
use x86_64::registers::control::Cr2;
|
||||||
|
|||||||
@@ -1144,7 +1144,7 @@ pub(crate) fn add_scancode(scancode: u8) {
|
|||||||
// in src/interrupts.rs
|
// in src/interrupts.rs
|
||||||
|
|
||||||
extern "x86-interrupt" fn keyboard_interrupt_handler(
|
extern "x86-interrupt" fn keyboard_interrupt_handler(
|
||||||
_stack_frame: &mut InterruptStackFrame
|
_stack_frame: InterruptStackFrame
|
||||||
) {
|
) {
|
||||||
use x86_64::instructions::port::Port;
|
use x86_64::instructions::port::Port;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user