Changeset cefb126 in mainline for kernel/generic/src/debug/panic.c
- Timestamp:
- 2010-07-02T14:19:30Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 89c57b6
- Parents:
- fe7abd0 (diff), e3ee9b9 (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. - File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/debug/panic.c
rfe7abd0 rcefb126 1 1 /* 2 * Copyright (c) 20 06 Josef Cejka2 * Copyright (c) 2010 Jakub Jermar 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 /** @addtogroup libc29 /** @addtogroup genericdebug 30 30 * @{ 31 31 */ … … 33 33 */ 34 34 35 #ifndef LIBC_LIMITS_H_ 36 #define LIBC_LIMITS_H_ 35 #include <panic.h> 36 #include <print.h> 37 #include <stacktrace.h> 38 #include <func.h> 39 #include <typedefs.h> 40 #include <mm/as.h> 41 #include <stdarg.h> 42 #include <interrupt.h> 37 43 38 #include <stdint.h> 39 #include <libarch/limits.h> 44 void panic_common(panic_category_t cat, istate_t *istate, int access, 45 uintptr_t address, const char *fmt, ...) 46 { 47 va_list args; 40 48 41 /* char */ 42 #define SCHAR_MIN MIN_INT8 43 #define SCHAR_MAX MAX_INT8 44 #define UCHAR_MIN MIN_UINT8 45 #define UCHAR_MAX MAX_UINT8 49 silent = false; 46 50 47 #ifdef __CHAR_UNSIGNED__ 48 #define CHAR_MIN UCHAR_MIN 49 #define CHAR_MAX UCHAR_MAX 50 #else 51 #define CHAR_MIN SCHAR_MIN 52 #define CHAR_MAX SCHAR_MAX 53 #endif 51 printf("\nKERNEL PANIC "); 52 if (CPU) 53 printf("ON cpu%d ", CPU->id); 54 printf("DUE TO "); 54 55 55 /* short int */ 56 #define SHRT_MIN MIN_INT16 57 #define SHRT_MAX MAX_INT16 58 #define USHRT_MIN MIN_UINT16 59 #define USHRT_MAX MAX_UINT16 56 va_start(args, fmt); 57 if (cat == PANIC_ASSERT) { 58 printf("A FAILED ASSERTION:\n"); 59 vprintf(fmt, args); 60 printf("\n"); 61 } else if (cat == PANIC_BADTRAP) { 62 printf("BAD TRAP %ld.\n", address); 63 } else if (cat == PANIC_MEMTRAP) { 64 printf("A BAD MEMORY ACCESS WHILE "); 65 if (access == PF_ACCESS_READ) 66 printf("LOADING FROM"); 67 else if (access == PF_ACCESS_WRITE) 68 printf("STORING TO"); 69 else if (access == PF_ACCESS_EXEC) 70 printf("BRANCHING TO"); 71 else 72 printf("REFERENCING"); 73 printf(" ADDRESS %p.\n", address); 74 } else { 75 printf("THE FOLLOWING REASON:\n"); 76 vprintf(fmt, args); 77 } 78 va_end(args); 60 79 61 /* int */ 62 #define INT_MIN MIN_INT32 63 #define INT_MAX MAX_INT32 64 #define UINT_MIN MIN_UINT32 65 #define UINT_MAX MAX_UINT32 80 printf("\n"); 66 81 67 /* long long int */ 68 #define LLONG_MIN MIN_INT64 69 #define LLONG_MAX MAX_INT64 70 #define ULLONG_MIN MIN_UINT64 71 #define ULLONG_MAX MAX_UINT64 82 if (istate) { 83 istate_decode(istate); 84 printf("\n"); 85 } 72 86 73 /* off64_t */ 74 #define OFF64_MIN MIN_INT64 75 #define OFF64_MAX MAX_INT64 76 77 /* aoff64_t */ 78 #define AOFF64_MIN MIN_UINT64 79 #define AOFF64_MAX MAX_UINT64 80 81 #endif 87 stack_trace(); 88 halt(); 89 } 82 90 83 91 /** @}
Note:
See TracChangeset
for help on using the changeset viewer.