2022-07-25 07:52:09 +04:00
<!DOCTYPE html> < html lang = "en" > < head > < meta charset = "utf-8" > < meta name = "viewport" content = "width=device-width, initial-scale=1.0" > < meta name = "generator" content = "rustdoc" > < meta name = "description" content = "Trap handling functionality" > < meta name = "keywords" content = "rust, rustlang, rust-lang, trap" > < title > os::trap - Rust< / title > < link rel = "preload" as = "font" type = "font/woff2" crossorigin href = "../../SourceSerif4-Regular.ttf.woff2" > < link rel = "preload" as = "font" type = "font/woff2" crossorigin href = "../../FiraSans-Regular.woff2" > < link rel = "preload" as = "font" type = "font/woff2" crossorigin href = "../../FiraSans-Medium.woff2" > < link rel = "preload" as = "font" type = "font/woff2" crossorigin href = "../../SourceCodePro-Regular.ttf.woff2" > < link rel = "preload" as = "font" type = "font/woff2" crossorigin href = "../../SourceSerif4-Bold.ttf.woff2" > < link rel = "preload" as = "font" type = "font/woff2" crossorigin href = "../../SourceCodePro-Semibold.ttf.woff2" > < link rel = "stylesheet" type = "text/css" href = "../../normalize.css" > < link rel = "stylesheet" type = "text/css" href = "../../rustdoc.css" id = "mainThemeStyle" > < link rel = "stylesheet" type = "text/css" href = "../../ayu.css" disabled > < link rel = "stylesheet" type = "text/css" href = "../../dark.css" disabled > < link rel = "stylesheet" type = "text/css" href = "../../light.css" id = "themeStyle" > < script id = "default-settings" > < / script > < script src = "../../storage.js" > < / script > < script defer src = "../../main.js" > < / script > < noscript > < link rel = "stylesheet" href = "../../noscript.css" > < / noscript > < link rel = "alternate icon" type = "image/png" href = "../../favicon-16x16.png" > < link rel = "alternate icon" type = "image/png" href = "../../favicon-32x32.png" > < link rel = "icon" type = "image/svg+xml" href = "../../favicon.svg" > < / head > < body class = "rustdoc mod" > <!-- [if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif] --> < nav class = "mobile-topbar" > < button class = "sidebar-menu-toggle" > ☰ < / button > < a class = "sidebar-logo" href = "../../os/index.html" > < div class = "logo-container" > < img class = "rust-logo" src = "../../rust-logo.svg" alt = "logo" > < / div >
2022-04-15 14:41:47 +04:00
< / a > < h2 class = "location" > < / h2 >
< / nav >
< nav class = "sidebar" > < a class = "sidebar-logo" href = "../../os/index.html" > < div class = "logo-container" > < img class = "rust-logo" src = "../../rust-logo.svg" alt = "logo" > < / div >
2022-07-25 07:52:09 +04:00
< / a > < h2 class = "location" > < a href = "#" > Module trap< / a > < / h2 > < div class = "sidebar-elems" > < section > < div class = "block" > < ul > < li > < a href = "#modules" > Modules< / a > < / li > < li > < a href = "#structs" > Structs< / a > < / li > < li > < a href = "#functions" > Functions< / a > < / li > < / ul > < / div > < / section > < / div > < / nav > < main > < div class = "width-limiter" > < div class = "sub-container" > < a class = "sub-logo-container" href = "../../os/index.html" > < img class = "rust-logo" src = "../../rust-logo.svg" alt = "logo" > < / a > < nav class = "sub" > < form class = "search-form" > < div class = "search-container" > < span > < / span > < input class = "search-input" name = "search" autocomplete = "off" spellcheck = "false" placeholder = "Click or press ‘ S’ to search, ‘ ?’ for more options…" type = "search" > < div id = "help-button" title = "help" tabindex = "-1" > < button type = "button" > ?< / button > < / div > < div id = "settings-menu" tabindex = "-1" >
< a href = "../../settings.html" title = "settings" > < img width = "22" height = "22" alt = "Change settings" src = "../../wheel.svg" > < / a > < / div >
< / div > < / form > < / nav > < / div > < section id = "main-content" class = "content" > < div class = "main-heading" >
2022-04-15 14:41:47 +04:00
< h1 class = "fqn" > < span class = "in-band" > Module < a href = "../index.html" > os< / a > ::< wbr > < a class = "mod" href = "#" > trap< / a > < button id = "copy-path" onclick = "copy_path(this)" title = "Copy item path to clipboard" > < img src = "../../clipboard.svg" width = "19" height = "18" alt = "Copy item path" > < / button > < / span > < / h1 > < span class = "out-of-band" > < a class = "srclink" href = "../../src/os/trap/mod.rs.html#1-79" > source< / a > · < a id = "toggle-all-docs" href = "javascript:void(0)" title = "collapse all docs" > [< span class = "inner" > − < / span > ]< / a > < / span > < / div > < details class = "rustdoc-toggle top-doc" open > < summary class = "hideme" > < span > Expand description< / span > < / summary > < div class = "docblock" > < p > Trap handling functionality< / p >
2022-03-25 12:46:49 +04:00
< p > For rCore, we have a single trap entry point, namely < code > __alltraps< / code > . At
initialization in < a href = "fn.init.html" title = "init()" > < code > init()< / code > < / a > , we set the < code > stvec< / code > CSR to point to it.< / p >
< p > All traps go through < code > __alltraps< / code > , which is defined in < code > trap.S< / code > . The
assembly language code does just enough work restore the kernel space
context, ensuring that Rust code safely runs, and transfers control to
< a href = "fn.trap_handler.html" title = "trap_handler()" > < code > trap_handler()< / code > < / a > .< / p >
< p > It then calls different functionality based on what exactly the exception
was. For example, timer interrupts trigger task preemption, and syscalls go
to < a href = "../syscall/fn.syscall.html" title = "syscall()" > < code > syscall()< / code > < / a > .< / p >
< / div > < / details > < h2 id = "modules" class = "small-section-header" > < a href = "#modules" > Modules< / a > < / h2 >
2022-04-15 14:41:47 +04:00
< div class = "item-table" > < div class = "item-row" > < div class = "item-left module-item" > < a class = "mod" href = "context/index.html" title = "os::trap::context mod" > context< / a > < span title = "Restricted Visibility" > 🔒< / span > < / div > < div class = "item-right docblock-short" > < / div > < / div > < / div > < h2 id = "structs" class = "small-section-header" > < a href = "#structs" > Structs< / a > < / h2 >
2022-03-25 12:46:49 +04:00
< div class = "item-table" > < div class = "item-row" > < div class = "item-left module-item" > < a class = "struct" href = "struct.TrapContext.html" title = "os::trap::TrapContext struct" > TrapContext< / a > < / div > < div class = "item-right docblock-short" > < p > Trap Context< / p >
< / div > < / div > < / div > < h2 id = "functions" class = "small-section-header" > < a href = "#functions" > Functions< / a > < / h2 >
2022-03-20 17:29:06 +04:00
< div class = "item-table" > < div class = "item-row" > < div class = "item-left module-item" > < a class = "fn" href = "fn.enable_timer_interrupt.html" title = "os::trap::enable_timer_interrupt fn" > enable_timer_interrupt< / a > < / div > < div class = "item-right docblock-short" > < p > timer interrupt enabled< / p >
< / div > < / div > < div class = "item-row" > < div class = "item-left module-item" > < a class = "fn" href = "fn.init.html" title = "os::trap::init fn" > init< / a > < / div > < div class = "item-right docblock-short" > < p > initialize CSR < code > stvec< / code > as the entry of < code > __alltraps< / code > < / p >
< / div > < / div > < div class = "item-row" > < div class = "item-left module-item" > < a class = "fn" href = "fn.trap_handler.html" title = "os::trap::trap_handler fn" > trap_handler< / a > < / div > < div class = "item-right docblock-short" > < p > handle an interrupt, exception, or system call from user space< / p >
2022-07-25 07:52:09 +04:00
< / div > < / div > < / div > < / section > < / div > < / main > < div id = "rustdoc-vars" data-root-path = "../../" data-current-crate = "os" data-themes = "ayu,dark,light" data-resource-suffix = "" data-rustdoc-version = "1.64.0-nightly (9a7b7d5e5 2022-07-19)" > < / div >
2022-03-20 17:29:06 +04:00
< / body > < / html >