Rev 2304 | Rev 2326 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2304 | Rev 2318 | ||
---|---|---|---|
Line 132... | Line 132... | ||
132 | * \param badvaddr Virtual address the instruction tries to access |
132 | * \param badvaddr Virtual address the instruction tries to access |
133 | * |
133 | * |
134 | * \return Type of access into memmory |
134 | * \return Type of access into memmory |
135 | * \note Returns #PF_ACESS_EXEC if no memory access is requested |
135 | * \note Returns #PF_ACESS_EXEC if no memory access is requested |
136 | */ |
136 | */ |
137 | //TODO: remove debug print in final version ... instead panic return PF_ACESS_EXEC |
- | |
138 | static pf_access_t get_memory_access_type(uint32_t instr_addr, uintptr_t badvaddr) |
137 | static pf_access_t get_memory_access_type(uint32_t instr_addr, uintptr_t badvaddr) |
139 | { |
138 | { |
140 | instruction_union_t instr_union; |
139 | instruction_union_t instr_union; |
141 | instr_union.pc = instr_addr; |
140 | instr_union.pc = instr_addr; |
142 | 141 | ||
Line 162... | Line 161... | ||
162 | if (is_swap_instruction(instr)) { |
161 | if (is_swap_instruction(instr)) { |
163 | /* Swap instructions make read and write in one step. |
162 | /* Swap instructions make read and write in one step. |
164 | * Type of access that caused exception have to page tables |
163 | * Type of access that caused exception have to page tables |
165 | * and access rights. |
164 | * and access rights. |
166 | */ |
165 | */ |
167 | //TODO: ALF!!!!! cann't use AS asi is define as THE->as and THE structure is |
- | |
168 | //sored after stack_base of current thread |
- | |
169 | //but now ... in exception we have separate stacks <==> different |
- | |
170 | //stack_pointer ... so AS contains nonsence data |
- | |
171 | //same case as_page_fault .... it's nessesary to solve "stack" problem |
- | |
172 | 166 | ||
173 | pte_level1_t* pte = (pte_level1_t*) |
167 | pte_level1_t* pte = (pte_level1_t*) |
174 | pt_mapping_operations.mapping_find(AS, badvaddr); |
168 | pt_mapping_operations.mapping_find(AS, badvaddr); |
175 | 169 | ||
176 | ASSERT(pte); |
170 | if ( pte == NULL ) { |
- | 171 | return PF_ACCESS_READ; |
|
- | 172 | } |
|
177 | 173 | ||
178 | /* check if read possible |
174 | /* check if read possible |
179 | * Note: Don't check PTE_READABLE because it returns 1 everytimes */ |
175 | * Note: Don't check PTE_READABLE because it returns 1 everytimes */ |
180 | if ( !PTE_PRESENT(pte) ) { |
176 | if ( !PTE_PRESENT(pte) ) { |
181 | return PF_ACCESS_READ; |
177 | return PF_ACCESS_READ; |