Changeset bd48f4c in mainline for kernel/generic/src/debug/panic.c


Ignore:
Timestamp:
2010-07-12T10:53:30Z (14 years ago)
Author:
Jiri Svoboda <jiri@…>
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.
Message:

Merge mainline changes.

File:
1 moved

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/debug/panic.c

    rc40e6ef rbd48f4c  
    11/*
    2  * Copyright (c) 2006 Josef Cejka
     2 * Copyright (c) 2010 Jakub Jermar
    33 * All rights reserved.
    44 *
     
    2727 */
    2828
    29 /** @addtogroup libc
     29/** @addtogroup genericdebug
    3030 * @{
    3131 */
     
    3333 */
    3434
    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>
    3743
    38 #include <stdint.h>
    39 #include <libarch/limits.h>
     44void panic_common(panic_category_t cat, istate_t *istate, int access,
     45    uintptr_t address, const char *fmt, ...)
     46{
     47        va_list args;
    4048
    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;
    4650
    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 ");
    5455
    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);
    6079
    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");
    6681
    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        }
    7286
    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}
    8290
    8391/** @}
Note: See TracChangeset for help on using the changeset viewer.