@@ -60,7 +60,7 @@ SECTION_FUNC(TEXT, _user_thread_entry_wrapper)
60
60
/ * sp the user stack pointer , r0 - r4 are in stack * /
61
61
mov r5 , sp
62
62
/ * start of privilege stack * /
63
- add blink , r5 , CONFIG_PRIVILEGED_STACK_SIZE + 16
63
+ add blink , r5 , CONFIG_PRIVILEGED_STACK_SIZE + STACK_GUARD_SIZE + 16
64
64
65
65
/ * r4< - start of user stack region * /
66
66
mov r0 , _kernel
@@ -87,15 +87,23 @@ SECTION_FUNC(TEXT, _arc_userspace_enter)
87
87
* In ARCv2 , the U bit can only be set through exception return
88
88
* /
89
89
#ifdef CONFIG_ARC_STACK_CHECKING
90
- / * disable stack checking during swap * /
90
+ / * disable stack checking as the stack should be initialized * /
91
+ #ifdef CONFIG_ARC_HAS_SECURE
92
+ lr blink , [ _ARC_V2_SEC_ST AT ]
93
+ bclr blink , blink , _ARC_V2_SEC_STAT_SSC_BIT
94
+ / * sflag blink * /
95
+ / * sflag instruction is not supported in current ARC GNU * /
96
+ .long 0x07ff302f
97
+ #else
91
98
lr blink , [ _ARC_V2_STATUS32 ]
92
99
bclr blink , blink , _ARC_V2_STATUS32_SC_BIT
93
100
kflag blink
101
+ #endif
94
102
#endif
95
103
/ * the end of user stack in r5 * /
96
104
add r5 , r4 , r5
97
105
/ * start of privilege stack * /
98
- add blink , r5 , CONFIG_PRIVILEGED_STACK_SIZE
106
+ add blink , r5 , CONFIG_PRIVILEGED_STACK_SIZE + STACK_GUARD_SIZE
99
107
mov sp , r5
100
108
101
109
push_s r0
@@ -121,10 +129,18 @@ _clear_user_stack:
121
129
122
130
_load_stack_check_regs
123
131
132
+ #ifdef CONFIG_ARC_HAS_SECURE
133
+ lr r0 , [ _ARC_V2_SEC_ST AT ]
134
+ bset r0 , r0 , _ARC_V2_SEC_STAT_SSC_BIT
135
+ / * sflag r0 * /
136
+ / * sflag instruction is not supported in current ARC GNU * /
137
+ .long 0x003f302f
138
+ #else
124
139
lr r0 , [ _ARC_V2_STATUS32 ]
125
140
bset r0 , r0 , _ARC_V2_STATUS32_SC_BIT
126
141
kflag r0
127
142
#endif
143
+ #endif
128
144
129
145
_arc_go_to_user_space:
130
146
lr r0 , [ _ARC_V2_STATUS32 ]
0 commit comments