|  | /* | 
|  | * Debug information support. | 
|  | * | 
|  | * SPDX-License-Identifier: GPL-2.0-or-later | 
|  | */ | 
|  |  | 
|  | #ifndef TCG_DEBUGINFO_H | 
|  | #define TCG_DEBUGINFO_H | 
|  |  | 
|  | #include "qemu/bitops.h" | 
|  |  | 
|  | /* | 
|  | * Debuginfo describing a certain address. | 
|  | */ | 
|  | struct debuginfo_query { | 
|  | uint64_t address;    /* Input: address. */ | 
|  | int flags;           /* Input: debuginfo subset. */ | 
|  | const char *symbol;  /* Symbol that the address is part of. */ | 
|  | uint64_t offset;     /* Offset from the symbol. */ | 
|  | const char *file;    /* Source file associated with the address. */ | 
|  | int line;            /* Line number in the source file. */ | 
|  | }; | 
|  |  | 
|  | /* | 
|  | * Debuginfo subsets. | 
|  | */ | 
|  | #define DEBUGINFO_SYMBOL BIT(1) | 
|  | #define DEBUGINFO_LINE   BIT(2) | 
|  |  | 
|  | #if defined(CONFIG_TCG) && defined(CONFIG_LIBDW) | 
|  | /* | 
|  | * Load debuginfo for the specified guest ELF image. | 
|  | * Return true on success, false on failure. | 
|  | */ | 
|  | void debuginfo_report_elf(const char *name, int fd, uint64_t bias); | 
|  |  | 
|  | /* | 
|  | * Take the debuginfo lock. | 
|  | */ | 
|  | void debuginfo_lock(void); | 
|  |  | 
|  | /* | 
|  | * Fill each on N Qs with the debuginfo about Q->ADDRESS as specified by | 
|  | * Q->FLAGS: | 
|  | * | 
|  | * - DEBUGINFO_SYMBOL: update Q->SYMBOL and Q->OFFSET. If symbol debuginfo is | 
|  | *                     missing, then leave them as is. | 
|  | * - DEBUINFO_LINE: update Q->FILE and Q->LINE. If line debuginfo is missing, | 
|  | *                  then leave them as is. | 
|  | * | 
|  | * This function must be called under the debuginfo lock. The results can be | 
|  | * accessed only until the debuginfo lock is released. | 
|  | */ | 
|  | void debuginfo_query(struct debuginfo_query *q, size_t n); | 
|  |  | 
|  | /* | 
|  | * Release the debuginfo lock. | 
|  | */ | 
|  | void debuginfo_unlock(void); | 
|  | #else | 
|  | static inline void debuginfo_report_elf(const char *image_name, int image_fd, | 
|  | uint64_t load_bias) | 
|  | { | 
|  | } | 
|  |  | 
|  | static inline void debuginfo_lock(void) | 
|  | { | 
|  | } | 
|  |  | 
|  | static inline void debuginfo_query(struct debuginfo_query *q, size_t n) | 
|  | { | 
|  | } | 
|  |  | 
|  | static inline void debuginfo_unlock(void) | 
|  | { | 
|  | } | 
|  | #endif | 
|  |  | 
|  | #endif |