From d007212b8483e13406470acfe9b46deec15adf41 Mon Sep 17 00:00:00 2001 From: iliya <iliya.saroukha@hes-so.ch> Date: Wed, 10 Jan 2024 19:39:15 +0100 Subject: [PATCH] feat: one function for permutting between modes & computing user stack size dynamically --- assembleur.s | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/assembleur.s b/assembleur.s index b17deb7..7732ea6 100644 --- a/assembleur.s +++ b/assembleur.s @@ -9,30 +9,24 @@ .global reset_user_stack .global switch_to_user_mode .global switch_to_supervisor_mode +.global switch_mode .global change_ret .extern user_stack DATA // this adress can be read like: ldr Rx, =user_stack reset_user_stack: ldr r0, =user_stack - add r0, r0, #8192 // 2048 * word_size + mov r1, USER_STACK_SIZE + lsl r1, r1, #2 // (e.g. multiply by word size == 4 bytes) + add r0, r1 msr PSP, r0 - mov r1, #3 - msr CONTROL, r1 - isb + mov r2, #3 + msr CONTROL, r2 bx lr -switch_to_user_mode: - mrs r0, control - mov r0, #3 - msr control, r0 - isb - bx lr - -switch_to_supervisor_mode: - mrs r0, control - mov r0, #0 - msr control, r0 - isb +switch_mode: + mrs r1, control + mov r1, r0 + msr control, r1 bx lr /*************************/ -- GitLab