Changeset bd48f4c in mainline for kernel/arch/arm32
- Timestamp:
- 2010-07-12T10:53:30Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- bd11d3e
- Parents:
- c40e6ef (diff), bee2d4c (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Location:
- kernel/arch/arm32
- Files:
-
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/arm32/Makefile.inc
rc40e6ef rbd48f4c 46 46 arch/$(KARCH)/src/context.S \ 47 47 arch/$(KARCH)/src/dummy.S \ 48 arch/$(KARCH)/src/panic.S \49 48 arch/$(KARCH)/src/cpu/cpu.c \ 50 49 arch/$(KARCH)/src/ddi/ddi.c \ -
kernel/arch/arm32/include/asm.h
rc40e6ef rbd48f4c 41 41 #include <config.h> 42 42 #include <arch/interrupt.h> 43 #include <trace.h> 43 44 44 45 /** No such instruction on ARM to sleep CPU. */ 45 static inline void cpu_sleep(void)46 NO_TRACE static inline void cpu_sleep(void) 46 47 { 47 48 } 48 49 49 static inline void pio_write_8(ioport8_t *port, uint8_t v)50 NO_TRACE static inline void pio_write_8(ioport8_t *port, uint8_t v) 50 51 { 51 52 *port = v; 52 53 } 53 54 54 static inline void pio_write_16(ioport16_t *port, uint16_t v)55 NO_TRACE static inline void pio_write_16(ioport16_t *port, uint16_t v) 55 56 { 56 57 *port = v; 57 58 } 58 59 59 static inline void pio_write_32(ioport32_t *port, uint32_t v)60 NO_TRACE static inline void pio_write_32(ioport32_t *port, uint32_t v) 60 61 { 61 62 *port = v; 62 63 } 63 64 64 static inline uint8_t pio_read_8(ioport8_t *port)65 NO_TRACE static inline uint8_t pio_read_8(ioport8_t *port) 65 66 { 66 67 return *port; 67 68 } 68 69 69 static inline uint16_t pio_read_16(ioport16_t *port)70 NO_TRACE static inline uint16_t pio_read_16(ioport16_t *port) 70 71 { 71 72 return *port; 72 73 } 73 74 74 static inline uint32_t pio_read_32(ioport32_t *port)75 NO_TRACE static inline uint32_t pio_read_32(ioport32_t *port) 75 76 { 76 77 return *port; … … 84 85 * 85 86 */ 86 static inline uintptr_t get_stack_base(void)87 NO_TRACE static inline uintptr_t get_stack_base(void) 87 88 { 88 89 uintptr_t v; 90 89 91 asm volatile ( 90 92 "and %[v], sp, %[size]\n" … … 92 94 : [size] "r" (~(STACK_SIZE - 1)) 93 95 ); 96 94 97 return v; 95 98 } -
kernel/arch/arm32/include/atomic.h
rc40e6ef rbd48f4c 38 38 39 39 #include <arch/asm.h> 40 #include <trace.h> 40 41 41 42 /** Atomic addition. … … 47 48 * 48 49 */ 49 static inline atomic_count_t atomic_add(atomic_t *val, atomic_count_t i) 50 NO_TRACE static inline atomic_count_t atomic_add(atomic_t *val, 51 atomic_count_t i) 50 52 { 51 53 /* … … 66 68 * 67 69 */ 68 static inline void atomic_inc(atomic_t *val)70 NO_TRACE static inline void atomic_inc(atomic_t *val) 69 71 { 70 72 atomic_add(val, 1); … … 76 78 * 77 79 */ 78 static inline void atomic_dec(atomic_t *val) {80 NO_TRACE static inline void atomic_dec(atomic_t *val) { 79 81 atomic_add(val, -1); 80 82 } … … 86 88 * 87 89 */ 88 static inline atomic_count_t atomic_preinc(atomic_t *val)90 NO_TRACE static inline atomic_count_t atomic_preinc(atomic_t *val) 89 91 { 90 92 return atomic_add(val, 1); … … 97 99 * 98 100 */ 99 static inline atomic_count_t atomic_predec(atomic_t *val)101 NO_TRACE static inline atomic_count_t atomic_predec(atomic_t *val) 100 102 { 101 103 return atomic_add(val, -1); … … 108 110 * 109 111 */ 110 static inline atomic_count_t atomic_postinc(atomic_t *val)112 NO_TRACE static inline atomic_count_t atomic_postinc(atomic_t *val) 111 113 { 112 114 return atomic_add(val, 1) - 1; … … 119 121 * 120 122 */ 121 static inline atomic_count_t atomic_postdec(atomic_t *val)123 NO_TRACE static inline atomic_count_t atomic_postdec(atomic_t *val) 122 124 { 123 125 return atomic_add(val, -1) + 1; -
kernel/arch/arm32/include/cycle.h
rc40e6ef rbd48f4c 37 37 #define KERN_arm32_CYCLE_H_ 38 38 39 /** Returns count of CPU cycles. 39 #include <trace.h> 40 41 /** Return count of CPU cycles. 40 42 * 41 * 43 * No such instruction on ARM to get count of cycles. 42 44 * 43 * @return Count of CPU cycles. 45 * @return Count of CPU cycles. 46 * 44 47 */ 45 static inline uint64_t get_cycle(void)48 NO_TRACE static inline uint64_t get_cycle(void) 46 49 { 47 50 return 0; -
kernel/arch/arm32/include/exception.h
rc40e6ef rbd48f4c 28 28 */ 29 29 30 /** @addtogroup arm32 30 /** @addtogroup arm32 31 31 * @{ 32 32 */ … … 40 40 #include <typedefs.h> 41 41 #include <arch/regutils.h> 42 #include <trace.h> 42 43 43 44 /** If defined, forces using of high exception vectors. */ … … 45 46 46 47 #ifdef HIGH_EXCEPTION_VECTORS 47 #define EXC_BASE_ADDRESS 48 #define EXC_BASE_ADDRESS 0xffff0000 48 49 #else 49 #define EXC_BASE_ADDRESS 50 #define EXC_BASE_ADDRESS 0x0 50 51 #endif 51 52 52 53 /* Exception Vectors */ 53 #define EXC_RESET_VEC (EXC_BASE_ADDRESS + 0x0)54 #define EXC_UNDEF_INSTR_VEC (EXC_BASE_ADDRESS + 0x4)55 #define EXC_SWI_VEC (EXC_BASE_ADDRESS + 0x8)56 #define EXC_PREFETCH_ABORT_VEC (EXC_BASE_ADDRESS + 0xc)57 #define EXC_DATA_ABORT_VEC (EXC_BASE_ADDRESS + 0x10)58 #define EXC_IRQ_VEC (EXC_BASE_ADDRESS + 0x18)59 #define EXC_FIQ_VEC (EXC_BASE_ADDRESS + 0x1c)54 #define EXC_RESET_VEC (EXC_BASE_ADDRESS + 0x0) 55 #define EXC_UNDEF_INSTR_VEC (EXC_BASE_ADDRESS + 0x4) 56 #define EXC_SWI_VEC (EXC_BASE_ADDRESS + 0x8) 57 #define EXC_PREFETCH_ABORT_VEC (EXC_BASE_ADDRESS + 0xc) 58 #define EXC_DATA_ABORT_VEC (EXC_BASE_ADDRESS + 0x10) 59 #define EXC_IRQ_VEC (EXC_BASE_ADDRESS + 0x18) 60 #define EXC_FIQ_VEC (EXC_BASE_ADDRESS + 0x1c) 60 61 61 62 /* Exception numbers */ … … 68 69 #define EXC_FIQ 6 69 70 70 71 71 /** Kernel stack pointer. 72 72 * 73 73 * It is set when thread switches to user mode, 74 74 * and then used for exception handling. 75 * 75 76 */ 76 77 extern uintptr_t supervisor_sp; 77 78 78 79 79 /** Temporary exception stack pointer. … … 81 81 * Temporary stack is used in exceptions handling routines 82 82 * before switching to thread's kernel stack. 83 * 83 84 */ 84 85 extern uintptr_t exc_stack; 85 86 86 87 87 /** Struct representing CPU state saved when an exception occurs. */ … … 90 90 uint32_t sp; 91 91 uint32_t lr; 92 92 93 93 uint32_t r0; 94 94 uint32_t r1; … … 104 104 uint32_t fp; 105 105 uint32_t r12; 106 106 107 107 uint32_t pc; 108 108 } istate_t; 109 109 110 111 /** Sets Program Counter member of given istate structure. 110 /** Set Program Counter member of given istate structure. 112 111 * 113 * @param istate istate structure112 * @param istate istate structure 114 113 * @param retaddr new value of istate's PC member 114 * 115 115 */ 116 static inline void istate_set_retaddr(istate_t *istate, uintptr_t retaddr) 116 NO_TRACE static inline void istate_set_retaddr(istate_t *istate, 117 uintptr_t retaddr) 117 118 { 118 119 istate->pc = retaddr; 119 120 } 120 121 121 122 /** Returns true if exception happened while in userspace. */ 123 static inline int istate_from_uspace(istate_t *istate) 122 /** Return true if exception happened while in userspace. */ 123 NO_TRACE static inline int istate_from_uspace(istate_t *istate) 124 124 { 125 125 return (istate->spsr & STATUS_REG_MODE_MASK) == USER_MODE; 126 126 } 127 127 128 129 /** Returns Program Counter member of given istate structure. */ 130 static inline unative_t istate_get_pc(istate_t *istate) 128 /** Return Program Counter member of given istate structure. */ 129 NO_TRACE static inline unative_t istate_get_pc(istate_t *istate) 131 130 { 132 131 return istate->pc; 133 132 } 134 133 135 static inline unative_t istate_get_fp(istate_t *istate)134 NO_TRACE static inline unative_t istate_get_fp(istate_t *istate) 136 135 { 137 136 return istate->fp; 138 137 } 139 138 140 141 139 extern void install_exception_handlers(void); 142 140 extern void exception_init(void); 143 extern void print_istate(istate_t *istate);144 141 extern void reset_exception_entry(void); 145 142 extern void irq_exception_entry(void); … … 150 147 extern void swi_exception_entry(void); 151 148 152 153 149 #endif 154 150 -
kernel/arch/arm32/include/faddr.h
rc40e6ef rbd48f4c 27 27 */ 28 28 29 /** @addtogroup arm32 29 /** @addtogroup arm32 30 30 * @{ 31 31 */ … … 42 42 * 43 43 * @param fptr Function pointer. 44 * 44 45 */ 45 #define FADDR(fptr) 46 #define FADDR(fptr) ((uintptr_t) (fptr)) 46 47 47 48 #endif -
kernel/arch/arm32/include/interrupt.h
rc40e6ef rbd48f4c 41 41 42 42 /** Initial size of exception dispatch table. */ 43 #define IVT_ITEMS 43 #define IVT_ITEMS 6 44 44 45 45 /** Index of the first item in exception dispatch table. */ 46 #define IVT_FIRST 0 47 46 #define IVT_FIRST 0 48 47 49 48 extern void interrupt_init(void); … … 54 53 extern bool interrupts_disabled(void); 55 54 56 57 55 #endif 58 56 -
kernel/arch/arm32/include/mm/page.h
rc40e6ef rbd48f4c 27 27 */ 28 28 29 /** @addtogroup arm32mm 29 /** @addtogroup arm32mm 30 30 * @{ 31 31 */ … … 40 40 #include <mm/mm.h> 41 41 #include <arch/exception.h> 42 #include <trace.h> 42 43 43 44 #define PAGE_WIDTH FRAME_WIDTH … … 192 193 /** Sets the address of level 0 page table. 193 194 * 194 * @param pt Pointer to the page table to set. 195 */ 196 static inline void set_ptl0_addr(pte_t *pt) 195 * @param pt Pointer to the page table to set. 196 * 197 */ 198 NO_TRACE static inline void set_ptl0_addr(pte_t *pt) 197 199 { 198 200 asm volatile ( … … 205 207 /** Returns level 0 page table entry flags. 206 208 * 207 * @param pt Level 0 page table. 208 * @param i Index of the entry to return. 209 */ 210 static inline int get_pt_level0_flags(pte_t *pt, size_t i) 209 * @param pt Level 0 page table. 210 * @param i Index of the entry to return. 211 * 212 */ 213 NO_TRACE static inline int get_pt_level0_flags(pte_t *pt, size_t i) 211 214 { 212 215 pte_level0_t *p = &pt[i].l0; 213 216 int np = (p->descriptor_type == PTE_DESCRIPTOR_NOT_PRESENT); 214 217 215 218 return (np << PAGE_PRESENT_SHIFT) | (1 << PAGE_USER_SHIFT) | 216 219 (1 << PAGE_READ_SHIFT) | (1 << PAGE_WRITE_SHIFT) | … … 220 223 /** Returns level 1 page table entry flags. 221 224 * 222 * @param pt Level 1 page table. 223 * @param i Index of the entry to return. 224 */ 225 static inline int get_pt_level1_flags(pte_t *pt, size_t i) 225 * @param pt Level 1 page table. 226 * @param i Index of the entry to return. 227 * 228 */ 229 NO_TRACE static inline int get_pt_level1_flags(pte_t *pt, size_t i) 226 230 { 227 231 pte_level1_t *p = &pt[i].l1; 228 232 229 233 int dt = p->descriptor_type; 230 234 int ap = p->access_permission_0; 231 235 232 236 return ((dt == PTE_DESCRIPTOR_NOT_PRESENT) << PAGE_PRESENT_SHIFT) | 233 237 ((ap == PTE_AP_USER_RO_KERNEL_RW) << PAGE_READ_SHIFT) | … … 241 245 } 242 246 243 244 247 /** Sets flags of level 0 page table entry. 245 248 * 246 * @param pt level 0 page table 247 * @param i index of the entry to be changed 248 * @param flags new flags 249 */ 250 static inline void set_pt_level0_flags(pte_t *pt, size_t i, int flags) 249 * @param pt level 0 page table 250 * @param i index of the entry to be changed 251 * @param flags new flags 252 * 253 */ 254 NO_TRACE static inline void set_pt_level0_flags(pte_t *pt, size_t i, int flags) 251 255 { 252 256 pte_level0_t *p = &pt[i].l0; 253 257 254 258 if (flags & PAGE_NOT_PRESENT) { 255 259 p->descriptor_type = PTE_DESCRIPTOR_NOT_PRESENT; … … 262 266 p->descriptor_type = PTE_DESCRIPTOR_COARSE_TABLE; 263 267 p->should_be_zero = 0; 264 268 } 265 269 } 266 270 … … 268 272 /** Sets flags of level 1 page table entry. 269 273 * 270 * We use same access rights for the whole page. When page is not preset we 271 * store 1 in acess_rigts_3 so that at least one bit is 1 (to mark correct 272 * page entry, see #PAGE_VALID_ARCH). 273 * 274 * @param pt Level 1 page table. 275 * @param i Index of the entry to be changed. 276 * @param flags New flags. 277 */ 278 static inline void set_pt_level1_flags(pte_t *pt, size_t i, int flags) 274 * We use same access rights for the whole page. When page 275 * is not preset we store 1 in acess_rigts_3 so that at least 276 * one bit is 1 (to mark correct page entry, see #PAGE_VALID_ARCH). 277 * 278 * @param pt Level 1 page table. 279 * @param i Index of the entry to be changed. 280 * @param flags New flags. 281 * 282 */ 283 NO_TRACE static inline void set_pt_level1_flags(pte_t *pt, size_t i, int flags) 279 284 { 280 285 pte_level1_t *p = &pt[i].l1; … … 287 292 p->access_permission_3 = p->access_permission_0; 288 293 } 289 294 290 295 p->cacheable = p->bufferable = (flags & PAGE_CACHEABLE) != 0; 291 296 292 297 /* default access permission */ 293 298 p->access_permission_0 = p->access_permission_1 = 294 299 p->access_permission_2 = p->access_permission_3 = 295 300 PTE_AP_USER_NO_KERNEL_RW; 296 301 297 302 if (flags & PAGE_USER) { 298 303 if (flags & PAGE_READ) { -
kernel/arch/arm32/include/mm/tlb.h
rc40e6ef rbd48f4c 27 27 */ 28 28 29 /** @addtogroup arm32mm 29 /** @addtogroup arm32mm 30 30 * @{ 31 31 */ -
kernel/arch/arm32/src/asm.S
rc40e6ef rbd48f4c 1 # 2 #Copyright (c) 2007 Michal Kebrt3 #All rights reserved.4 # 5 #Redistribution and use in source and binary forms, with or without6 #modification, are permitted provided that the following conditions7 #are met:8 # 9 #- Redistributions of source code must retain the above copyright10 #notice, this list of conditions and the following disclaimer.11 #- Redistributions in binary form must reproduce the above copyright12 #notice, this list of conditions and the following disclaimer in the13 #documentation and/or other materials provided with the distribution.14 #- The name of the author may not be used to endorse or promote products15 #derived from this software without specific prior written permission.16 # 17 #THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR18 #IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES19 #OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.20 #IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,21 #INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT22 #NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,23 #DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY24 #THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT25 #(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF26 #THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.27 # 1 /* 2 * Copyright (c) 2007 Michal Kebrt 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * - Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * - Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * - The name of the author may not be used to endorse or promote products 15 * derived from this software without specific prior written permission. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 28 29 30 29 .text 31 30 … … 37 36 .global memcpy_from_uspace_failover_address 38 37 .global memcpy_to_uspace_failover_address 38 .global early_putchar 39 39 40 40 memsetb: … … 47 47 memcpy_from_uspace: 48 48 memcpy_to_uspace: 49 add r3, r1, #3 50 bic r3, r3, #3 51 cmp r1, r3 52 stmdb sp!, {r4, r5, lr} 53 mov r5, r0 /* save dst */ 54 beq 4f 55 1: 56 cmp r2, #0 57 movne ip, #0 58 beq 3f 59 2: 60 ldrb r3, [ip, r1] 61 strb r3, [ip, r0] 62 add ip, ip, #1 63 cmp ip, r2 64 bne 2b 65 3: 66 mov r0, r5 67 ldmia sp!, {r4, r5, pc} 68 4: 69 add r3, r0, #3 70 bic r3, r3, #3 71 cmp r0, r3 72 bne 1b 73 movs r4, r2, lsr #2 74 moveq lr, r4 75 beq 6f 76 mov lr, #0 77 mov ip, lr 78 5: 79 ldr r3, [ip, r1] 80 add lr, lr, #1 81 cmp lr, r4 82 str r3, [ip, r0] 83 add ip, ip, #4 84 bne 5b 85 6: 86 ands r4, r2, #3 87 beq 3b 88 mov r3, lr, lsl #2 89 add r0, r3, r0 90 add ip, r3, r1 91 mov r2, #0 92 7: 93 ldrb r3, [r2, ip] 94 strb r3, [r2, r0] 95 add r2, r2, #1 96 cmp r2, r4 97 bne 7b 98 b 3b 49 add r3, r1, #3 50 bic r3, r3, #3 51 cmp r1, r3 52 stmdb sp!, {r4, r5, lr} 53 mov r5, r0 /* save dst */ 54 beq 4f 55 56 1: 57 cmp r2, #0 58 movne ip, #0 59 beq 3f 60 61 2: 62 ldrb r3, [ip, r1] 63 strb r3, [ip, r0] 64 add ip, ip, #1 65 cmp ip, r2 66 bne 2b 67 68 3: 69 mov r0, r5 70 ldmia sp!, {r4, r5, pc} 71 72 4: 73 add r3, r0, #3 74 bic r3, r3, #3 75 cmp r0, r3 76 bne 1b 77 movs r4, r2, lsr #2 78 moveq lr, r4 79 beq 6f 80 mov lr, #0 81 mov ip, lr 82 83 5: 84 ldr r3, [ip, r1] 85 add lr, lr, #1 86 cmp lr, r4 87 str r3, [ip, r0] 88 add ip, ip, #4 89 bne 5b 90 91 6: 92 ands r4, r2, #3 93 beq 3b 94 mov r3, lr, lsl #2 95 add r0, r3, r0 96 add ip, r3, r1 97 mov r2, #0 98 99 7: 100 ldrb r3, [r2, ip] 101 strb r3, [r2, r0] 102 add r2, r2, #1 103 cmp r2, r4 104 bne 7b 105 b 3b 99 106 100 107 memcpy_from_uspace_failover_address: 101 108 memcpy_to_uspace_failover_address: 102 mov r0, #0 103 ldmia sp!, {r4, r5, pc} 109 mov r0, #0 110 ldmia sp!, {r4, r5, pc} 111 112 early_putchar: 113 mov pc, lr -
kernel/arch/arm32/src/exc_handler.S
rc40e6ef rbd48f4c 98 98 stmfd r13!, {r13, lr}^ 99 99 stmfd r13!, {r2} 100 101 # Stop stack traces here 102 mov fp, #0 103 100 104 b 2f 101 105 … … 123 127 stmfd r13!, {r2} 124 128 2: 125 # Stop stack traces here126 mov fp, #0127 129 .endm 128 130 -
kernel/arch/arm32/src/exception.c
rc40e6ef rbd48f4c 173 173 * @param istate Structure to be printed. 174 174 */ 175 void print_istate(istate_t *istate)175 void istate_decode(istate_t *istate) 176 176 { 177 printf("istate dump:\n"); 178 179 printf(" r0: %x r1: %x r2: %x r3: %x\n", 177 printf("r0 =%#0.8lx\tr1 =%#0.8lx\tr2 =%#0.8lx\tr3 =%#0.8lx\n", 180 178 istate->r0, istate->r1, istate->r2, istate->r3); 181 printf(" r4: %x r5: %x r6: %x r7: %x\n",179 printf("r4 =%#0.8lx\tr5 =%#0.8lx\tr6 =%#0.8lx\tr7 =%#0.8lx\n", 182 180 istate->r4, istate->r5, istate->r6, istate->r7); 183 printf(" r8: %x r8: %x r10: %x fp: %x\n",181 printf("r8 =%#0.8lx\tr9 =%#0.8lx\tr10=%#0.8lx\tfp =%#0.8lx\n", 184 182 istate->r8, istate->r9, istate->r10, istate->fp); 185 printf(" r12: %x sp: %x lr: %x spsr: %x\n",183 printf("r12=%#0.8lx\tsp =%#0.8lx\tlr =%#0.8lx\tspsr=%#0.8lx\n", 186 184 istate->r12, istate->sp, istate->lr, istate->spsr); 187 188 printf(" pc: %x\n", istate->pc);189 190 stack_trace_istate(istate);191 185 } 192 186 -
kernel/arch/arm32/src/mm/page.c
rc40e6ef rbd48f4c 27 27 */ 28 28 29 /** @addtogroup arm32mm 29 /** @addtogroup arm32mm 30 30 * @{ 31 31 */ -
kernel/arch/arm32/src/mm/page_fault.c
rc40e6ef rbd48f4c 183 183 if (ret == AS_PF_FAULT) { 184 184 fault_if_from_uspace(istate, "Page fault: %#x.", badvaddr); 185 print_istate(istate); 186 printf("page fault - pc: %x, va: %x, status: %x(%x), " 187 "access:%d\n", istate->pc, badvaddr, fsr.status, fsr, 188 access); 189 190 panic("Page fault."); 185 panic_memtrap(istate, access, badvaddr, "Page fault."); 191 186 } 192 187 } … … 203 198 204 199 if (ret == AS_PF_FAULT) { 205 printf("prefetch_abort\n"); 206 print_istate(istate); 207 panic("page fault - prefetch_abort at address: %x.", 208 istate->pc); 200 panic_memtrap(istate, PF_ACCESS_EXEC, istate->pc, 201 "Page fault - prefetch_abort."); 209 202 } 210 203 }
Note:
See TracChangeset
for help on using the changeset viewer.