327b75a469
tcg/ should not depend on accel/tcg/, but perf and debuginfo support provided by the latter are being used by tcg/tcg.c. Since that's the only user, move both to tcg/. Suggested-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-ID: <20231212003837.64090-5-iii@linux.ibm.com> Message-Id: <20240125054631.78867-5-philmd@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
80 lines
1.9 KiB
C
80 lines
1.9 KiB
C
/*
|
|
* 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
|