From 57d44f6648bba3eb2746e64fbf28cbac4012a19c Mon Sep 17 00:00:00 2001 From: Aurabindo Jayamohanan Date: Sun, 11 Aug 2019 12:55:39 +0530 Subject: Add {M,P}SPLIM access routines found on ARMv8-M Signed-off-by: Aurabindo Jayamohanan --- asm-v8-main.s | 28 ++++++++++++++++++++++++ assemble.sh | 6 ++++- bin/thumbv8m.main-none-eabi.a | Bin 2810 -> 5220 bytes bin/thumbv8m.main-none-eabihf.a | Bin 0 -> 5220 bytes build.rs | 6 ++++- src/register/mod.rs | 6 +++++ src/register/msplim.rs | 47 ++++++++++++++++++++++++++++++++++++++++ src/register/psplim.rs | 47 ++++++++++++++++++++++++++++++++++++++++ 8 files changed, 138 insertions(+), 2 deletions(-) create mode 100644 asm-v8-main.s create mode 100644 bin/thumbv8m.main-none-eabihf.a create mode 100644 src/register/msplim.rs create mode 100644 src/register/psplim.rs diff --git a/asm-v8-main.s b/asm-v8-main.s new file mode 100644 index 0000000..a59845c --- /dev/null +++ b/asm-v8-main.s @@ -0,0 +1,28 @@ + .section .text.__msplim_r + .global __msplim_r + .thumb_func +__msplim_r: + mrs r0, MSPLIM + bx lr + + .section .text.__msplim_w + .global __msplim_w + .thumb_func +__msplim_w: + msr MSPLIM, r0 + bx lr + + .section .text.__psplim_r + .global __psplim_r + .thumb_func +__psplim_r: + mrs r0, PSPLIM + bx lr + + .section .text.__psplim_w + .global __psplim_w + .thumb_func +__psplim_w: + msr PSPLIM, r0 + bx lr + diff --git a/assemble.sh b/assemble.sh index 28494a9..6a4ccdd 100755 --- a/assemble.sh +++ b/assemble.sh @@ -26,8 +26,12 @@ arm-none-eabi-as -march=armv8-m.base asm.s -o bin/$crate.o ar crs bin/thumbv8m.base-none-eabi.a bin/$crate.o arm-none-eabi-as -march=armv8-m.main asm.s -o bin/$crate.o -ar crs bin/thumbv8m.main-none-eabi.a bin/$crate.o +arm-none-eabi-as -march=armv8-m.main asm-v7.s -o bin/$crate-v7.o +arm-none-eabi-as -march=armv8-m.main asm-v8-main.s -o bin/$crate-v8-main.o +ar crs bin/thumbv8m.main-none-eabi.a bin/$crate.o bin/$crate-v7.o bin/$crate-v8-main.o +ar crs bin/thumbv8m.main-none-eabihf.a bin/$crate.o bin/$crate-v7.o bin/$crate-v8-main.o rm bin/$crate.o rm bin/$crate-v7.o rm bin/$crate-cm7-r0p1.o +rm bin/$crate-v8-main.o diff --git a/bin/thumbv8m.main-none-eabi.a b/bin/thumbv8m.main-none-eabi.a index ddf83c1..a0b35de 100644 Binary files a/bin/thumbv8m.main-none-eabi.a and b/bin/thumbv8m.main-none-eabi.a differ diff --git a/bin/thumbv8m.main-none-eabihf.a b/bin/thumbv8m.main-none-eabihf.a new file mode 100644 index 0000000..a0b35de Binary files /dev/null and b/bin/thumbv8m.main-none-eabihf.a differ diff --git a/build.rs b/build.rs index 47e86bb..3ca7ddf 100644 --- a/build.rs +++ b/build.rs @@ -26,9 +26,13 @@ fn main() { println!("cargo:rustc-cfg=cortex_m"); println!("cargo:rustc-cfg=armv7m"); //println!("cargo:rustc-cfg=armv7em"); - } else if target.starts_with("thumbv8m") { + } else if target.starts_with("thumbv8m.base") { println!("cargo:rustc-cfg=cortex_m"); println!("cargo:rustc-cfg=armv8m"); + } else if target.starts_with("thumbv8m.main") { + println!("cargo:rustc-cfg=cortex_m"); + println!("cargo:rustc-cfg=armv8m"); + println!("cargo:rustc-cfg=armv8m_main"); } if target.ends_with("-eabihf") { diff --git a/src/register/mod.rs b/src/register/mod.rs index 1444aff..854d725 100644 --- a/src/register/mod.rs +++ b/src/register/mod.rs @@ -43,6 +43,12 @@ pub mod primask; pub mod psp; +#[cfg(armv8m_main)] +pub mod msplim; + +#[cfg(armv8m_main)] +pub mod psplim; + // Accessing these registers requires inline assembly because their contents are tied to the current // stack frame #[cfg(any(feature = "inline-asm", target_arch = "x86_64"))] diff --git a/src/register/msplim.rs b/src/register/msplim.rs new file mode 100644 index 0000000..df3642a --- /dev/null +++ b/src/register/msplim.rs @@ -0,0 +1,47 @@ +//! Main Stack Pointer Limit Register + +/// Reads the CPU register +#[inline] +pub fn read() -> u32 { + match () { + #[cfg(all(cortex_m, feature = "inline-asm"))] + () => { + let r; + unsafe { asm!("mrs $0,MSPLIM" : "=r"(r) ::: "volatile") } + r + } + + #[cfg(all(cortex_m, not(feature = "inline-asm")))] + () => unsafe { + extern "C" { + fn __msplim_r() -> u32; + } + + __msplim_r() + }, + + #[cfg(not(cortex_m))] + () => unimplemented!(), + } +} + +/// Writes `bits` to the CPU register +#[inline] +pub unsafe fn write(_bits: u32) { + match () { + #[cfg(all(cortex_m, feature = "inline-asm"))] + () => asm!("msr MSPLIM,$0" :: "r"(_bits) :: "volatile"), + + #[cfg(all(cortex_m, not(feature = "inline-asm")))] + () => { + extern "C" { + fn __msplim_w(_: u32); + } + + __msplim_w(_bits); + } + + #[cfg(not(cortex_m))] + () => unimplemented!(), + } +} diff --git a/src/register/psplim.rs b/src/register/psplim.rs new file mode 100644 index 0000000..6c27008 --- /dev/null +++ b/src/register/psplim.rs @@ -0,0 +1,47 @@ +//! Process Stack Pointer Limit Register + +/// Reads the CPU register +#[inline] +pub fn read() -> u32 { + match () { + #[cfg(all(cortex_m, feature = "inline-asm"))] + () => { + let r; + unsafe { asm!("mrs $0,PSPLIM" : "=r"(r) ::: "volatile") } + r + } + + #[cfg(all(cortex_m, not(feature = "inline-asm")))] + () => unsafe { + extern "C" { + fn __psplim_r() -> u32; + } + + __psplim_r() + }, + + #[cfg(not(cortex_m))] + () => unimplemented!(), + } +} + +/// Writes `bits` to the CPU register +#[inline] +pub unsafe fn write(_bits: u32) { + match () { + #[cfg(all(cortex_m, feature = "inline-asm"))] + () => asm!("msr PSPLIM,$0" :: "r"(_bits) :: "volatile"), + + #[cfg(all(cortex_m, not(feature = "inline-asm")))] + () => { + extern "C" { + fn __psplim_w(_: u32); + } + + __psplim_w(_bits); + } + + #[cfg(not(cortex_m))] + () => unimplemented!(), + } +} -- cgit v1.2.3 ed/canvas'>jarred/canvas Unnamed repository; edit this file 'description' to name the repository.
aboutsummaryrefslogtreecommitdiff
AgeCommit message (Expand)AuthorFilesLines
2023-07-30Fixes #3884Gravatar Jarred Sumner 2-42/+7
2023-07-30BumpGravatar Jarred Sumner 1-1/+1
2023-07-30remove unnecessary moveGravatar Jarred Sumner 1-1/+1
2023-07-30Fix memory leak (#3887)Gravatar Jarred Sumner 10-87/+191
2023-07-30Fix coredump when reading an empty file(`node:stream:createReadStream`) (#3882)Gravatar Ai Hoshino 2-0/+30
2023-07-30Improv. (#3885)Gravatar Tiramify (A.K. Daniel) 3-37/+38
2023-07-29Make `bun:jsc` memoryUsage more accurate (#3876)Gravatar Jarred Sumner 6-68/+61
2023-07-29docs: fixed small errors (#3879)Gravatar 0xflotus 4-4/+4
2023-07-29fix: small error (#3878)Gravatar 0xflotus 1-1/+1
2023-07-29typo spawn.md (#3875)Gravatar Jhorman Tito 1-1/+1
2023-07-28Update nodejs-apis.mdGravatar Jarred Sumner 1-4/+4
2023-07-28Update nodejs-apis.mdGravatar Jarred Sumner 1-5/+5
2023-07-28Defer task destructionbun-v0.7.1Gravatar Jarred Sumner 1-1/+17
2023-07-28Stat largefile test (#3870)Gravatar Jarred Sumner 1-0/+22
2023-07-28Ignore when printing to stdout errors (#3869)Gravatar Jarred Sumner 1-2/+4
2023-07-28Fix bug with `/path/to/absolute/bun.lockb`Gravatar Jarred Sumner 1-10/+13
2023-07-28markBindingGravatar Dylan Conway 1-0/+1
2023-07-28optional parameterGravatar Dylan Conway 1-3/+3
2023-07-28Fixes #3868Gravatar Jarred Sumner 1-2/+3
2023-07-28Fix assertion failure and possible infinite loop when printing as yarn lock f...Gravatar Jarred Sumner 2-3/+16
2023-07-28Mark broken test as todoGravatar Jarred Sumner 2-1/+5
2023-07-28fix types and add message channel/port gc testGravatar Dylan Conway 2-62/+18
2023-07-28`MessageChannel` and `MessagePort` (#3860)Gravatar Dylan Conway 57-247/+3752
2023-07-28mark tests as todoGravatar Jarred Sumner 2-81/+75
2023-07-28add fork to child_process (#3851)Gravatar Vlad Sirenko 7-19/+446
2023-07-28feat(bun/test): Impl. expect().pass() & expect().fail() (#3843)Gravatar Tiramify (A.K. Daniel) 6-5/+212
2023-07-28fix the chunk boundary (`node:stream:createReadStream`) (#3853)Gravatar Ai Hoshino 3-8/+90
2023-07-28Support file: URLs in `fetch` (#3858)Gravatar Jarred Sumner 6-183/+281
2023-07-28fix(tls) exposes native canonicalizeIP and fix rootCertificates (#3866)Gravatar Ciro Spaciari 7-29/+125
2023-07-28Fixes #3795 (#3856)Gravatar Jarred Sumner 11-6/+140
2023-07-28Add todoGravatar Jarred Sumner 2-0/+8
2023-07-28Update pull_request_template.mdGravatar Jarred Sumner 1-1/+1
2023-07-28Update pull_request_template.mdGravatar Jarred Sumner 1-11/+16
2023-07-27Fix bug with // @bun annotation in main thread (#3855)Gravatar Jarred Sumner 4-2/+53
2023-07-27Add `Bun.isMainThread`Gravatar Jarred Sumner 7-3/+48
2023-07-27Uncomment testGravatar Jarred Sumner 1-1/+1
2023-07-27Resolve watch directories outside main thread + async iterator and symlink fi...Gravatar Ciro Spaciari 8-197/+523
2023-07-27Update pull_request_template.mdGravatar Jarred Sumner 1-1/+1
2023-07-27Update pull_request_template.mdGravatar Jarred Sumner 1-1/+1
2023-07-27Update pull_request_template.mdGravatar Jarred Sumner 1-1/+1
2023-07-27Update pull_request_template.mdGravatar Jarred Sumner 1-2/+2
2023-07-27Update pull_request_template.mdGravatar Jarred Sumner 1-0/+4
2023-07-27Update pull_request_template.mdGravatar Jarred Sumner 1-5/+11