Developer World
Spresense SDK Library v3.2.0-ebc0364
crashdump.h
1/****************************************************************************
2 * arch/arm/include/cxd56xx/crashdump.h
3 *
4 * Licensed to the Apache Software Foundation (ASF) under one or more
5 * contributor license agreements. See the NOTICE file distributed with
6 * this work for additional information regarding copyright ownership. The
7 * ASF licenses this file to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance with the
9 * License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
15 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
16 * License for the specific language governing permissions and limitations
17 * under the License.
18 *
19 ****************************************************************************/
20
21#ifndef __ARCH_ARM_INCLUDE_CXD56XX_CRASHDUMP_H
22#define __ARCH_ARM_INCLUDE_CXD56XX_CRASHDUMP_H
23
24/****************************************************************************
25 * Included Files
26 ****************************************************************************/
27
28#include <nuttx/config.h>
29
30#include <stdint.h>
31
32#include <sys/param.h>
33
34#include <nuttx/irq.h>
35
36/****************************************************************************
37 * Pre-processor Prototypes
38 ****************************************************************************/
39
40/* Configuration ************************************************************/
41
42/* The following guides in the amount of the user and interrupt stack
43 * data we can save. The amount of storage left will dictate the actual
44 * number of entries of the user stack data saved.
45 */
46
47#define CRASHLOG_SIZE 1024
48#if CONFIG_ARCH_INTERRUPTSTACK <= 3
49# define NUMBER_STACKS 1
50#else
51# define NUMBER_STACKS 2
52#endif
53#define CRASHLOG_LEFTOVER (CRASHLOG_SIZE - sizeof(info_t))
54#define CONFIG_ISTACK_SIZE (CRASHLOG_LEFTOVER / NUMBER_STACKS / \
55 sizeof(stack_word_t))
56#define CONFIG_USTACK_SIZE (CRASHLOG_LEFTOVER / NUMBER_STACKS / \
57 sizeof(stack_word_t))
58
59/* For Assert keep this much of the file name */
60
61#define MAX_FILE_PATH_LENGTH 40
62
63/****************************************************************************
64 * Public Types
65 ****************************************************************************/
66
67#ifndef __ASSEMBLY__
68
69/* Used for stack frame storage */
70
71typedef uint32_t stack_word_t;
72
73/* Stack related data */
74
75typedef struct
76{
77 uint32_t sp;
78 uint32_t top;
79 uint32_t size;
80} _stack_t;
81
82typedef struct
83{
84 _stack_t user;
85#if CONFIG_ARCH_INTERRUPTSTACK > 3
86 _stack_t interrupt;
87#endif
89
90/* Flags to identify what is in the dump */
91
92typedef enum
93{
94 REGS_PRESENT = 0x01,
95 USERSTACK_PRESENT = 0x02,
96 INTSTACK_PRESENT = 0x04,
97 INVALID_USERSTACK_PTR = 0x20,
98 INVALID_INTSTACK_PTR = 0x40,
99} fault_flags_t;
100
101typedef struct
102{
103 struct timespec ts; /* timestamp */
104 fault_flags_t flags; /* What is in the dump */
105 uintptr_t current_regs; /* Used to validate the dump */
106 int lineno; /* __LINE__ to up_assert */
107 pid_t pid; /* Process ID */
108 uint32_t regs[XCPTCONTEXT_REGS]; /* Interrupt register save area */
109 crash_stack_t stacks; /* Stack info */
110#if CONFIG_TASK_NAME_SIZE > 0
111 char name[CONFIG_TASK_NAME_SIZE + 1]; /* Task name (with NULL
112 * terminator) */
113#endif
114 char filename[MAX_FILE_PATH_LENGTH]; /* the Last of chars in
115 * __FILE__ to up_assert */
116} info_t;
117
118typedef struct
119{
120 info_t info;
121#if CONFIG_ARCH_INTERRUPTSTACK > 3
122 stack_word_t istack[CONFIG_ISTACK_SIZE];
123#endif
124 stack_word_t ustack[CONFIG_USTACK_SIZE];
126
127/****************************************************************************
128 * Public Data
129 ****************************************************************************/
130
131#undef EXTERN
132#if defined(__cplusplus)
133#define EXTERN extern "C"
134extern "C"
135{
136#else
137#define EXTERN extern
138#endif
139
140/****************************************************************************
141 * Public Function Prototypes
142 ****************************************************************************/
143
144#undef EXTERN
145#if defined(__cplusplus)
146}
147#endif
148
149#endif /* __ASSEMBLY__ */
150#endif /* __ARCH_ARM_INCLUDE_CXD56XX_CRASHDUMP_H */
Definition: crashdump.h:76
Definition: crashdump.h:83
Definition: crashdump.h:119
Definition: crashdump.h:102