1 /*
2 * Debug information support.
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7 #ifndef TCG_DEBUGINFO_H
8 #define TCG_DEBUGINFO_H
9
10 #include "qemu/bitops.h"
11
12 /*
13 * Debuginfo describing a certain address.
14 */
15 struct debuginfo_query {
16 uint64_t address; /* Input: address. */
17 int flags; /* Input: debuginfo subset. */
18 const char *symbol; /* Symbol that the address is part of. */
19 uint64_t offset; /* Offset from the symbol. */
20 const char *file; /* Source file associated with the address. */
21 int line; /* Line number in the source file. */
22 };
23
24 /*
25 * Debuginfo subsets.
26 */
27 #define DEBUGINFO_SYMBOL BIT(1)
28 #define DEBUGINFO_LINE BIT(2)
29
30 #if defined(CONFIG_TCG) && defined(CONFIG_LIBDW)
31 /*
32 * Load debuginfo for the specified guest ELF image.
33 * Return true on success, false on failure.
34 */
35 void debuginfo_report_elf(const char *name, int fd, uint64_t bias);
36
37 /*
38 * Take the debuginfo lock.
39 */
40 void debuginfo_lock(void);
41
42 /*
43 * Fill each on N Qs with the debuginfo about Q->ADDRESS as specified by
44 * Q->FLAGS:
45 *
46 * - DEBUGINFO_SYMBOL: update Q->SYMBOL and Q->OFFSET. If symbol debuginfo is
47 * missing, then leave them as is.
48 * - DEBUINFO_LINE: update Q->FILE and Q->LINE. If line debuginfo is missing,
49 * then leave them as is.
50 *
51 * This function must be called under the debuginfo lock. The results can be
52 * accessed only until the debuginfo lock is released.
53 */
54 void debuginfo_query(struct debuginfo_query *q, size_t n);
55
56 /*
57 * Release the debuginfo lock.
58 */
59 void debuginfo_unlock(void);
60 #else
debuginfo_report_elf(const char * image_name,int image_fd,uint64_t load_bias)61 static inline void debuginfo_report_elf(const char *image_name, int image_fd,
62 uint64_t load_bias)
63 {
64 }
65
debuginfo_lock(void)66 static inline void debuginfo_lock(void)
67 {
68 }
69
debuginfo_query(struct debuginfo_query * q,size_t n)70 static inline void debuginfo_query(struct debuginfo_query *q, size_t n)
71 {
72 }
73
debuginfo_unlock(void)74 static inline void debuginfo_unlock(void)
75 {
76 }
77 #endif
78
79 #endif
80