brintos

brintos / linux-shallow public Read only

0
0
Text · 2.4 KiB · 9f7164c Raw
83 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#ifndef __UNWIND_H3#define __UNWIND_H4 5#include <linux/compiler.h>6#include <linux/types.h>7#include "util/map_symbol.h"8 9struct maps;10struct perf_sample;11struct thread;12 13struct unwind_entry {14	struct map_symbol ms;15	u64		  ip;16};17 18typedef int (*unwind_entry_cb_t)(struct unwind_entry *entry, void *arg);19 20struct unwind_libunwind_ops {21	int (*prepare_access)(struct maps *maps);22	void (*flush_access)(struct maps *maps);23	void (*finish_access)(struct maps *maps);24	int (*get_entries)(unwind_entry_cb_t cb, void *arg,25			   struct thread *thread,26			   struct perf_sample *data, int max_stack, bool best_effort);27};28 29#ifdef HAVE_DWARF_UNWIND_SUPPORT30/*31 * When best_effort is set, don't report errors and fail silently. This could32 * be expanded in the future to be more permissive about things other than33 * error messages.34 */35int unwind__get_entries(unwind_entry_cb_t cb, void *arg,36			struct thread *thread,37			struct perf_sample *data, int max_stack,38			bool best_effort);39/* libunwind specific */40#ifdef HAVE_LIBUNWIND_SUPPORT41#ifndef LIBUNWIND__ARCH_REG_ID42#define LIBUNWIND__ARCH_REG_ID(regnum) libunwind__arch_reg_id(regnum)43#endif44 45int LIBUNWIND__ARCH_REG_ID(int regnum);46int unwind__prepare_access(struct maps *maps, struct map *map, bool *initialized);47void unwind__flush_access(struct maps *maps);48void unwind__finish_access(struct maps *maps);49#else50static inline int unwind__prepare_access(struct maps *maps __maybe_unused,51					 struct map *map __maybe_unused,52					 bool *initialized __maybe_unused)53{54	return 0;55}56 57static inline void unwind__flush_access(struct maps *maps __maybe_unused) {}58static inline void unwind__finish_access(struct maps *maps __maybe_unused) {}59#endif60#else61static inline int62unwind__get_entries(unwind_entry_cb_t cb __maybe_unused,63		    void *arg __maybe_unused,64		    struct thread *thread __maybe_unused,65		    struct perf_sample *data __maybe_unused,66		    int max_stack __maybe_unused,67		    bool best_effort __maybe_unused)68{69	return 0;70}71 72static inline int unwind__prepare_access(struct maps *maps __maybe_unused,73					 struct map *map __maybe_unused,74					 bool *initialized __maybe_unused)75{76	return 0;77}78 79static inline void unwind__flush_access(struct maps *maps __maybe_unused) {}80static inline void unwind__finish_access(struct maps *maps __maybe_unused) {}81#endif /* HAVE_DWARF_UNWIND_SUPPORT */82#endif /* __UNWIND_H */83