From f13e6e4513d28fecbc873c83493499ddb6546124 Mon Sep 17 00:00:00 2001 From: Andre Richter Date: Thu, 3 Oct 2019 21:04:20 +0200 Subject: [PATCH] Change to new aarch64-unknown-none-softloat target. Also, add safety docs where demanded by clippy. --- 01_bareminimum/.cargo/config | 3 +-- 01_bareminimum/Makefile | 2 +- 01_bareminimum/README.md | 22 +++++++++--------- 01_bareminimum/kernel8 | Bin 66040 -> 66040 bytes 02_multicore_rust/.cargo/config | 3 +-- 02_multicore_rust/Makefile | 2 +- 02_multicore_rust/kernel8 | Bin 66464 -> 66464 bytes 02_multicore_rust/raspi3_boot/src/lib.rs | 8 +++++++ 03_uart1/.cargo/config | 3 +-- 03_uart1/Makefile | 2 +- 03_uart1/kernel8 | Bin 68176 -> 68176 bytes 03_uart1/raspi3_boot/src/lib.rs | 8 +++++++ 04_mailboxes/.cargo/config | 3 +-- 04_mailboxes/Makefile | 2 +- 04_mailboxes/kernel8 | Bin 69544 -> 69544 bytes 04_mailboxes/kernel8.img | Bin 1998 -> 1998 bytes 04_mailboxes/raspi3_boot/src/lib.rs | 8 +++++++ 05_uart0/.cargo/config | 3 +-- 05_uart0/Makefile | 2 +- 05_uart0/kernel8 | Bin 69856 -> 69856 bytes 05_uart0/raspi3_boot/src/lib.rs | 8 +++++++ 06_raspbootin64/.cargo/config | 3 +-- 06_raspbootin64/Makefile | 2 +- 06_raspbootin64/README.md | 3 +-- 06_raspbootin64/kernel8 | Bin 66560 -> 66560 bytes 06_raspbootin64/raspi3_boot/src/lib.rs | 8 +++++++ 07_abstraction/.cargo/config | 3 +-- 07_abstraction/Makefile | 2 +- 07_abstraction/README.md | 2 +- 07_abstraction/kernel8 | Bin 69864 -> 69864 bytes 07_abstraction/raspi3_boot/src/lib.rs | 12 ++++++++++ 08_random/.cargo/config | 3 +-- 08_random/Makefile | 2 +- 08_random/kernel8 | Bin 70720 -> 70720 bytes 08_random/kernel8.img | Bin 2099 -> 2099 bytes 08_random/raspi3_boot/src/lib.rs | 12 ++++++++++ 09_delays/.cargo/config | 3 +-- 09_delays/Makefile | 2 +- 09_delays/kernel8 | Bin 69488 -> 69488 bytes 09_delays/kernel8.img | Bin 1804 -> 1804 bytes 09_delays/raspi3_boot/src/lib.rs | 12 ++++++++++ 0A_power/.cargo/config | 3 +-- 0A_power/Makefile | 2 +- 0A_power/kernel8 | Bin 69680 -> 69680 bytes 0A_power/kernel8.img | Bin 1922 -> 1922 bytes 0A_power/raspi3_boot/src/lib.rs | 12 ++++++++++ 0B_hw_debug_JTAG/.cargo/config | 3 +-- 0B_hw_debug_JTAG/Makefile | 2 +- 0B_hw_debug_JTAG/kernel8 | Bin 69680 -> 69680 bytes 0B_hw_debug_JTAG/kernel8.img | Bin 1922 -> 1922 bytes 0B_hw_debug_JTAG/raspi3_boot/src/lib.rs | 12 ++++++++++ 0C_exception_levels/.cargo/config | 3 +-- 0C_exception_levels/Makefile | 2 +- 0C_exception_levels/README.md | 2 +- 0C_exception_levels/kernel8 | Bin 70904 -> 70904 bytes 0C_exception_levels/raspi3_boot/src/lib.rs | 12 ++++++++++ 0D_virtual_memory/.cargo/config | 3 +-- 0D_virtual_memory/Makefile | 2 +- 0D_virtual_memory/kernel8 | Bin 73616 -> 74112 bytes 0D_virtual_memory/kernel8.img | Bin 3600 -> 3600 bytes 0D_virtual_memory/raspi3_boot/src/lib.rs | 12 ++++++++++ 0D_virtual_memory/src/memory/mmu.rs | 4 ++++ 0E_cache_performance/.cargo/config | 3 +-- 0E_cache_performance/Makefile | 2 +- 0E_cache_performance/kernel8 | Bin 74528 -> 77856 bytes 0E_cache_performance/kernel8.img | Bin 4861 -> 4861 bytes 0E_cache_performance/raspi3_boot/src/lib.rs | 12 ++++++++++ 0E_cache_performance/src/memory/mmu.rs | 4 ++++ .../.cargo/config | 3 +-- 0F_globals_synchronization_println/Makefile | 2 +- 0F_globals_synchronization_println/kernel8 | Bin 90472 -> 91032 bytes .../kernel8.img | Bin 11624 -> 11637 bytes .../raspi3_boot/src/lib.rs | 12 ++++++++++ .../src/memory/mmu.rs | 4 ++++ 10_DMA_memory/.cargo/config | 3 +-- 10_DMA_memory/Makefile | 2 +- 10_DMA_memory/kernel8 | Bin 97792 -> 97680 bytes 10_DMA_memory/kernel8.img | Bin 16416 -> 16416 bytes 10_DMA_memory/raspi3_boot/src/lib.rs | 12 ++++++++++ 10_DMA_memory/src/memory/mmu.rs | 4 ++++ 11_exceptions_groundwork/.cargo/config | 3 +-- 11_exceptions_groundwork/Makefile | 2 +- 11_exceptions_groundwork/kernel8 | Bin 103336 -> 103224 bytes 11_exceptions_groundwork/kernel8.img | Bin 20512 -> 20512 bytes .../raspi3_boot/src/lib.rs | 12 ++++++++++ 11_exceptions_groundwork/src/exception.rs | 4 ++++ 11_exceptions_groundwork/src/memory/mmu.rs | 4 ++++ X1_JTAG_boot/.cargo/config | 3 +-- X1_JTAG_boot/Makefile | 2 +- X1_JTAG_boot/jtag_boot | Bin 67992 -> 67992 bytes X1_JTAG_boot/jtag_boot.img | Bin 775 -> 775 bytes X1_JTAG_boot/raspi3_boot/src/lib.rs | 12 ++++++++++ 92 files changed, 258 insertions(+), 69 deletions(-) diff --git a/01_bareminimum/.cargo/config b/01_bareminimum/.cargo/config index d7fb2ba3..de3f84c9 100644 --- a/01_bareminimum/.cargo/config +++ b/01_bareminimum/.cargo/config @@ -1,6 +1,5 @@ -[target.aarch64-unknown-none] +[target.aarch64-unknown-none-softfloat] rustflags = [ "-C", "link-arg=-Tlink.ld", - "-C", "target-feature=-fp-armv8", "-C", "target-cpu=cortex-a53", ] diff --git a/01_bareminimum/Makefile b/01_bareminimum/Makefile index 9e6276bf..e98a5947 100644 --- a/01_bareminimum/Makefile +++ b/01_bareminimum/Makefile @@ -22,7 +22,7 @@ # SOFTWARE. # -TARGET = aarch64-unknown-none +TARGET = aarch64-unknown-none-softfloat SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) link.ld diff --git a/01_bareminimum/README.md b/01_bareminimum/README.md index 4839e78b..cc5237ad 100644 --- a/01_bareminimum/README.md +++ b/01_bareminimum/README.md @@ -26,9 +26,9 @@ much as possible, we are already setting up a Rust crate. This allows us to use The Raspberry Pi 3 features a processor that uses ARM's `AArch64` architecture. Conveniently, Rust already provides a generic target for bare-metal aarch64 code -that we can leverage. It is called [aarch64-unknown-none]. +that we can leverage. It is called [aarch64-unknown-none-softfloat]. -[aarch64-unknown-none]: https://github.com/andre-richter/rust/blob/master/src/librustc_target/spec/aarch64_unknown_none.rs +[aarch64-unknown-none-softfloat]: https://github.com/rust-lang/rust/blob/master/src/librustc_target/spec/aarch64_unknown_none_softfloat.rs In the `Makefile`, we select this target in various places by passing it to cargo using the `--target` cmdline argument. @@ -37,17 +37,20 @@ Additionally, we provide a config file in `.cargo/config` were we make further specializations: ```toml -[target.aarch64-unknown-none] +[target.aarch64-unknown-none-softfloat] rustflags = [ "-C", "link-arg=-Tlink.ld", - "-C", "target-feature=-fp-armv8", "-C", "target-cpu=cortex-a53", ] ``` -The first line tells rustc to use our custom `link.ld` linker script. The second -line instructs the compiler to not use floating point operations. This is a -common choice when writing an operating system kernel. If floating point is not +The first line tells rustc to use our custom `link.ld` linker script. The +second argument specifies the exact CPU type that is used on Raspberry Pi 3, so +that the compiler can optimize for it. + +The target itself tells the compiler already to not use floating point +operations, which is hinted by the `-softfloat` appendix. This is a common +choice when writing an operating system kernel. If floating point is not explicitly disabled, it is possible that the compiler uses auto-vectorization to optimize, for example, operations on array data structures. This would implicitly result in use of floating point registers and operations. However, @@ -55,10 +58,7 @@ since it is very costly to save and restore floating point registers during context-switches, use of fp is usually disabled from the get go to save the cycles and optimize the kernel for fast context switching. -Finally, the third arguments specifies the exact CPU type that is used in -Raspberry Pi 3, so that the compiler can optimize for it. - -Since the `aarch64-unknown-none` target is not shipped with an associated +Since the `aarch64-unknown-none-softfloat` target is not shipped with an associated precompiled standard library, and since we anyways modify the target via the `.cargo/config` file, we are using [cargo-xbuild][xbuild] to compile our own standard library. This way, we can ensure that our bare-metal code is optimized diff --git a/01_bareminimum/kernel8 b/01_bareminimum/kernel8 index 42d5b8d7d04b4fff921a7d66fb6d33f465bc3ce7..6464a210ae7d661cc75568d88571f9a84e037d30 100755 GIT binary patch delta 24 fcmey-%<`j|rC|!=Bo0$c!%EAls)DVv7~>cLeBlWa delta 24 fcmey-%<`j|rC|!=B#zWXi)^#PRMV}q7~>cLewqmf diff --git a/02_multicore_rust/.cargo/config b/02_multicore_rust/.cargo/config index d7fb2ba3..de3f84c9 100644 --- a/02_multicore_rust/.cargo/config +++ b/02_multicore_rust/.cargo/config @@ -1,6 +1,5 @@ -[target.aarch64-unknown-none] +[target.aarch64-unknown-none-softfloat] rustflags = [ "-C", "link-arg=-Tlink.ld", - "-C", "target-feature=-fp-armv8", "-C", "target-cpu=cortex-a53", ] diff --git a/02_multicore_rust/Makefile b/02_multicore_rust/Makefile index 9e6276bf..e98a5947 100644 --- a/02_multicore_rust/Makefile +++ b/02_multicore_rust/Makefile @@ -22,7 +22,7 @@ # SOFTWARE. # -TARGET = aarch64-unknown-none +TARGET = aarch64-unknown-none-softfloat SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) link.ld diff --git a/02_multicore_rust/kernel8 b/02_multicore_rust/kernel8 index ee8b4c15c146b3b9c98db05f9876fbfea117711a..e9d90d0136f70b89cb9abbd2de5aba28235f7553 100755 GIT binary patch delta 40 wcmZ3`&a$ALrC|%>c18}flC1O`BU6*<`xzM}I1J5FN-PX5inrfqWIV_S02Lby^8f$< delta 40 wcmZ3`&a$ALrC|%>c1DiG(#$Huf?UJt`xzM}IFi%LEG&xii?-iqWIV_S04K%{8UO$Q diff --git a/02_multicore_rust/raspi3_boot/src/lib.rs b/02_multicore_rust/raspi3_boot/src/lib.rs index e2e12567..a185d0a9 100644 --- a/02_multicore_rust/raspi3_boot/src/lib.rs +++ b/02_multicore_rust/raspi3_boot/src/lib.rs @@ -36,6 +36,10 @@ extern crate panic_abort; #[macro_export] macro_rules! entry { ($path:path) => { + /// # Safety + /// + /// - User must ensure to provide a suitable main function for the + /// platform. #[export_name = "main"] pub unsafe fn __main() -> ! { // type check the given path @@ -49,6 +53,10 @@ macro_rules! entry { /// Reset function. /// /// Initializes the bss section before calling into the user's `main()`. +/// +/// # Safety +/// +/// - Only a single core must be active and running this function. #[no_mangle] pub unsafe extern "C" fn reset() -> ! { extern "C" { diff --git a/03_uart1/.cargo/config b/03_uart1/.cargo/config index d7fb2ba3..de3f84c9 100644 --- a/03_uart1/.cargo/config +++ b/03_uart1/.cargo/config @@ -1,6 +1,5 @@ -[target.aarch64-unknown-none] +[target.aarch64-unknown-none-softfloat] rustflags = [ "-C", "link-arg=-Tlink.ld", - "-C", "target-feature=-fp-armv8", "-C", "target-cpu=cortex-a53", ] diff --git a/03_uart1/Makefile b/03_uart1/Makefile index a339629e..56649ff8 100644 --- a/03_uart1/Makefile +++ b/03_uart1/Makefile @@ -22,7 +22,7 @@ # SOFTWARE. # -TARGET = aarch64-unknown-none +TARGET = aarch64-unknown-none-softfloat SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) link.ld diff --git a/03_uart1/kernel8 b/03_uart1/kernel8 index 2e625f85c2e3d09b9a93ab194e1ef095b5b1d97b..dd158f90ab8ec2b762deec236a196f2894c3e7da 100755 GIT binary patch delta 495 zcmcaGh2_E&mWC~iJS?IN3``6S%p45JKz4c{3!}KC5?G9hVHcXT`t(MSv<_IBk)eYT zRkz{vjX-I}_~{>+fm9iU>IGBNAFwdWO#i~nD8hINBK~svPZmaf#&;0u0#-%?Mv3VQ zS%Jo@Lyc!(Ks8=x`bAd8dweF@C0P|_$%eYg>7{xG(_gbOn$@Qn85o;bni-p0q*$aF z8JoB=WTzJ8rRG@Zp{O>*E^LHd*ciL838ru)$SJ0n;viu&29*ju6NZxfQDd3%qTAD#sC6L3=Pa2U>1z27dBx~sn9dQE@z5e*o>hhKRG+TC^bE^xFl7( zs8}zx*vz23D#;M)380Ba3`L2>1)0Y2N%{FDdIcF7iH2F($Gx`Y_8zh?=B&V5K zq$L@p7$+M}*W_SS7BII+PPQ;fH8(IxGqp4|Fxei%!N|kNe2tlLVx#Ev22REc0AyHx AivR!s diff --git a/03_uart1/raspi3_boot/src/lib.rs b/03_uart1/raspi3_boot/src/lib.rs index e2e12567..a185d0a9 100644 --- a/03_uart1/raspi3_boot/src/lib.rs +++ b/03_uart1/raspi3_boot/src/lib.rs @@ -36,6 +36,10 @@ extern crate panic_abort; #[macro_export] macro_rules! entry { ($path:path) => { + /// # Safety + /// + /// - User must ensure to provide a suitable main function for the + /// platform. #[export_name = "main"] pub unsafe fn __main() -> ! { // type check the given path @@ -49,6 +53,10 @@ macro_rules! entry { /// Reset function. /// /// Initializes the bss section before calling into the user's `main()`. +/// +/// # Safety +/// +/// - Only a single core must be active and running this function. #[no_mangle] pub unsafe extern "C" fn reset() -> ! { extern "C" { diff --git a/04_mailboxes/.cargo/config b/04_mailboxes/.cargo/config index d7fb2ba3..de3f84c9 100644 --- a/04_mailboxes/.cargo/config +++ b/04_mailboxes/.cargo/config @@ -1,6 +1,5 @@ -[target.aarch64-unknown-none] +[target.aarch64-unknown-none-softfloat] rustflags = [ "-C", "link-arg=-Tlink.ld", - "-C", "target-feature=-fp-armv8", "-C", "target-cpu=cortex-a53", ] diff --git a/04_mailboxes/Makefile b/04_mailboxes/Makefile index a339629e..56649ff8 100644 --- a/04_mailboxes/Makefile +++ b/04_mailboxes/Makefile @@ -22,7 +22,7 @@ # SOFTWARE. # -TARGET = aarch64-unknown-none +TARGET = aarch64-unknown-none-softfloat SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) link.ld diff --git a/04_mailboxes/kernel8 b/04_mailboxes/kernel8 index 60d759b3e50584e6dc237d5e776892ba133d673d..043ce120f715836e69ac914c95133b918751aad8 100755 GIT binary patch delta 1259 zcmZ`%OH31C5T5zFMQETX;bALKK%xm^?QYwph!2c`crXSLJQyD=+lNpo+SWjbQDP)9 zkr;`<7-K>_U^sX}qHw{-(Zs}<;DL+cMK2z_7*5vtTTB4UfB0wi`{tW(c6Vl`l$j}I zcpN>{reM8zgmhEE`!&4);|TEJn=;&9eX?Tgt0~4pj9nJZ3&jXUy-02=x|OqxQI{2~ zN;?t8T{k+TZvZ-6RhFd*u53e^wBjDoinM6O*7AC;UfI>WAiGV{A!C~m@HK}zrcbP9^egx=< zz&hs;^Xtcuyc{D5bX%b2h-{%Z=!3w04*Aux$=hg$1-*{rTc{7y1q-XSE!6e&RH|KD zs2%iEs_jg_-t=lEJbEsv3c6@62k(fbKXh;#zApg~(7Y`d)}IRcm5XJLnlvV0XcN7c zs`HrUKg~zL>?T^J(@djIDmPJ^(p3nfVxvcMT8rR;41S*1L7o^P%WxzUo@By{On9FO zE19sG4(AGahXHtJHW}~=r|}cYM&nP63xV(tzp`emaFqDJK66ORc^Jk+bj*eaCUa4t zqz#K5x@^mSur_%5k*_9t%5}B|Zd1hcsGwyVPTPIaWbdGEs{75zb+?CX`PgzRta-e? zM%~*G2nK?h*Vh8kP&^j85^!&*R^5=n;CBkCnB4E#4C`R5Sg$ss?c*aka;Lsk^^F=~ne%GN1+$ z^dlcnZ4dh!f~Lo-bsMVQX!td1Ex_G&tuY)l8&$)jn?5Z-0|i)HVfw@VZrup0UL(Y5 bpauGjo*49n`Vyh!tN8+682m_Y?fCsKsf{RZ delta 1180 zcmZ{iT}V@57{}k|-En^8Buuxo)U?rs)!f;R?yL*5i%DUHsnJbjXWQ9a^Q *q1>U zK@BNmpnEaS>!#KgW;E9V zRtVrLHWL%$EV#f}+&@RYiTqN)D*{yVHGs1M7`XxPy#Tf%wgUeL#SGXCUvWkN6MVv+ z46qlyV(FXD;j{)nOTdpYLr?JJ3h*7=rziLZp43z4F^uY=ENX=FZuNJrGG%M%- z^>(^|wgfsg-O3XD1aaDGOmy`pj#G&via;4fm*NCx&6!IxMp4x4t4VugnSB!#vX$FO zduEw^H?9L~6qa_S4@?W#E&Wpc0jZqyMgCxNqR)xDa$Lv;6V7MDVQ}D%9H@dQ9?hZq zEe5gV$npNPP2w0)IknU$Kc0s#bKu(PKE>bXmIJn}9)FL;%7SXBQ*DdCsSxS*}Q_`#P!YXhbaHvkN&spOUor+hMyoxIYPoZnl%MKRl@&sE$sy`5p zsG+dM?eA*yIga@7dM=cj#jqq>6=!dJT+zltO1L{A;VkY6mPm$zmpVwRCRVBMy#a;uLORPS-yT&Qo6`NaCoTBJr9co8d Vjj#?S(0PB-Kz|j?;&dK-_y^nbE<*qS diff --git a/04_mailboxes/kernel8.img b/04_mailboxes/kernel8.img index 034045a29edff797eccf6109f4b8fc6c41fd1944..cf8c62b3fdfd6e9fb729f6134c01e0f9889816c9 100755 GIT binary patch delta 515 zcmX@de~y2G!Q=oI9i|zKlj~Uel(HBYrZ6%vOnAi75TxiMJMlp>)5KJuSO$~BP7y{1 zp)AJ9daQaZVL+kD39JfYp^OYux~i3SZ!FBm3nx@NWsXpB5FLw3Ud{~_BB$?aGHR3`~kw+1Nw zgIQe59w?{y?LXL+AUO%3+){?g`xw)tx`9gmBU#Y_lokg{w=zt&W73kU0!kyh03;1^ zK?%d;CMF}vbR4=9C!b}~mIQ?qHq8N(1(}T{opI>3ogB-oEop>9ug>I!K)v!f^h!>C h3)IU8l--Z!CsClIIVKyj$WPwF*1~l4-()NHDF9)5lbiqm delta 426 zcmX@de~y2G!Q?4S4NQ%Ulf{^?F?lmie#a~(=gP=18cW_`z;5id$p?WdPlHt+oy^K+EV%=R%1x64*|Zs# zPp)MXXIwaWDx3U710ALb3=`w}lurKpKb?_*VZtMph9E^B*@+L5nI;|qie&)ZF2cwl zl*BNZk5P|hD^O^%1EYeNFVG74n$YY6P(Mxus`Fr&T*j!zWXCXh9;2H~H&E$AX@{L4 zlfHu3;t=*HAbS#%ic~d_4q { + /// # Safety + /// + /// - User must ensure to provide a suitable main function for the + /// platform. #[export_name = "main"] pub unsafe fn __main() -> ! { // type check the given path @@ -49,6 +53,10 @@ macro_rules! entry { /// Reset function. /// /// Initializes the bss section before calling into the user's `main()`. +/// +/// # Safety +/// +/// - Only a single core must be active and running this function. #[no_mangle] pub unsafe extern "C" fn reset() -> ! { extern "C" { diff --git a/05_uart0/.cargo/config b/05_uart0/.cargo/config index d7fb2ba3..de3f84c9 100644 --- a/05_uart0/.cargo/config +++ b/05_uart0/.cargo/config @@ -1,6 +1,5 @@ -[target.aarch64-unknown-none] +[target.aarch64-unknown-none-softfloat] rustflags = [ "-C", "link-arg=-Tlink.ld", - "-C", "target-feature=-fp-armv8", "-C", "target-cpu=cortex-a53", ] diff --git a/05_uart0/Makefile b/05_uart0/Makefile index 31029409..d1723093 100644 --- a/05_uart0/Makefile +++ b/05_uart0/Makefile @@ -22,7 +22,7 @@ # SOFTWARE. # -TARGET = aarch64-unknown-none +TARGET = aarch64-unknown-none-softfloat SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) link.ld diff --git a/05_uart0/kernel8 b/05_uart0/kernel8 index 50b6bb5cb9283d4d97ac5b77b493eda91c385927..c801eef137a5bc47a53b05c6315c3693ee227da8 100755 GIT binary patch delta 591 zcmZvWy-vbV6vyvDhAPr@A;2ISV zE+)Q##@#R*2OdG%kSHH#Imz#L&OiUjC_Nda@1EdC$sv?NWko^%XGh{q$QSn$mO}25 zK9o+ZkLLPuNn<&PHBU4k9W91e*Q=qdqElvbYFfe)gt8iH_?@PIWmOig z@p??wW4a!*Rh(2YR(afzuV6XM!k)t0&FkQX*X3&#N(Tn%gmnjdNfIWg<8<30J$GBJ zsDinOENpd$Dx7M8VG2*D#C0&Y9fQa-6-t_msfC&2`k48G1$s>L1r|2L2%8te)P*n{ qlM+2JgiYtR-HW<2%NX`OYC1Y$fo0=h{H=lt8_x<1?sHPp;Qbfu6^da1 delta 588 zcmZwCzfQtH9KiAWAwv}*jnSYBEDkJU?|P-z#1$74 zgKuCYE3u(Um%GU*JsG8MpWsVV9~!K~u6oxXzqOB|FNI2) z7XSSY2MU%$K8oilBo_Es;fPOW{II|^#Uqw612WM3;ei^4yw(gkh5q;()N~oHAs7cM zP=wjt0F@TDOEt1}fzQ1`qrn=L!R3xy@0ShK@H$QJoR#M?PR>LKDRxEnmH6p|Fj+lo{L^#E-%Rb$GWOm^IOA z^~%(2OY4d^?{jddGtLBNwnr>q5T8+XnuCJw_|zema1F`1WOiKhn>1(!J#3#bBCr&m rD~Ur)OW4t#P}}`pH&o6o#wEs%O@!f7HlF4n2TRWy4DU9SuEX08rlXGj diff --git a/05_uart0/raspi3_boot/src/lib.rs b/05_uart0/raspi3_boot/src/lib.rs index e2e12567..a185d0a9 100644 --- a/05_uart0/raspi3_boot/src/lib.rs +++ b/05_uart0/raspi3_boot/src/lib.rs @@ -36,6 +36,10 @@ extern crate panic_abort; #[macro_export] macro_rules! entry { ($path:path) => { + /// # Safety + /// + /// - User must ensure to provide a suitable main function for the + /// platform. #[export_name = "main"] pub unsafe fn __main() -> ! { // type check the given path @@ -49,6 +53,10 @@ macro_rules! entry { /// Reset function. /// /// Initializes the bss section before calling into the user's `main()`. +/// +/// # Safety +/// +/// - Only a single core must be active and running this function. #[no_mangle] pub unsafe extern "C" fn reset() -> ! { extern "C" { diff --git a/06_raspbootin64/.cargo/config b/06_raspbootin64/.cargo/config index 4df11bed..c8c5ae10 100644 --- a/06_raspbootin64/.cargo/config +++ b/06_raspbootin64/.cargo/config @@ -1,7 +1,6 @@ -[target.aarch64-unknown-none] +[target.aarch64-unknown-none-softfloat] rustflags = [ "-C", "link-arg=-Tlink.ld", - "-C", "target-feature=-fp-armv8", "-C", "target-cpu=cortex-a53", "-C", "relocation-model=pic", ] diff --git a/06_raspbootin64/Makefile b/06_raspbootin64/Makefile index 31029409..d1723093 100644 --- a/06_raspbootin64/Makefile +++ b/06_raspbootin64/Makefile @@ -22,7 +22,7 @@ # SOFTWARE. # -TARGET = aarch64-unknown-none +TARGET = aarch64-unknown-none-softfloat SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) link.ld diff --git a/06_raspbootin64/README.md b/06_raspbootin64/README.md index 8d12ab2e..f7fd6034 100644 --- a/06_raspbootin64/README.md +++ b/06_raspbootin64/README.md @@ -92,10 +92,9 @@ To enable PIC for our loader, we add the following line to the compiler flags in the`.cargo/config`: ```toml -[target.aarch64-unknown-none] +[target.aarch64-unknown-none-softfloat] rustflags = [ "-C", "link-arg=-Tlink.ld", - "-C", "target-feature=-fp-armv8", "-C", "target-cpu=cortex-a53", "-C", "relocation-model=pic", # <-- New ] diff --git a/06_raspbootin64/kernel8 b/06_raspbootin64/kernel8 index f1d16b4cee7853b5f2ada2440a4b2c8aaaa5e45a..23dda14c86c54226e5b82c2f7e1fdaa626187131 100755 GIT binary patch delta 489 zcmZqZU}@-J+0gTMGRr>^Nm&LEU}T8+!477@2&Kt}|HLKLfm|jeSrcZ6eCXuDzv7HJ zV6quZ&H|GgLFD9we+G<7lPCTYXIwvd<-c;q$CDNR>oZDB4*V|;w~qnCzDA&$dy_Z* zKgeg2U6NH{mTah-oL;JDF!eK|PJNn@fw76DnX$P=ibaZ%v56}~c4|>xYL0~-ief|T z!baGIjj;=xU_tN(hN8scf=uK1r2PC6JwvmU5(`6%;^{jW8T|y)OwCi04UCPF5)I8P y6HSd=r^_)h%E_jf8>FO|CYl=?8Kjw}SQ@)BYU6vpof1z$jnT@-QE+uX#axerh$5p;2qdXwIim^9Vo#*Wsl&<>SL2)H@A z_-9d9AHj$49Rx{h8+0h-3?JwGzV92(U|1OpE6?LxihLDn@-kOpztGb{#X_qiv={{) zAzF?XF#f;HsxDCB{KmoO>EdO0@A@m?uba6KKs&PhXWH!PPjgBsMb zY`0mO#%4KgAklODR>V7AEO-=S(n<8tWT6V7|F!i-S zPx?H22RK}(gxH*0F5zz7G^o}@UEYnk$W#S3)?8*Cz8x#@2)`XV Bnp*$> diff --git a/06_raspbootin64/raspi3_boot/src/lib.rs b/06_raspbootin64/raspi3_boot/src/lib.rs index 0b50bb74..2e29dceb 100644 --- a/06_raspbootin64/raspi3_boot/src/lib.rs +++ b/06_raspbootin64/raspi3_boot/src/lib.rs @@ -36,6 +36,10 @@ extern crate panic_abort; #[macro_export] macro_rules! entry { ($path:path) => { + /// # Safety + /// + /// - User must ensure to provide a suitable main function for the + /// platform. #[export_name = "main"] pub unsafe fn __main() -> ! { // type check the given path @@ -49,6 +53,10 @@ macro_rules! entry { /// Reset function. /// /// Trampolines into the user's `main()`. +/// +/// # Safety +/// +/// - Only a single core must be active and running this function. #[no_mangle] pub unsafe extern "C" fn reset() -> ! { extern "Rust" { diff --git a/07_abstraction/.cargo/config b/07_abstraction/.cargo/config index d7fb2ba3..de3f84c9 100644 --- a/07_abstraction/.cargo/config +++ b/07_abstraction/.cargo/config @@ -1,6 +1,5 @@ -[target.aarch64-unknown-none] +[target.aarch64-unknown-none-softfloat] rustflags = [ "-C", "link-arg=-Tlink.ld", - "-C", "target-feature=-fp-armv8", "-C", "target-cpu=cortex-a53", ] diff --git a/07_abstraction/Makefile b/07_abstraction/Makefile index d9d3fd56..a722e077 100644 --- a/07_abstraction/Makefile +++ b/07_abstraction/Makefile @@ -22,7 +22,7 @@ # SOFTWARE. # -TARGET = aarch64-unknown-none +TARGET = aarch64-unknown-none-softfloat SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) link.ld diff --git a/07_abstraction/README.md b/07_abstraction/README.md index 0b223a77..1b0517b4 100644 --- a/07_abstraction/README.md +++ b/07_abstraction/README.md @@ -93,7 +93,7 @@ should yield something like the following, where you can see that the stack pointer is not used apart from ourselves setting it. ```console -ferris@box:~$ cargo objdump --target aarch64-unknown-none -- -disassemble -print-imm-hex kernel8 +ferris@box:~$ cargo objdump --target aarch64-unknown-none-softfloat -- -disassemble -print-imm-hex kernel8 [...] (Some output omitted) diff --git a/07_abstraction/kernel8 b/07_abstraction/kernel8 index 05e2511cbd18133c4455c810ab87ef1b37d9e54a..ea343760b6e6aa9d6a336e074176bce9bdfdc134 100755 GIT binary patch delta 457 zcmZvWy-or_5XWyK1)`i+`O%;St(V(fc6RRpZ1f?>-rgQLG<=+hcF_0?+Yl4pz(f;T zD+?Pfd;mLn0ej)dk&rOOe>D;>JNS%yb#3ZnKj?USmiWa_q; zvS!rn4*ZZ0hwW}`>`xWWJPZVj1;bdI(8Nqz&xOkaE@B-p8YzOI;?$-t)I6!VPGU)Q vB8?CjSnI;6*9Z)eiJ}d{BemFK-a;p2o!Q=nJ#U38Z{M5@LsDv9g?w4W zdV#LTY(3^Htp1+)XSrPIzcx;4uw8N7W=^OUPHWI;l0I)mu^tr<(^4<)cQe*bI-NnN z2iMW*rHt{T273Xqu^`eK$x~xpJ|FmSw8fpUToPuKj8f(>^Pv$qt|Q8swoY5+I79Sd nH;7q8h;}AQ65$kO__Cy_$t6J { + /// # Safety + /// + /// - User must ensure to provide a suitable main function for the + /// platform. #[export_name = "main"] pub unsafe fn __main() -> ! { // type check the given path @@ -48,6 +52,10 @@ macro_rules! entry { /// Reset function. /// /// Initializes the bss section before calling into the user's `main()`. +/// +/// # Safety +/// +/// - Only a single core must be active and running this function. unsafe fn reset() -> ! { extern "C" { // Boundaries of the .bss section, provided by the linker script @@ -69,6 +77,10 @@ unsafe fn reset() -> ! { /// /// Parks all cores except core0, and then jumps to the internal /// `reset()` function. +/// +/// # Safety +/// +/// - Linker script must ensure to place this function at `0x80_000`. #[link_section = ".text.boot"] #[no_mangle] pub unsafe extern "C" fn _boot_cores() -> ! { diff --git a/08_random/.cargo/config b/08_random/.cargo/config index d7fb2ba3..de3f84c9 100644 --- a/08_random/.cargo/config +++ b/08_random/.cargo/config @@ -1,6 +1,5 @@ -[target.aarch64-unknown-none] +[target.aarch64-unknown-none-softfloat] rustflags = [ "-C", "link-arg=-Tlink.ld", - "-C", "target-feature=-fp-armv8", "-C", "target-cpu=cortex-a53", ] diff --git a/08_random/Makefile b/08_random/Makefile index d9d3fd56..a722e077 100644 --- a/08_random/Makefile +++ b/08_random/Makefile @@ -22,7 +22,7 @@ # SOFTWARE. # -TARGET = aarch64-unknown-none +TARGET = aarch64-unknown-none-softfloat SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) link.ld diff --git a/08_random/kernel8 b/08_random/kernel8 index ffba81155e7400b22bd09cbb77e35ee483b4ae98..9097108f63a5062a1f85cb0175a15d971b35a7e1 100755 GIT binary patch delta 1759 zcmZ{iU1(cn7{}k|oRc(G7m{|dOIe%P6-BIv^O5sK5rSG|2r{>#V)E4~$LSFxsTR(iqrO6Ff z@g`;4O#b81BzI&BFdhY-d(Cy^qaf_-1djV7)Uhw?IgY#C6H&-AYk+5?FwQNwYU7tI$WZphCZ;(me(WaVL--^|#Si%6`|w>?EZsyrgMYZ< zj4w{35uxHZ6@NMqBSmAx@c9Up?j3@cn9g;4V+g)Y5yFtIp&0r9GlAdS0%PeZk1^z@ zf%aVp!?ZmUw46f?sa=|N|yr%$iW?-+c0{#!vKjXWAZ*%?pGD~MOKze+U@q~oqeBRstXpl+v`3UI^ z_#kNf=*RoZFGKh@JrJ1mi{cgB8HT3-eRR$%=MUWqIxuApPu>Qr>DeIU;=t+WF}(*K z8n)={5qeIWfD3!zRNQH*!g57exYsVP@B&_n!`+?fXL*qnjy+w$~7qFc_+o!<6D~*x`lU zkQW8gFl!aNU|RKNo6nhz6~|dy3)1Zl78W5iL2hu^JiQ6KAZ1~{R2?)^ofg6j{44>Z zaYbrY%BE-sx6Ng-9>Y%(Fn(k8a{|&gR@dn2Ku_tp4bn7Qjfz~b>h(5nD66Xr^`e7D z60!+Z(Bz^ft3}%}oT6-FB?$+UB}FURf-G64s2Zjs&Ee-sm`LchVwZ}#WS4YD(^LWf zO+qG-6C6=5nNm(vER*hocaA`2!je_lQVm5mEnO5Hb&f2Vl^R)cmRe35pBRB_tR91n L7gE?5g|Ghu`nth* delta 1818 zcmZ{iU1%It6vywG*)KO~yPHkByNb=W%}Z-L?(EF$?D(QYQW2rVB=}Wyot>TSZa3Xs z_oGd#lC=0B4MG-@9<4=GgeDaVfkM>>8xf%oK2)(q#L!fW;ENbawJ&kJGqX#&>Eu4# zkKg})&OPUH7w24ybFRr5=*M#aqi`Nq07CF7x*6C7A6(wez;nRt2RzEc4JH71zy;g3 z`+>~dW5au%WJxjhk1^U8W3SIKPkkBL>KeyHPe3;;*oD#{sA}jM`D)$YsxSH z5Q{z1s#P_N(JQB3`@+61bYXx@4qr4~LjZeYTMPqjrT4;4s(eJ1KMW)M8Ran&`w4r! z@D8(N;8`zy-ccX)!sGb7k9N7=US74Ay1h(c@F56KOcQeec?*2ju073K8z6DElP|G^ zFw7bsW9*17m(BZ$?SF|rk2#)b@pk@8Eq<12F0z6z`XC4kc1c&QC3@2eWXQ+f&Z}?Z zN!pG1!RTPfFYDyLaKV)Cv}BL3Gx{FhqO!W$k`wD>+7cZ=&bd3orYt{@?sd0$sh_#e zUupFvVbc#`T=c{1aK_rh=hkw0s0&iS++gu^Hyn+&?;Bf}cM7AM;2D2`K3fk>-|fZ2 zo8Y|(Q4$k!E>qd39cplKQq-#@eJsUwVBQ%goU!1HMMwMsCz1YfjyEU4oSbc3(lMHo zopB1?n_>4v`jrE6t06vNZ_;|HUOmpsc`YeQDLyMJyr^fA*~B2Jm$hQLsvj!U>Uy=t z@uhqtnXjE_Jq#@^L9}vJ=Q4aTG2V#hErFMuVBCTeomLxmGTt$#;FOam6}42*(rTt$ zt#i8GC@ON}aI3lp3!{lA9;ntavFLD{6Lab`=@2WoS@(VKq~JFJ2yNzTVk)jG$Lz8# z=4&(jDgY0!oqi2KbnUcCPrKSqD_S8{wN@zz=}fs?=M?Sui9}L;1C=1e0(?@C6j>Lt z30>h8MZ`i7o{ea!oT|y$R8C8#gm_LLBuDfkHNB22LD&`+^7=Ua7eXQ#RxPLmX64PL`A`5luK(^7`X zT+C^V-IEKM#Ti>CcQR{Bf*f?8i6Q#|)Z7lB4l$sPlF4V8jTzIyDibG5vS>?&;ZPYc zIhMtk(HX4LcJfM~N+TR9btbnIsx8R}RJk9`c2S`19FuEV>qsCIF*|eW?Hd delta 450 zcmdliuvuV&%H%nWA&ko>e`FM9Tr`=LNttoxW=$q}}0aWOJX z`N1r%WzWozt?=!Ch`a*x)fG$*J0(O}gP9p8H?gEizGPsS@}G$z`vC(3Sh@o!Ee@1^ zJeiSIoAJhET~=|%OOst$jU|ubP`Q8dM4-woV3q48Uj?dMh(qP<$%<^+j1#~ryC$cy z8B5mUP+2~CBT!||Hd%mCK|vbo$i)BuL-set?SNP%yvm88A!r>)Q2?Wk r0{{R2(;*TftCWBe^MDf1{{I(W0u)zZP`EN#guR97?*GZN*k=L&Qp=>) diff --git a/08_random/raspi3_boot/src/lib.rs b/08_random/raspi3_boot/src/lib.rs index 178242e1..a6b59ef1 100644 --- a/08_random/raspi3_boot/src/lib.rs +++ b/08_random/raspi3_boot/src/lib.rs @@ -35,6 +35,10 @@ extern crate panic_abort; #[macro_export] macro_rules! entry { ($path:path) => { + /// # Safety + /// + /// - User must ensure to provide a suitable main function for the + /// platform. #[export_name = "main"] pub unsafe fn __main() -> ! { // type check the given path @@ -48,6 +52,10 @@ macro_rules! entry { /// Reset function. /// /// Initializes the bss section before calling into the user's `main()`. +/// +/// # Safety +/// +/// - Only a single core must be active and running this function. unsafe fn reset() -> ! { extern "C" { // Boundaries of the .bss section, provided by the linker script @@ -69,6 +77,10 @@ unsafe fn reset() -> ! { /// /// Parks all cores except core0, and then jumps to the internal /// `reset()` function. +/// +/// # Safety +/// +/// - Linker script must ensure to place this function at `0x80_000`. #[link_section = ".text.boot"] #[no_mangle] pub unsafe extern "C" fn _boot_cores() -> ! { diff --git a/09_delays/.cargo/config b/09_delays/.cargo/config index d7fb2ba3..de3f84c9 100644 --- a/09_delays/.cargo/config +++ b/09_delays/.cargo/config @@ -1,6 +1,5 @@ -[target.aarch64-unknown-none] +[target.aarch64-unknown-none-softfloat] rustflags = [ "-C", "link-arg=-Tlink.ld", - "-C", "target-feature=-fp-armv8", "-C", "target-cpu=cortex-a53", ] diff --git a/09_delays/Makefile b/09_delays/Makefile index d9d3fd56..a722e077 100644 --- a/09_delays/Makefile +++ b/09_delays/Makefile @@ -22,7 +22,7 @@ # SOFTWARE. # -TARGET = aarch64-unknown-none +TARGET = aarch64-unknown-none-softfloat SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) link.ld diff --git a/09_delays/kernel8 b/09_delays/kernel8 index 95ff77c1eb76d5c7f49da7b7bf462c34eb31ab13..5b299d271f5a851cb085646dcb0a1498e2da6f2b 100755 GIT binary patch delta 1148 zcmZ{iJxmi}7{}k|?rNcYq?kfmkncuupxj6A+8PHiqERBL(nv#M$n|a(0)!U6F|$|N-`Fym<1=AnRPQTG9W&GmI7`EE z+eh6uXCS^!d*1g!YuOhG9T(h_g&;?ugngKeiM+o?l%UQ>BIlR;cfrh69w9X92-Xi30 zZKFSJlf75b(nIK=meJZXxCn3w{|4B$TQw(*Vsb9$e=*nca)mhU^@gE3{GEa(FyTrX zPT&Ot%tPaP{SoK^?5Y5Zy#;9xg^nGm$e#+YPApe|)!vo=rqIWO6BUrK71WX>t zg_ik}mVLc_hc0e!rARvksNfHfA4huzbzbm4*ZI$bfxb#ufH}Nd2|akyNQPTXWSaqe z(gf#CcS!aq*?5M+w@vV%R!vImRFoa>Rw6f?EMBbw7vs3)2OAixXWV?N+*=qXi|+tQ)xAs za!Ql&sqjrHf_>G{;ura3G$M0K{wg>gCFRs)R2U5=5^1MboSq&}gw%s;LZc&t9QThd zCe@Uh=GlQ+8K?*6VR}BdYepd|_%wf?TQdofx%ADktMIK+S0b4^f9@Qc)R^>cl znRjtwP!1{BR|9R$K|vCNl2;VupoimBsUJ*AyCl{Xt8#>H@c2cptg?L-oa(_>xzJypEANV|7~m@t4>1XsfhEdZf~@1~jV`ZY&VH%w7BOh?;}nR@P{r6*P9sX!0ACi>v_z91f$sfuXZks?xKM>y~B= z%}`3NU}!AU{%Yixrd8ggLLI96Ocu;A2VYb60%!#ivVaX*iEM#NQf38H8ps1kKY(1w zlCCnBk}d#ELoRQ^2x0u+-$#Sd&sBqG{I3l@bg=M-1q5=w5Nys@X*)*M1-XM$|ohLiF4 zVbWOyPob9V711cyEi^@&mBuQbmV%5zG{!-+hvC?3ftk&aTRtMG*1TAGTDGxLLi)xVakJKril-k87B5KFie>o!K|Wm8^~Z}V3_cTr6EXhkHkcf zf@?sr3?_%2B7!Wz4vdrMF{??Ogeq%d1u8os308IlWX2t46^UI?NswN}7O9C$K(n@j zBpp~KCL6G@Fi9~^He=CaSqKu#V6kAC1YxL5KEVp;h@WSH2e#I%56<0dag zM&HSQ8Lvx*1TAGP#8*M9htmVTycBc=iDXh7frL=BwA49CkV~PJYLv#ALy^S%}$-k@4x| zSeEOO>luIwnHjPZ|Njr!)+D!M1yG@+C~NS_$-b=8jEg2`vZ`zRXJ)?0B-9Y}fSF<9 zLuPrcufbd^KUZ_FoC4JQAejj$#xT+3|NrR|eN>bhfHWfm!-PjH4MB=~BqoC7tASz} zKyyU|S%PaBCQee5$b+hCVg;%?AqiHM2{Pe=ibOnA4y04DMQS1w(4;7!*km3?8K!WC z$y$thEN&ov45I~$IfS7yc@JZVgalNl5;M@$71Cf+g+U55m^2u9CkHYq3;h50fBO6X Y|HZR_!U_xuS0+zjZDG7SS(NQN03JPiZU6uP diff --git a/09_delays/raspi3_boot/src/lib.rs b/09_delays/raspi3_boot/src/lib.rs index 178242e1..a6b59ef1 100644 --- a/09_delays/raspi3_boot/src/lib.rs +++ b/09_delays/raspi3_boot/src/lib.rs @@ -35,6 +35,10 @@ extern crate panic_abort; #[macro_export] macro_rules! entry { ($path:path) => { + /// # Safety + /// + /// - User must ensure to provide a suitable main function for the + /// platform. #[export_name = "main"] pub unsafe fn __main() -> ! { // type check the given path @@ -48,6 +52,10 @@ macro_rules! entry { /// Reset function. /// /// Initializes the bss section before calling into the user's `main()`. +/// +/// # Safety +/// +/// - Only a single core must be active and running this function. unsafe fn reset() -> ! { extern "C" { // Boundaries of the .bss section, provided by the linker script @@ -69,6 +77,10 @@ unsafe fn reset() -> ! { /// /// Parks all cores except core0, and then jumps to the internal /// `reset()` function. +/// +/// # Safety +/// +/// - Linker script must ensure to place this function at `0x80_000`. #[link_section = ".text.boot"] #[no_mangle] pub unsafe extern "C" fn _boot_cores() -> ! { diff --git a/0A_power/.cargo/config b/0A_power/.cargo/config index d7fb2ba3..de3f84c9 100644 --- a/0A_power/.cargo/config +++ b/0A_power/.cargo/config @@ -1,6 +1,5 @@ -[target.aarch64-unknown-none] +[target.aarch64-unknown-none-softfloat] rustflags = [ "-C", "link-arg=-Tlink.ld", - "-C", "target-feature=-fp-armv8", "-C", "target-cpu=cortex-a53", ] diff --git a/0A_power/Makefile b/0A_power/Makefile index d9d3fd56..a722e077 100644 --- a/0A_power/Makefile +++ b/0A_power/Makefile @@ -22,7 +22,7 @@ # SOFTWARE. # -TARGET = aarch64-unknown-none +TARGET = aarch64-unknown-none-softfloat SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) link.ld diff --git a/0A_power/kernel8 b/0A_power/kernel8 index 22343916d4b1c330136411c749bed607e8f740b6..3e949a47eefa50afb79f13f6cb80da2824f389c0 100755 GIT binary patch delta 1251 zcmZ{hOH30%7{}+^Zi_UuR(TeL0ybiZ)_t(kHhSP7KH^1$M2y6`-EPYQZJ{mT0R@c- zdN8pGI3!*m!AD4l90)#6o|JRvGNqn_Zd(R`nA>Ws5QJ#xhqSJZOuSF8=R~zSQt16=sC~8IeBcGI?vOeeqV!i>Fj+r)B*l%t94(le;W5OgN#l>}*OoeEDzYL#jN9CLTZy za{^5)!dKF1g4@ii-(nJ5X$ZKI%80MLGHSNw9>VFB(qkxt$CdT za-v)t&hRD3<;N*!&_DeQ{V}OWBhv*?4x{NYnI6y5<4t<3=|j#YFKcp0tf57=Hf}D2&zXE1!Gb5 z2yR|cf?i%|K|N|LqV{@RIX-?D%;o1oek|_5Bl@YDc5od_h@Nwo9nNoY=f|G>*o%CL zsM6z$sUa<%P-Afy?u+yXhj1u;S*d;jDbaAB)~m*R{sFBwp+({@Nr-77nOAfbFQAwl z@6$w|KN?NAywc!ccQl};6G)>4Ds7l^ivhQY1B&WZ1ENCOEpXNrl-vP@69vD_W3Ma; zWX%E&TTlsL?BPU@H>k*x!lh_MdEY=H&bzz(A{PDFD~Yn-!}BU8a~7zr4yXdBN*vEi jK^Zr>#TFEnwFnBU;kcT3a>fc^xKjYho2BIHUReGEs0A)i delta 1218 zcmZ{gT}V@57{}k|?D);h%&*PNr6WObowJ>7=iGTC6-gI5DA8JHXJXJ{1lD@Dou!lc!prmW|Nq|q^FHs!GP|+N zPA`HPcUTx|7z47{Iyo44MTo1_r2FuI>3$glyix*Zm{GuR34F&b09U;s3ts&XZd0%h zB?j7|>iKmBE(5&4$2!=CS)5^^5hn3I3(b(kXDoCqnZaD=C1i0|VHQ5?$U=%%E}h1u zAuzX1(gP4OpJJ!`&VFlN$UtLM+oL^Bon-ra$CWFYn)cH|?g0&JDP7%~M00Q+pc{uu;WqOrjj2-D zK}R{%8YG4gh5=$Gs#X1y{=GbV9E5W=hK-kX6WGIfxJ?djPV}6zYC0HqT$v zV()2sp5N5;kzAjtT)CSo>$&neTMQqwtr)UbTG(nA-_w^GzG!w^S)u(Ep&T0JADXQm zv43d;Y_Nsbnl#;Yq}y+*GXzMUU)2Waz?lkY#N7%Qhc`G-3Fi&@=*=S$O}J7C7b@S; zuc)O-u2TG233F4P;Fvf*922{g;iQEl=5Y&80%|O*21QGOcbv=>$E}$tp}1!|koyj| zKL)oS;D>2PaoLG;RnUr0tKjsMC^-ZNZxwy2M{;t!t*7`EvA8UeL_`U=W9qO!o={_P zOE7vXClmJKODF4aY5u{X{<{z(J$q#BqqnBew*79i6kr@ zNeoO(j7G8%Ja+2ASYzYtqEE5gRLSWTRG)+{JzT1h1-m49eX>Kb%Qn?3V^uYnY9ya% z7kPzl>bi8?Ni2^#q;HXLkrrJ592B1$?3hgE^W^#Chk4B#AcOt2lXHcF3F{^pKDm aimM3{lKtUF7pnnuvt_U_Q;#=Kz}7$9raDIe diff --git a/0A_power/kernel8.img b/0A_power/kernel8.img index 7cb095891416a685dd34a689b1d62f8bedee510e..b6ae6d0e790968cbb3d535b5178a21a5736564b6 100755 GIT binary patch delta 287 zcmZqTZ{nYzGI;}wiby*n!;}ZfOcNh6GfaF0q~jPErc8dpqN214$Y5k(nDB_DAxQC! z^hA)Nr9iP4Ob$DR1zCdg87J$psmDN)v72gb>-SfwOx0(B_-`ELTTUToDPW|39tAme1%940Se3=!o6>X)wx z&pyDw0M>sUsGoB(FOxDO!)8M!Z$`$olWUo;OO^xm$OElO{Qo~>Ta(<56+mT@Kx+yo z=dwsMW=-y7QJ<(1BjyQGRuc_3Z8lJu3&X@|a!fW16Suva9K+VawCmsGM{ElKVYFP) delta 268 zcmZqTZ{nYzGWiZmj957%!xZ_N=)7^9+81Ed)l7$!VoX$Vq$BRvtMrW`2t0%*3dAWN_h z!^A~uELkAcXB_wnEVR9U!ltjnB m|I-!z{5OHvEw<_rv&bq-ped6lFgi?*VQXQ!`+xEywgmuEzGD&q diff --git a/0A_power/raspi3_boot/src/lib.rs b/0A_power/raspi3_boot/src/lib.rs index 178242e1..a6b59ef1 100644 --- a/0A_power/raspi3_boot/src/lib.rs +++ b/0A_power/raspi3_boot/src/lib.rs @@ -35,6 +35,10 @@ extern crate panic_abort; #[macro_export] macro_rules! entry { ($path:path) => { + /// # Safety + /// + /// - User must ensure to provide a suitable main function for the + /// platform. #[export_name = "main"] pub unsafe fn __main() -> ! { // type check the given path @@ -48,6 +52,10 @@ macro_rules! entry { /// Reset function. /// /// Initializes the bss section before calling into the user's `main()`. +/// +/// # Safety +/// +/// - Only a single core must be active and running this function. unsafe fn reset() -> ! { extern "C" { // Boundaries of the .bss section, provided by the linker script @@ -69,6 +77,10 @@ unsafe fn reset() -> ! { /// /// Parks all cores except core0, and then jumps to the internal /// `reset()` function. +/// +/// # Safety +/// +/// - Linker script must ensure to place this function at `0x80_000`. #[link_section = ".text.boot"] #[no_mangle] pub unsafe extern "C" fn _boot_cores() -> ! { diff --git a/0B_hw_debug_JTAG/.cargo/config b/0B_hw_debug_JTAG/.cargo/config index d7fb2ba3..de3f84c9 100644 --- a/0B_hw_debug_JTAG/.cargo/config +++ b/0B_hw_debug_JTAG/.cargo/config @@ -1,6 +1,5 @@ -[target.aarch64-unknown-none] +[target.aarch64-unknown-none-softfloat] rustflags = [ "-C", "link-arg=-Tlink.ld", - "-C", "target-feature=-fp-armv8", "-C", "target-cpu=cortex-a53", ] diff --git a/0B_hw_debug_JTAG/Makefile b/0B_hw_debug_JTAG/Makefile index f6d95a8f..65d9ae64 100644 --- a/0B_hw_debug_JTAG/Makefile +++ b/0B_hw_debug_JTAG/Makefile @@ -22,7 +22,7 @@ # SOFTWARE. # -TARGET = aarch64-unknown-none +TARGET = aarch64-unknown-none-softfloat SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) link.ld diff --git a/0B_hw_debug_JTAG/kernel8 b/0B_hw_debug_JTAG/kernel8 index cf8cdc2726b343f9086415a20005dce828f04617..3e949a47eefa50afb79f13f6cb80da2824f389c0 100755 GIT binary patch delta 1196 zcmZ{gO-K}B7{}jdc3pLGO$rq^%#sCDYMYOpcXp_QhwMuTBEvp}ZFctEbzJwu*;%)P zum(Y0It1Dqbx{!N5_ym!Pj)GT4qie86YAtCD7plFz0S@`tLq%*f#36g{{QEF=4agV zGw#VL2+%oz0NkbT0R|yMk8n`nE&+YaL683ops9!pCDHG{109E5A2+$)*Z$_3%e_E1 zIPkmI5SpUDIC$35$dnxugUKa?Y~?Cb)&pI1K_`dc)rJc$06eGNHLwZ=3La>MG1}&V zgD^s64|GijV5sFhv+J0+v2F5%nVd$`58)7Z3QfO+uXM-*ceuqr^os}94{&JHQ-}Wl z+Uc7*Xl?7X8HYM+E8AW48*6LFoHp6f7HkeEfGWqZ!whyN_4HPO%YY@sf@ zbeBWd-IeClF)8y&x>gTG_&~3D;Y3^cI14*Yj_Iry&U)Xm;r;9u%Rs+-;eI1AF+XPT zBggebKFHJl2Iz1HZUqHuG(dY%*D;nzSX2aEkE?>%hmyohlhJUnVoult^VPXn9ZS1# z(cUVwi`!U6Y|lM3CeI>k6|3;HCgBP zl4tW)j>)4EmZDgdB`q2j1cEE%ayC;SCSCG@uRTUYp2)l)$Z-va6sZrTG$V~tB$Xr9 U({qggu6woc;C3^;xer$U0Tq%SRR910 delta 1122 zcmZ{g&r1|x7{}jdc64=R)dbxir7N-_2yL@7v$Hdux=5B8L4rx*_U<^V>+0^dJBulT z8eKgI%0qNWK}ZjYff1eRFNivnL>?q4q(f13jcuHnO?Fw|%NIV+_xn8W^X#s(yX)-Y zDg^O>g^{)yAgh7-JE=E>3dA8SDfLigHL7=os?4VYnm z5%dG}_`ead8gq~o`CBxzM@H7)T661=;3$Bf?JpJ)=K;3bb_{1=e(3*{eZ#p;@Dc-E z%sP2F%D^>%0o-=LK6r461rMCTM=YEL7rtPj8%Jv4A>%LNms&VLsSa9v3PT9P011*h za{Ly-6w;0xP9rW_a@`Wuk~vFOEZMT;wJE-jW}G2MwN^i?8zGjvk zb>N}j?Xp%;{%LX`n@}F}+Pu$E&i@#kAt(M#d#f&7st3<-DR#3WrkFM$TWoo|tbL@C z|F+%kiOoy?J^WM;3y{QN7hLp}KD}3Q3NLQB;EL<55pFU5*yq6CE?8a==wvR%&rMuV z#|t5j1n-B!B&Frj+LRnBtDT0q>UO?57Ao+7Jz1>aHjY%sQgs}~GF%~gMoqDgFR7wQ}8ycb0%PEo=7BxyGAwkC^sh3P^(|JwD9XE6|3ml)2C90~% z>Z&XW_{IH!r`W02dZ1iFxiSpiD?1D<~SxVMn>PsE19n|icfB25oZ*fJd;J5k!$i+ S7WK(7Y%NSu|0h3UTL1v!xi_-_ diff --git a/0B_hw_debug_JTAG/raspi3_boot/src/lib.rs b/0B_hw_debug_JTAG/raspi3_boot/src/lib.rs index 178242e1..a6b59ef1 100644 --- a/0B_hw_debug_JTAG/raspi3_boot/src/lib.rs +++ b/0B_hw_debug_JTAG/raspi3_boot/src/lib.rs @@ -35,6 +35,10 @@ extern crate panic_abort; #[macro_export] macro_rules! entry { ($path:path) => { + /// # Safety + /// + /// - User must ensure to provide a suitable main function for the + /// platform. #[export_name = "main"] pub unsafe fn __main() -> ! { // type check the given path @@ -48,6 +52,10 @@ macro_rules! entry { /// Reset function. /// /// Initializes the bss section before calling into the user's `main()`. +/// +/// # Safety +/// +/// - Only a single core must be active and running this function. unsafe fn reset() -> ! { extern "C" { // Boundaries of the .bss section, provided by the linker script @@ -69,6 +77,10 @@ unsafe fn reset() -> ! { /// /// Parks all cores except core0, and then jumps to the internal /// `reset()` function. +/// +/// # Safety +/// +/// - Linker script must ensure to place this function at `0x80_000`. #[link_section = ".text.boot"] #[no_mangle] pub unsafe extern "C" fn _boot_cores() -> ! { diff --git a/0C_exception_levels/.cargo/config b/0C_exception_levels/.cargo/config index d7fb2ba3..de3f84c9 100644 --- a/0C_exception_levels/.cargo/config +++ b/0C_exception_levels/.cargo/config @@ -1,6 +1,5 @@ -[target.aarch64-unknown-none] +[target.aarch64-unknown-none-softfloat] rustflags = [ "-C", "link-arg=-Tlink.ld", - "-C", "target-feature=-fp-armv8", "-C", "target-cpu=cortex-a53", ] diff --git a/0C_exception_levels/Makefile b/0C_exception_levels/Makefile index f6d95a8f..65d9ae64 100644 --- a/0C_exception_levels/Makefile +++ b/0C_exception_levels/Makefile @@ -22,7 +22,7 @@ # SOFTWARE. # -TARGET = aarch64-unknown-none +TARGET = aarch64-unknown-none-softfloat SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) link.ld diff --git a/0C_exception_levels/README.md b/0C_exception_levels/README.md index 7d6f3584..738e8665 100644 --- a/0C_exception_levels/README.md +++ b/0C_exception_levels/README.md @@ -122,7 +122,7 @@ do not have a stack yet. We should double-check the generated machine code: ```console ferris@box:~$ make objdump -cargo objdump --target aarch64-unknown-none -- -disassemble -print-imm-hex kernel8 +cargo objdump --target aarch64-unknown-none-softfloat -- -disassemble -print-imm-hex kernel8 kernel8: file format ELF64-aarch64-little diff --git a/0C_exception_levels/kernel8 b/0C_exception_levels/kernel8 index 49f8911f79605df3870ae56c921595a4dca9da14..ffe4d6b3e88981e8fa8f084913ecfa369f9fd36d 100755 GIT binary patch delta 1077 zcmZ{hzi-n(6vyw9s%p~`k`fd$PzEv~VfpO%>=P^?MJfXfET9T0vd`z#P4ml1TEr46 z{sM%=LkJ|gQHg;_?1+((sSGR(h!L2m#DdRu5pf$2_dS0<-}m16e7HY%xIg#s9e$C6 z(h@FJR*`%%=-c8#v^!d=aBT^fE0?184EmkID)c3$2`0Je>Z`CP@%02dDZB=sB)*y8 zC#mMQ0WXL6PJ&;i@I4?B+X?=d!XDTXw-S7i!aaB_@hHL=J7M;o|`~<&A{4~Mo zbbERUv-<^ZCHP7Qeu?KLUQO`jj^?j%O5!&Oe$;{A;)29$30~^J?{Q7yj|qO)fxja3 z3j967Ku(hOH{U=i@ut8E`G>1}B0m|%R|4a&UQof0_AnQhdvV#o<9#Ck45S~(R;s=I zGG3GTiz3=9K$iE$cs;Tc(ueaBpB2+2-cGM1xD`(y$iPKqUBR&oMq+m<#X}^oSnLqT{1E&28+ccjY(E6)OfK}Z}3_@@67rt z)2B_WWZ~!tts9Q&xiisiQjOHSdbOk%{K?5ip50Jcai%(sFS6jAp}u1|rpqjq+DudR zQBoMYO6h+Av&QSZLG9}-@B-IouB%$q&_W+i+uh|qo2=$Q8sOzcXk82L)x^9b3Ua5iy N55R8-Fgpl8{s0Hn_Y?pC diff --git a/0C_exception_levels/raspi3_boot/src/lib.rs b/0C_exception_levels/raspi3_boot/src/lib.rs index bb807e72..01ccd956 100644 --- a/0C_exception_levels/raspi3_boot/src/lib.rs +++ b/0C_exception_levels/raspi3_boot/src/lib.rs @@ -35,6 +35,10 @@ extern crate panic_abort; #[macro_export] macro_rules! entry { ($path:path) => { + /// # Safety + /// + /// - User must ensure to provide a suitable main function for the + /// platform. #[export_name = "main"] pub unsafe fn __main() -> ! { // type check the given path @@ -48,6 +52,10 @@ macro_rules! entry { /// Reset function. /// /// Initializes the bss section before calling into the user's `main()`. +/// +/// # Safety +/// +/// - Only a single core must be active and running this function. unsafe fn reset() -> ! { extern "C" { // Boundaries of the .bss section, provided by the linker script @@ -109,6 +117,10 @@ fn setup_and_enter_el1_from_el2() -> ! { /// /// Parks all cores except core0 and checks if we started in EL2. If /// so, proceeds with setting up EL1. +/// +/// # Safety +/// +/// - Linker script must ensure to place this function at `0x80_000`. #[link_section = ".text.boot"] #[no_mangle] pub unsafe extern "C" fn _boot_cores() -> ! { diff --git a/0D_virtual_memory/.cargo/config b/0D_virtual_memory/.cargo/config index d7fb2ba3..de3f84c9 100644 --- a/0D_virtual_memory/.cargo/config +++ b/0D_virtual_memory/.cargo/config @@ -1,6 +1,5 @@ -[target.aarch64-unknown-none] +[target.aarch64-unknown-none-softfloat] rustflags = [ "-C", "link-arg=-Tlink.ld", - "-C", "target-feature=-fp-armv8", "-C", "target-cpu=cortex-a53", ] diff --git a/0D_virtual_memory/Makefile b/0D_virtual_memory/Makefile index f6d95a8f..65d9ae64 100644 --- a/0D_virtual_memory/Makefile +++ b/0D_virtual_memory/Makefile @@ -22,7 +22,7 @@ # SOFTWARE. # -TARGET = aarch64-unknown-none +TARGET = aarch64-unknown-none-softfloat SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) link.ld diff --git a/0D_virtual_memory/kernel8 b/0D_virtual_memory/kernel8 index a24fa9c22a78199a87b590cddd0b5c177e4a0523..e37ffda1e4654f1b4183afd3cdfe5b95049f262c 100755 GIT binary patch delta 3247 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 diff --git a/0D_virtual_memory/kernel8.img b/0D_virtual_memory/kernel8.img index 642928b7e2bf80b3623ee8733e779281f18511e8..0497dbefe6cd0baa616753f8e2ab16c4571d3e09 100755 GIT binary patch delta 532 zcmX|-PiPZS5XRq|x0^qkRgrE?8dEpbibXKlY(xv9EyRtp8l5`-my%UVi04bLJ-uAuyX(M*f(>fcu#vGgwUg4qGX9`5>6kGxpD@?{ zEgB}Ga~-F3Z`;O6I34c_;vBbD%6J`gxg*p&Tm;SeI35CU?Joj`=|9;-+hLol86{>_cqg&uy#vt0Kcd#E@rv-c-*Xad( z6@P#`$_DHm;?u-DK2|qaMT+5G;*>(gcZsKtWNJl?Fk|e*j~rLRi|QHH7||p;>J(l& G*82zV<*)$& delta 580 zcmX|6O=uHA6rOpr*=^F)R(IP3P2FtLLJl^&X*{&ICE}q_sHP>MAR3WEA=2JNJZMm; z3Kn*Kg$f?D%|Tdth#-Oro&|;a(_BQbO%c7?4M-8Y&L*LAnfd*A9ON6Y%fxKuk>i7jNBaZeU z+bRI403pgDH<`8l+|`cHO)8@ek$?JQd!}0? z`*U1t7EPRjiSa-Dtuj*H{^!l8aaO;_mx=ZVrhj+%%bqv$%kv_K^EXc0Io^2&KY!`6vbdyKE11bBFpFA?=d8=^}-@-@2EF^Vwh0o%;ZmU$rMJa-ffGj4A7JS0t zF;N!R+i;V^oG3#ggGKQ*By^Oe0#tP@OKC_N_?TZ+1K;~7gMX#B@HB&Ox_;2RxE8F^ zi+DDq(gMzf7V#X5L6+bG8-NjlODqi+8PVj5^BrCPpe(dWR#CP2_9O>Ep4@dR5i2wiq diff --git a/0D_virtual_memory/raspi3_boot/src/lib.rs b/0D_virtual_memory/raspi3_boot/src/lib.rs index bb807e72..01ccd956 100644 --- a/0D_virtual_memory/raspi3_boot/src/lib.rs +++ b/0D_virtual_memory/raspi3_boot/src/lib.rs @@ -35,6 +35,10 @@ extern crate panic_abort; #[macro_export] macro_rules! entry { ($path:path) => { + /// # Safety + /// + /// - User must ensure to provide a suitable main function for the + /// platform. #[export_name = "main"] pub unsafe fn __main() -> ! { // type check the given path @@ -48,6 +52,10 @@ macro_rules! entry { /// Reset function. /// /// Initializes the bss section before calling into the user's `main()`. +/// +/// # Safety +/// +/// - Only a single core must be active and running this function. unsafe fn reset() -> ! { extern "C" { // Boundaries of the .bss section, provided by the linker script @@ -109,6 +117,10 @@ fn setup_and_enter_el1_from_el2() -> ! { /// /// Parks all cores except core0 and checks if we started in EL2. If /// so, proceeds with setting up EL1. +/// +/// # Safety +/// +/// - Linker script must ensure to place this function at `0x80_000`. #[link_section = ".text.boot"] #[no_mangle] pub unsafe extern "C" fn _boot_cores() -> ! { diff --git a/0D_virtual_memory/src/memory/mmu.rs b/0D_virtual_memory/src/memory/mmu.rs index a7323454..9dae90f3 100644 --- a/0D_virtual_memory/src/memory/mmu.rs +++ b/0D_virtual_memory/src/memory/mmu.rs @@ -276,6 +276,10 @@ static mut LVL3_TABLE: PageTable = PageTable { /// Set up identity mapped page tables for the first 1 GiB of address space. /// /// The first 2 MiB are 4 KiB granule, the rest 2 MiB. +/// +/// # Safety +/// +/// - User must ensure that the hardware supports the paremeters being set here. pub unsafe fn init() -> Result<(), &'static str> { // Prepare the memory attribute indirection register. set_up_mair(); diff --git a/0E_cache_performance/.cargo/config b/0E_cache_performance/.cargo/config index d7fb2ba3..de3f84c9 100644 --- a/0E_cache_performance/.cargo/config +++ b/0E_cache_performance/.cargo/config @@ -1,6 +1,5 @@ -[target.aarch64-unknown-none] +[target.aarch64-unknown-none-softfloat] rustflags = [ "-C", "link-arg=-Tlink.ld", - "-C", "target-feature=-fp-armv8", "-C", "target-cpu=cortex-a53", ] diff --git a/0E_cache_performance/Makefile b/0E_cache_performance/Makefile index f6d95a8f..65d9ae64 100644 --- a/0E_cache_performance/Makefile +++ b/0E_cache_performance/Makefile @@ -22,7 +22,7 @@ # SOFTWARE. # -TARGET = aarch64-unknown-none +TARGET = aarch64-unknown-none-softfloat SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) link.ld diff --git a/0E_cache_performance/kernel8 b/0E_cache_performance/kernel8 index e913a9fbbebc2d76351f3b4be89d988405972d8d..8044ad1ec2781c5c05a75a03c1d17c4b4971c952 100755 GIT binary patch delta 1405 zcmaJ>J#QRE7@qg+m<2@cVjKG|c6?{J5Fli=Gqdv*f)Ge2xj+F#00~8$W_M>C8{>1% z7xPgNIRzDw;)X$@aVms_6s16x5Cv(FfX0z1DN-YTKuTtB_YlM}TfDRLJn!>>h7F3dtX%H z$I94JHQ2c`p0Lq_%`_|)Q7jy7QcW)Bp&HX3b?jnr4`6>7dZn{UO zq1*WS2tt(#pbHbhQ1*MFM!)QBPs1&M`wq`Q7uNQ6X5d|D_#8vGky)(dZ-AB@)M2*a zvyGVH`qR*YF9z44d8}QM)~hOB)ppvel<#9mOqcW@B|VB(FY(#2LN+M<>+ZIX3U}Sz zI(!4qxKA2>nR1KAeI;im5SsKU?jJ2;kLn`s&73~x>6)(rwMImdqvN)7`i)YJP(eRi zR&deXJ`U#t)92CUm1xyHG6%08(+np}C)7q+7Rxy6xM&XMU!dI!ue|zN2a8KwV})ZQ zVil>F$*6-qF#UD2Cc}RM-I{~O)zR)ux_l+X(E+al$A{qL5S$)@#}DFHSBnJfL88D9 ziBC~G3q@|^!*vJp6yX?Ze;od&mm|eYf18JsEzYTtMBp^F3X_Kntabv<)`-faGI4^9 zWtvm#_D{g+8jDPpPdc(O6Ip^wlyW7x$r#~0!pxMYNf_3YCxRx1$|8ai+6ciD7Bgj) zpz2`$;iL{W?0O3@6Y!1o%l0F_?5;2PKZcS1%Cg33F`H_kQ%>?CHYLv-n>RxI>cv^5uQ)U&> zijXvoJK@^e)`uZxBxaNeDg_gmQ6*KJpV3+OT@!-0SfnL2RAk&xoFue^^m=bSOpLUt z_avN1qnQ*5iG6ugq!efV>x9w&M4xEEQqB7Drx7KI#$0Je-1{wP)+nK=v5AenQAR6w zy#))kEVG;{Dw0@Zf;rC7*?PQjWw7bn%`A>cWT_Cw3X@s)XRfhAXqi~TWUQqok*hDl j=lK=)mA^~f*{9%TXt_`G<&^uuFTttea=YZ1%05JIV_B9JO1GrK!O(uTxJ zVgei}>46gna$y7qlpE>+RXw0c2#In52`;UKIC1D7&@@3o&%K)atF(9Hn;Y={DffB-Dy~t0rt1};eEP)S-lNwl7l9ctG=ZXGg$8oBA``Anoygn3`y%%Ij^cX?Nw@Ns2b6~59yKH>7lGVk;(j4 z2S~%+_O5W(-D|>E&~WcQ<(DZ}Kkqwf9Y?6-OZ<5%%N_NF-79^1(bGlW1DY8TS&bLm zUY}kbsu9ZQ* z+eEAqL#4KatJp{xk+6-fnXL`8E`xuKZp}jV`siyRd9xP~d?YKw$rwBwgVQlMdlklS%bi;151!wZAYj=0AQtm!(LA61)nZ#P{X2T89mfr5J(N4U% zxf3L&*QF#@?&lWBXF`dYVku_{<~$anjXGDB3Hgs8+A`Z_#~-PX)5L}ZYoP^aY3!bz zhhR=?#W-au^ae&nv>mLkzx`GqNW>YY*au8i$R#EHBU*M}&qMw)RyGk@V}Ep`m>bu+; zBb2dPg(kM{lLdIPNEA1eQN|-de3QJ7mMg5=+u8P;jZ^EJQ&K6F7?Vi%ps%4+lQ>B& rvytyiX*V6fhwjS&zVJ7yTYMUxgU8)_{bkyH>zDj=cC}dt7;66jzCK_h diff --git a/0E_cache_performance/kernel8.img b/0E_cache_performance/kernel8.img index 371931201faba1cf99b961dc7a3535146cd6df0b..9724227ee08043a3d83ad87de04b9dcb9b7a072b 100755 GIT binary patch delta 88 zcmeyX`d4)UKL-~B!v$^zh6$4u_+=(b@T*P^a+esYG8#N-D;vH;nU8M^=g diff --git a/0E_cache_performance/raspi3_boot/src/lib.rs b/0E_cache_performance/raspi3_boot/src/lib.rs index bb807e72..01ccd956 100644 --- a/0E_cache_performance/raspi3_boot/src/lib.rs +++ b/0E_cache_performance/raspi3_boot/src/lib.rs @@ -35,6 +35,10 @@ extern crate panic_abort; #[macro_export] macro_rules! entry { ($path:path) => { + /// # Safety + /// + /// - User must ensure to provide a suitable main function for the + /// platform. #[export_name = "main"] pub unsafe fn __main() -> ! { // type check the given path @@ -48,6 +52,10 @@ macro_rules! entry { /// Reset function. /// /// Initializes the bss section before calling into the user's `main()`. +/// +/// # Safety +/// +/// - Only a single core must be active and running this function. unsafe fn reset() -> ! { extern "C" { // Boundaries of the .bss section, provided by the linker script @@ -109,6 +117,10 @@ fn setup_and_enter_el1_from_el2() -> ! { /// /// Parks all cores except core0 and checks if we started in EL2. If /// so, proceeds with setting up EL1. +/// +/// # Safety +/// +/// - Linker script must ensure to place this function at `0x80_000`. #[link_section = ".text.boot"] #[no_mangle] pub unsafe extern "C" fn _boot_cores() -> ! { diff --git a/0E_cache_performance/src/memory/mmu.rs b/0E_cache_performance/src/memory/mmu.rs index 72405e74..aa4e43c6 100644 --- a/0E_cache_performance/src/memory/mmu.rs +++ b/0E_cache_performance/src/memory/mmu.rs @@ -266,6 +266,10 @@ static mut LVL3_TABLE: PageTable = PageTable { /// Set up identity mapped page tables for the first 1 GiB of address space. /// /// The first 2 MiB are 4 KiB granule, the rest 2 MiB. +/// +/// # Safety +/// +/// - User must ensure that the hardware supports the paremeters being set here. pub unsafe fn init() -> Result<(), &'static str> { // Prepare the memory attribute indirection register. set_up_mair(); diff --git a/0F_globals_synchronization_println/.cargo/config b/0F_globals_synchronization_println/.cargo/config index d7fb2ba3..de3f84c9 100644 --- a/0F_globals_synchronization_println/.cargo/config +++ b/0F_globals_synchronization_println/.cargo/config @@ -1,6 +1,5 @@ -[target.aarch64-unknown-none] +[target.aarch64-unknown-none-softfloat] rustflags = [ "-C", "link-arg=-Tlink.ld", - "-C", "target-feature=-fp-armv8", "-C", "target-cpu=cortex-a53", ] diff --git a/0F_globals_synchronization_println/Makefile b/0F_globals_synchronization_println/Makefile index f6d95a8f..65d9ae64 100644 --- a/0F_globals_synchronization_println/Makefile +++ b/0F_globals_synchronization_println/Makefile @@ -22,7 +22,7 @@ # SOFTWARE. # -TARGET = aarch64-unknown-none +TARGET = aarch64-unknown-none-softfloat SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) link.ld diff --git a/0F_globals_synchronization_println/kernel8 b/0F_globals_synchronization_println/kernel8 index 5298cc39404c5cfae1bc74a9e73d91a2d82df00e..cc1c2b2cbf2066445249c248b7c221811ab998fe 100755 GIT binary patch delta 7103 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 delta 7175 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 diff --git a/0F_globals_synchronization_println/kernel8.img b/0F_globals_synchronization_println/kernel8.img index bd6bc375bd91bcaca7783a7292e4f083d9cbd2a3..853c32ea3e998b964433a4d2323d00266de59721 100755 GIT binary patch delta 763 zcmZ9JQAkr!7{||d?w#FTW@@>WO0~6gZdaSBOHdH)x{zMN83^{!q=yO;b3L@0;Y53i zsKcif;)6Y&r-Va9Zv*KiDk#E`UPez>F^GjkRNl_!Rip#wp7VX*@B9D1!?lJthnKFZ z5D?eYpGtLg8JYc&8RVOT3I6Be0Jjwv!>3v!rnM88)3Ov4JmXHl2F|%n_=2nQ`v#Bb zCcMHCy@LiR&g%(yEWYVO06iG@bU-WK^_+*J_|7w=X_UH1;+`VL^;H zd{zRTerX_Ae?&fe&)SJ8_C`*-PPH_*w4tZD&wIn+(hmDTCB%h)jaG-5h+IFOF}AgQ z4#S+dd`I6v-I&>J=)(7g9^P;u!+{PpZHw#}-I2e~TdeIFXd=>uV@*}DoWtIBdN0VK T8s+`}d{XACWImosjivqpSDe>5 delta 719 zcmZ8cT}V_x6rMA8Z|*MsW^1BIciYyVy;oMZT`Z-=x^09#L@Oj%p!sAEVF`gH<%0DX z>~IV%gxu(5o-~Hut*wV3ANtRi(jZ!c2sb1u^ESJClWO3cneTkxcg~r$-c0Y@pab0E zwBwty?Uza>zK(YDweC1yKXHs(ipp@x*@z>~T{!Pd&`%T(xZ>~J1{taF=i z8&A30Xi~+S?l_Ez&+Z<8CX5xgK`mY?J_<#+P~78O1u~%l31h-t<)G|?LmVoJ0^AT+ zOLgkWN_NBS{BD_)%`1Jcpga+u5|7GvQ=>me)k;c%Jf#usMLvoqpUwQ_*_q|H*`=8u z*_;g%m334z@K$Bj_LR=7G0Inbz*nSo#i#JgmNhAo6@!3bPipJ9!P-e89+5GM2Ah6f zB0hT3)E8o{8`flQ1R-RO^oLmUKRC#$#X|K#pmzWeBcjr;3^Fe1*?zgF;UAgH$NZElI+ z5u*c#^wyo}fNUjCRX!84XyXza9}eIH{mP~(<`3%ygKi7@Y&>G)i}DK|JQE0QdO9%J zT+v00g71Q@JMJK)G57wjJ|OEAvK$*89vW`f$UU34Z4%=^VBcTO-vwONZ*0+@C9cUP Hs&xDY9+cCc diff --git a/0F_globals_synchronization_println/raspi3_boot/src/lib.rs b/0F_globals_synchronization_println/raspi3_boot/src/lib.rs index bb807e72..01ccd956 100644 --- a/0F_globals_synchronization_println/raspi3_boot/src/lib.rs +++ b/0F_globals_synchronization_println/raspi3_boot/src/lib.rs @@ -35,6 +35,10 @@ extern crate panic_abort; #[macro_export] macro_rules! entry { ($path:path) => { + /// # Safety + /// + /// - User must ensure to provide a suitable main function for the + /// platform. #[export_name = "main"] pub unsafe fn __main() -> ! { // type check the given path @@ -48,6 +52,10 @@ macro_rules! entry { /// Reset function. /// /// Initializes the bss section before calling into the user's `main()`. +/// +/// # Safety +/// +/// - Only a single core must be active and running this function. unsafe fn reset() -> ! { extern "C" { // Boundaries of the .bss section, provided by the linker script @@ -109,6 +117,10 @@ fn setup_and_enter_el1_from_el2() -> ! { /// /// Parks all cores except core0 and checks if we started in EL2. If /// so, proceeds with setting up EL1. +/// +/// # Safety +/// +/// - Linker script must ensure to place this function at `0x80_000`. #[link_section = ".text.boot"] #[no_mangle] pub unsafe extern "C" fn _boot_cores() -> ! { diff --git a/0F_globals_synchronization_println/src/memory/mmu.rs b/0F_globals_synchronization_println/src/memory/mmu.rs index 72405e74..aa4e43c6 100644 --- a/0F_globals_synchronization_println/src/memory/mmu.rs +++ b/0F_globals_synchronization_println/src/memory/mmu.rs @@ -266,6 +266,10 @@ static mut LVL3_TABLE: PageTable = PageTable { /// Set up identity mapped page tables for the first 1 GiB of address space. /// /// The first 2 MiB are 4 KiB granule, the rest 2 MiB. +/// +/// # Safety +/// +/// - User must ensure that the hardware supports the paremeters being set here. pub unsafe fn init() -> Result<(), &'static str> { // Prepare the memory attribute indirection register. set_up_mair(); diff --git a/10_DMA_memory/.cargo/config b/10_DMA_memory/.cargo/config index d7fb2ba3..de3f84c9 100644 --- a/10_DMA_memory/.cargo/config +++ b/10_DMA_memory/.cargo/config @@ -1,6 +1,5 @@ -[target.aarch64-unknown-none] +[target.aarch64-unknown-none-softfloat] rustflags = [ "-C", "link-arg=-Tlink.ld", - "-C", "target-feature=-fp-armv8", "-C", "target-cpu=cortex-a53", ] diff --git a/10_DMA_memory/Makefile b/10_DMA_memory/Makefile index a5266116..622748ac 100644 --- a/10_DMA_memory/Makefile +++ b/10_DMA_memory/Makefile @@ -22,7 +22,7 @@ # SOFTWARE. # -TARGET = aarch64-unknown-none +TARGET = aarch64-unknown-none-softfloat SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) link.ld diff --git a/10_DMA_memory/kernel8 b/10_DMA_memory/kernel8 index abe5d93681232abf5de9d2a0f9b2afff2894267b..d1061bd0e29eb595b4f825709e1e380c144d3a38 100755 GIT binary patch delta 7117 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 O>HlFKRF@xz`Tq-qMK^5# delta 7221 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 O$$n+@obG)B7W^+I>Ph1O diff --git a/10_DMA_memory/kernel8.img b/10_DMA_memory/kernel8.img index d5f8852b501f8f4608cfb2076babe128bc218a52..a38b0f622bd0988ab46949689990c13ee832d885 100755 GIT binary patch delta 822 zcmZ9JUr19?9LLY^Y;&9RXES!MGtKE7+ni3#_FqbwBdHftDI%=xsfUD^5m^RX=t~b` zhu=z&#QAtpO1MN1^)L~F9wdu0e49Sao@7B3k+(B<4e7xBo%8+O&+qs9-g~lX$fjZ0 zPyzk2vEl>3J9$%|GQeBBY6`#$WTrd7P-i{|k1%Gw0=IC^954)PNG5I|XD}yNbgP7| zQT$;(3o-On%|o61rRo}m1a?@yLO&XX324J9;i4e}Bx57C&)6q6;ZMPVKJf(BidNhb zL>v)^U>jG&L0Cgeb+lxF$3>juaTd3De2fljfPN?Pb?arY7%9o@MZ13~QOa_f8yjFs z54@D$*K|_2hkt6tRDSa5r)=?6F+ROf%isI+4TX-5NW$F7lX%E`JTw94*cVNUw^ zGv4W9&j$nYbp0x|x3ZeO@*Kkb6PuR_hc)pqkncA30=?wIH}+ZDQ`#Kz!zQbaCR{k< z-h`8wY>t5!UpG7Cpl6*@tw*l(KGTB>7kq7yNAOqUazu~2J`-qpt{!cE6AbZ_h<*NQ z=#mqDkv4>F+yY-?LH;`qtpiOl8T9Kq+FRQ@u`AMR$*SC#%1&ts(P3-&w8|_6M;aGH zt4o&_mh~QqR(p?)a7kO0Zys8fdJ>b`BDZM*nXek)M`LNlytFrgi e+97Vr#n1oe<2-NX`Pk^_?NNClGOR_~ed;f1E9pxB delta 852 zcmZ8eT}V@582;X~fBSKpY-fv=)9s-1;B@A6XTvhqLi8#XBl^)rR}n<(#uRd~ZY4k8 zkr9dWBIsOY9OzcVD+y^vf8N9_f@wD~Bl>lHb0@J5e9wEHm*;)X^SvjNgiI3VjCzn1 zlm0otBW2YvW`qZL+T0FPNX^$^1a+39a0z3UQ_zpomUiO_4M`6fNh>bcZMsE5!+QK` zIRbtRT4zA7yt1C*pc@0WHz1+Oo&pDs+k0G~BWX8rzcgtxy%k^Ptvw{!Yw{6!&oLrR z@;>a~9aY77Yd33G3q-D9?FG%?Ys}fbc$x2qXZV!wgC}TnL`(S?rg55K3fCAWP;j<$ zLt5p$a{z1wAnC1W=l5ciqa_nCCwuQIO9u{fFoeHd{5iK_>P6~--G2rK*8NT5PW6m}nv#fTtIl!gF+jtH$p(b6k)Yu%v(QpK3q(JRvh<%DZ_H87@ zB$fF-l@EuoAl=#-iU}80fv5^@t9)4HBkaf6a5~hoGZVqVh^4zZTsFS0>ISrg)U)^h z`xjW>!uqj9;z}ayCLh%~b&PSG40Y@>uarzSW29{UH^ewI(J7B3C$(%RF6257{Q;4h B_dWms diff --git a/10_DMA_memory/raspi3_boot/src/lib.rs b/10_DMA_memory/raspi3_boot/src/lib.rs index bb807e72..01ccd956 100644 --- a/10_DMA_memory/raspi3_boot/src/lib.rs +++ b/10_DMA_memory/raspi3_boot/src/lib.rs @@ -35,6 +35,10 @@ extern crate panic_abort; #[macro_export] macro_rules! entry { ($path:path) => { + /// # Safety + /// + /// - User must ensure to provide a suitable main function for the + /// platform. #[export_name = "main"] pub unsafe fn __main() -> ! { // type check the given path @@ -48,6 +52,10 @@ macro_rules! entry { /// Reset function. /// /// Initializes the bss section before calling into the user's `main()`. +/// +/// # Safety +/// +/// - Only a single core must be active and running this function. unsafe fn reset() -> ! { extern "C" { // Boundaries of the .bss section, provided by the linker script @@ -109,6 +117,10 @@ fn setup_and_enter_el1_from_el2() -> ! { /// /// Parks all cores except core0 and checks if we started in EL2. If /// so, proceeds with setting up EL1. +/// +/// # Safety +/// +/// - Linker script must ensure to place this function at `0x80_000`. #[link_section = ".text.boot"] #[no_mangle] pub unsafe extern "C" fn _boot_cores() -> ! { diff --git a/10_DMA_memory/src/memory/mmu.rs b/10_DMA_memory/src/memory/mmu.rs index 72405e74..aa4e43c6 100644 --- a/10_DMA_memory/src/memory/mmu.rs +++ b/10_DMA_memory/src/memory/mmu.rs @@ -266,6 +266,10 @@ static mut LVL3_TABLE: PageTable = PageTable { /// Set up identity mapped page tables for the first 1 GiB of address space. /// /// The first 2 MiB are 4 KiB granule, the rest 2 MiB. +/// +/// # Safety +/// +/// - User must ensure that the hardware supports the paremeters being set here. pub unsafe fn init() -> Result<(), &'static str> { // Prepare the memory attribute indirection register. set_up_mair(); diff --git a/11_exceptions_groundwork/.cargo/config b/11_exceptions_groundwork/.cargo/config index d7fb2ba3..de3f84c9 100644 --- a/11_exceptions_groundwork/.cargo/config +++ b/11_exceptions_groundwork/.cargo/config @@ -1,6 +1,5 @@ -[target.aarch64-unknown-none] +[target.aarch64-unknown-none-softfloat] rustflags = [ "-C", "link-arg=-Tlink.ld", - "-C", "target-feature=-fp-armv8", "-C", "target-cpu=cortex-a53", ] diff --git a/11_exceptions_groundwork/Makefile b/11_exceptions_groundwork/Makefile index a5266116..622748ac 100644 --- a/11_exceptions_groundwork/Makefile +++ b/11_exceptions_groundwork/Makefile @@ -22,7 +22,7 @@ # SOFTWARE. # -TARGET = aarch64-unknown-none +TARGET = aarch64-unknown-none-softfloat SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) link.ld diff --git a/11_exceptions_groundwork/kernel8 b/11_exceptions_groundwork/kernel8 index faad296b677d05427583ac9a154895477514512c..ef99bf7d71d78d0fb53931ba2b4cbf616cebef36 100755 GIT binary patch delta 7409 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 MmCg9?kHC!o157Nm5&!@I diff --git a/11_exceptions_groundwork/kernel8.img b/11_exceptions_groundwork/kernel8.img index 582fb73b839b40353146e9ab41e458b97bb925ec..2ce0e2a554ed60040f3c293623f45228f3c749de 100755 GIT binary patch delta 930 zcmZ9INla5w6o&7)k5?asVjfIbN>6?|D2q79O7}f zd78)i9HUMkHH(D-Wst7}c(1(DO#$pshJ}3qX3W(GX{HVv^-=hQ_w44IX@D2vQTTm~uV{FpA$z&)^z9 zG55e3Y_&8AAA$5aiSscovwCpe;#rodj^{O!SaYG5$og6mn&9?4#p{+btgvo_3hcGE zKoP#NiZqYn3R@ioiid1q>SRP|D7D{2qSBvp0(m-m-S-093&<8(`N%qHQ> zkQ-R5k7?`al|wE`?WS_F2;?LOQnHAX4=DZ4Y?{~OmMR&!p4~2VOPAkqisHUcJ;X2B zexw@_HUw$&OQwHnuLR0~w;t$-8)sJx(xFuFDsi8cr;~2HyXHCAvA?*UPWbUfu~*qu z@<|VU7ztHF49|w9sJ}$nQMp^-zFGvVEj8gxof$ht%LUQGO>0s>G;>aC>Ny|Vm@cGq z<-8ch0hr$-iPa~`xkN^Mx delta 906 zcmZ8dZ%9*76u;-bJ$+5*pKxwd*S2g5tL{jVn$Jp`cPTxPG2EiIQO34;dg)McaEZfqQK45 zqU0zdckT&$USdd0(-g4+;HmaD?iqlrjY#_d2&Ni+G$LZq*a4F`YIM-Y5>6R6!6@1j z8etd@C-~qBstNUQ2EQi^LJM9_ybXo8&9nvVc+FG^CVXr1(WpU7PkJwbg1^#V!Fimt zbiqN~W!)m}6iL66IA5S-E5xtXG#t0C!W%qFY&*b(y|zY3#2K4Re*)%Y_~{40whTYK z#*qve9^qVukKQui>dZD6#EY38$_#invk5xUoK+78aDP@gG~-ZK0D?H1<%0@z+1Jy2 z12)-DnIk~@f6G3BN;ro-rO)USueQ6aMH1dv zC9Ez;#|ghhNVCOqJ4$kj@I|i|$rj<^LT<)Z*@|JmRqK;O0+s{{#KKZw9@UmDe|SbR6m^bCT}5#UA=Mj&XHh<3I5l^RQ0%YoeD6h+1`U QOvHwQ#0yn%C^cCB01C$sumAu6 diff --git a/11_exceptions_groundwork/raspi3_boot/src/lib.rs b/11_exceptions_groundwork/raspi3_boot/src/lib.rs index bb807e72..01ccd956 100644 --- a/11_exceptions_groundwork/raspi3_boot/src/lib.rs +++ b/11_exceptions_groundwork/raspi3_boot/src/lib.rs @@ -35,6 +35,10 @@ extern crate panic_abort; #[macro_export] macro_rules! entry { ($path:path) => { + /// # Safety + /// + /// - User must ensure to provide a suitable main function for the + /// platform. #[export_name = "main"] pub unsafe fn __main() -> ! { // type check the given path @@ -48,6 +52,10 @@ macro_rules! entry { /// Reset function. /// /// Initializes the bss section before calling into the user's `main()`. +/// +/// # Safety +/// +/// - Only a single core must be active and running this function. unsafe fn reset() -> ! { extern "C" { // Boundaries of the .bss section, provided by the linker script @@ -109,6 +117,10 @@ fn setup_and_enter_el1_from_el2() -> ! { /// /// Parks all cores except core0 and checks if we started in EL2. If /// so, proceeds with setting up EL1. +/// +/// # Safety +/// +/// - Linker script must ensure to place this function at `0x80_000`. #[link_section = ".text.boot"] #[no_mangle] pub unsafe extern "C" fn _boot_cores() -> ! { diff --git a/11_exceptions_groundwork/src/exception.rs b/11_exceptions_groundwork/src/exception.rs index 85cba9c7..189d4c36 100644 --- a/11_exceptions_groundwork/src/exception.rs +++ b/11_exceptions_groundwork/src/exception.rs @@ -27,6 +27,10 @@ use cortex_a::{barrier, regs::*}; global_asm!(include_str!("vectors.S")); +/// # Safety +/// +/// - User must ensure to call this function at a suitable place, since it +/// changes the state of the hardware. pub unsafe fn set_vbar_el1_checked(vec_base_addr: u64) -> bool { if vec_base_addr.trailing_zeros() < 11 { false diff --git a/11_exceptions_groundwork/src/memory/mmu.rs b/11_exceptions_groundwork/src/memory/mmu.rs index 72405e74..aa4e43c6 100644 --- a/11_exceptions_groundwork/src/memory/mmu.rs +++ b/11_exceptions_groundwork/src/memory/mmu.rs @@ -266,6 +266,10 @@ static mut LVL3_TABLE: PageTable = PageTable { /// Set up identity mapped page tables for the first 1 GiB of address space. /// /// The first 2 MiB are 4 KiB granule, the rest 2 MiB. +/// +/// # Safety +/// +/// - User must ensure that the hardware supports the paremeters being set here. pub unsafe fn init() -> Result<(), &'static str> { // Prepare the memory attribute indirection register. set_up_mair(); diff --git a/X1_JTAG_boot/.cargo/config b/X1_JTAG_boot/.cargo/config index d7fb2ba3..de3f84c9 100644 --- a/X1_JTAG_boot/.cargo/config +++ b/X1_JTAG_boot/.cargo/config @@ -1,6 +1,5 @@ -[target.aarch64-unknown-none] +[target.aarch64-unknown-none-softfloat] rustflags = [ "-C", "link-arg=-Tlink.ld", - "-C", "target-feature=-fp-armv8", "-C", "target-cpu=cortex-a53", ] diff --git a/X1_JTAG_boot/Makefile b/X1_JTAG_boot/Makefile index a2f922f1..4c2cf73d 100644 --- a/X1_JTAG_boot/Makefile +++ b/X1_JTAG_boot/Makefile @@ -22,7 +22,7 @@ # SOFTWARE. # -TARGET = aarch64-unknown-none +TARGET = aarch64-unknown-none-softfloat SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) link.ld diff --git a/X1_JTAG_boot/jtag_boot b/X1_JTAG_boot/jtag_boot index 93af1d1484a7f7d67c5cb865b08d1c6d18726a90..9bbaa70c0df5d67788db7bd77766858c0eb9fbeb 100755 GIT binary patch delta 670 zcmZ{fKT8~85XR?OS8s(BNf3ikk_cM_AXy$^7ZLW_I?+1q_@b0@jgyNgPSc;N_y zKq{57l{7*ioK>oHDU%`~k|tdsg@u-O=5^OY3~ckxJM)|8nVG$9b#Ghk??C4x;M*;g zXorZVeq3De?j!WEw7ZXwlGcESm}3ECe4xO^TmG$JgY_{?VUg#@a1SC6Gq0rqkwSkI zE&q+40Y8&n*1J3hozYGFAs2!4tNQmV-PgkWxCp0tSkQ1uLFfOOtjW5fT-S%-mWl_8 z27a%?m>lG$pdtU1yYMd+k7qtf&0Xm=T4=P^kTEWM%yGQga$lv-(~jjniPM*cNv&R# zF4wcHXWRf*8L-QMQwChp6T>EbQ%=)2*_*)pR#YTdnZW(qz8N@4;P^=_ zsv>b>Zdb4{EyBpRqri!R(DWLnsL_k4+2-jAp5AGAK@yveU5_lk8hLi@%jXIdK;uIV GfBykEBBmbz delta 673 zcmZ{fKS&%w6vp2-xA9D8f`4*p;=z)_Kj-b<-QI1P;vi*Gq(~*Zv%AMC@x0qz6cG$b zW1$dYfdlm+Eiuq>V?|t9Q+uPChcC^p1Rmiz+XCHP9p6Ue~!YcZa1#n0tV@;6*G_Kf?A%VPP(V^^i`f7!sCsa<2y3&o3`cF>ZT0Z zdA>#-u<}5Y;;vkr@B5uFiv506F_UD;?X0a02JSo2@_1OwW|loO3F9b8nZc(+cz91X zEF*9|!>n3f-LkAUzbNAAi0#XkEdyzIrXfw+=dmKD#;bvB1}!IWU9aJJp4p~XPPlaR NsR#iS`SURTT>*r~t+N0C diff --git a/X1_JTAG_boot/jtag_boot.img b/X1_JTAG_boot/jtag_boot.img index 2193c94972369d50162dcc45371d4ae4e3266cd5..85fa18341e26e07acdc4109d54c7a71202e00ff5 100755 GIT binary patch delta 53 zcmV-50LuS|28RZaB$Lzu#0&%g0F(d#02Iyt|Cf;I@0lO>tt83QL { + /// # Safety + /// + /// - User must ensure to provide a suitable main function for the + /// platform. #[export_name = "main"] pub unsafe fn __main() -> ! { // type check the given path @@ -48,6 +52,10 @@ macro_rules! entry { /// Reset function. /// /// Initializes the bss section before calling into the user's `main()`. +/// +/// # Safety +/// +/// - Only a single core must be active and running this function. unsafe fn reset() -> ! { extern "C" { // Boundaries of the .bss section, provided by the linker script @@ -69,6 +77,10 @@ unsafe fn reset() -> ! { /// /// Parks all cores except core0, and then jumps to the internal /// `reset()` function. +/// +/// # Safety +/// +/// - Linker script must ensure to place this function at `0x80_000`. #[link_section = ".text.boot"] #[no_mangle] pub unsafe extern "C" fn _boot_cores() -> ! {