Changes in kernel/generic/src/interrupt/interrupt.c [5bcf1f9:04e3d9f] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/interrupt/interrupt.c
r5bcf1f9 r04e3d9f 45 45 #include <console/console.h> 46 46 #include <console/cmd.h> 47 #include <ipc/event.h> 47 48 #include <synch/mutex.h> 48 49 #include <time/delay.h> … … 162 163 { 163 164 fault_if_from_uspace(istate, "Unhandled exception %u.", n); 164 panic _badtrap(istate, n,"Unhandled exception %u.", n);165 panic("Unhandled exception %u.", n); 165 166 } 166 167 … … 175 176 printf("Task %s (%" PRIu64 ") killed due to an exception at " 176 177 "program counter %p.\n", TASK->name, TASK->taskid, 177 (void *)istate_get_pc(istate));178 istate_get_pc(istate)); 178 179 179 180 stack_trace_istate(istate); … … 187 188 printf("\n"); 188 189 189 task_kill_self(true);190 }191 192 /** Get istate structure of a thread.193 *194 * Get pointer to the istate structure at the bottom of the kernel stack.195 *196 * This function can be called in interrupt or user context. In interrupt197 * context the istate structure is created by the low-level exception198 * handler. In user context the istate structure is created by the199 * low-level syscall handler.200 */201 istate_t *istate_get(thread_t *thread)202 {203 190 /* 204 * The istate structure should be right at the bottom of the kernel 205 * stack. 191 * Userspace can subscribe for FAULT events to take action 192 * whenever a thread faults. (E.g. take a dump, run a debugger). 193 * The notification is always available, but unless Udebug is enabled, 194 * that's all you get. 206 195 */ 207 return (istate_t *) ((uint8_t *) thread->kstack + THREAD_STACK_SIZE - 208 sizeof(istate_t)); 196 if (event_is_subscribed(EVENT_FAULT)) { 197 /* Notify the subscriber that a fault occurred. */ 198 event_notify_3(EVENT_FAULT, LOWER32(TASK->taskid), 199 UPPER32(TASK->taskid), (unative_t) THREAD); 200 201 #ifdef CONFIG_UDEBUG 202 /* Wait for a debugging session. */ 203 udebug_thread_fault(); 204 #endif 205 } 206 207 task_kill(TASK->taskid); 208 thread_exit(); 209 209 } 210 210 … … 263 263 264 264 const char *symbol = 265 symtab_fmt_name_lookup(( sysarg_t) exc_table[i].handler);265 symtab_fmt_name_lookup((unative_t) exc_table[i].handler); 266 266 267 267 #ifdef __32_BITS__
Note:
See TracChangeset
for help on using the changeset viewer.