Pip
Architecture-dependent parts of Pip: MAL, IAL and boot
x86_multiboot/boot/include/debug.h
Go to the documentation of this file.
1 /*******************************************************************************/
2 /* © Université de Lille, The Pip Development Team (2015-2021) */
3 /* */
4 /* This software is a computer program whose purpose is to run a minimal, */
5 /* hypervisor relying on proven properties such as memory isolation. */
6 /* */
7 /* This software is governed by the CeCILL license under French law and */
8 /* abiding by the rules of distribution of free software. You can use, */
9 /* modify and/ or redistribute the software under the terms of the CeCILL */
10 /* license as circulated by CEA, CNRS and INRIA at the following URL */
11 /* "http://www.cecill.info". */
12 /* */
13 /* As a counterpart to the access to the source code and rights to copy, */
14 /* modify and redistribute granted by the license, users are provided only */
15 /* with a limited warranty and the software's author, the holder of the */
16 /* economic rights, and the successive licensors have only limited */
17 /* liability. */
18 /* */
19 /* In this respect, the user's attention is drawn to the risks associated */
20 /* with loading, using, modifying and/or developing or reproducing the */
21 /* software by the user in light of its specific status of free software, */
22 /* that may mean that it is complicated to manipulate, and that also */
23 /* therefore means that it is reserved for developers and experienced */
24 /* professionals having in-depth computer knowledge. Users are therefore */
25 /* encouraged to load and test the software's suitability as regards their */
26 /* requirements in conditions enabling the security of their systems and/or */
27 /* data to be ensured and, more generally, to use and operate it in the */
28 /* same conditions as regards security. */
29 /* */
30 /* The fact that you are presently reading this means that you have had */
31 /* knowledge of the CeCILL license and that you accept its terms. */
32 /*******************************************************************************/
33 
40 #ifndef __SCR__
41 #define __SCR__
42 
43 #include <stdint.h>
44 #include <stdarg.h>
45 #include "x86int.h"
46 #include "mal.h"
47 
51 #define CRITICAL 0
52 #define ERROR 1
53 #define WARNING 2
54 #define INFO 3
55 #define LOG 4
56 #define TRACE 5
57 
58 #define True 1
59 #define False 0
60 
61 #ifdef PIPDEBUG
62 
63 #ifndef LOGLEVEL
64 #define LOGLEVEL CRITICAL
65 #endif
66 
70 #define DEBUGRAW(a) krn_puts(a)
71 
76 #define DEBUG(loglvl,msg,...) if(loglvl<=LOGLEVEL){ kprintf(#loglvl " [%s:%d] " msg, __FILE__, __LINE__, ##__VA_ARGS__);}
77 
81 #define DEBUGHEX(a) puthex(a)
82 
85 #define DEBUGDEC(a) putdec(a)
86 
87 #else
88 
92 #define DEBUGRAW(...)
93 
97 #define DEBUG(...)
98 
102 #define DEBUGHEX(...)
103 
107 #define DEBUGDEC(...)
108 
109 #endif
110 
111 void krn_puts(char *c);
112 void kaput(char c);
113 void puthex(int n);
114 void putdec(int n);
115 
116 void counter_update(uint32_t begin);
117 void display_time();
118 
119 void kprintf(char *fmt, ...);
120 void panic(int_ctx_t *is);
121 void dumpRegs(int_ctx_t *is, uint32_t outputLevel);
122 
123 #define BENCH_BEGIN counter_update(1)
124 #define BENCH_END {counter_update(0); DEBUG(TRACE, "Benchmark lasted "); display_time();}
125 
126 #define ASSERT(u) \
127  if (!(u)){ \
128  kprintf("[%s:%d] Assert failed: " #u "\n", __FILE__, __LINE__); \
129  panic(0); \
130  }
131 
132 
133 #endif
void puthex(int n)
Writes an hexadecimal number to the serial output.
Definition: debug.c:115
void kprintf(char *fmt,...)
Definition: debug.c:245
x86 interrupts include file for x86 IAL
Memory Abstraction Layer common interface.
void dumpRegs(int_ctx_t *is, uint32_t outputLevel)
Dumps the registers of a saved interrupt context onto the serial output.
Definition: debug.c:82
void putdec(int n)
Writes a decimal number to the serial output.
Definition: debug.c:161
void display_time()
void counter_update(uint32_t begin)
void panic(int_ctx_t *is)
Just a loop acting like a kernel panic.
Definition: debug.c:65
Definition: x86int.h:64
void krn_puts(char *c)
Writes a string to the serial output.
Definition: debug.c:52
void kaput(char c)