Rev 1037 | Rev 1112 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1037 | Rev 1066 | ||
---|---|---|---|
Line 118... | Line 118... | ||
118 | /* Why the linker moves the variable 64K away in assembler |
118 | /* Why the linker moves the variable 64K away in assembler |
119 | * when not in .text section ???????? |
119 | * when not in .text section ???????? |
120 | */ |
120 | */ |
121 | __address supervisor_sp __attribute__ ((section (".text"))); |
121 | __address supervisor_sp __attribute__ ((section (".text"))); |
122 | 122 | ||
123 | void userspace(__address entry) |
123 | void userspace(uspace_arg_t *uarg) |
124 | { |
124 | { |
125 | /* EXL=1, UM=1, IE=1 */ |
125 | /* EXL=1, UM=1, IE=1 */ |
126 | cp0_status_write(cp0_status_read() | (cp0_status_exl_exception_bit | |
126 | cp0_status_write(cp0_status_read() | (cp0_status_exl_exception_bit | |
127 | cp0_status_um_bit | |
127 | cp0_status_um_bit | |
128 | cp0_status_ie_enabled_bit)); |
128 | cp0_status_ie_enabled_bit)); |
129 | cp0_epc_write(entry); |
129 | cp0_epc_write(uarg->uspace_entry); |
130 | userspace_asm(USTACK_ADDRESS+PAGE_SIZE); |
130 | userspace_asm(uarg->uspace_stack+PAGE_SIZE); |
131 | while (1) |
131 | while (1) |
132 | ; |
132 | ; |
133 | } |
133 | } |
134 | 134 | ||
135 | void before_thread_runs_arch(void) |
135 | void before_thread_runs_arch(void) |