/* SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause */ #ifndef _TOOLS_DIS_ASM_COMPAT_H #define _TOOLS_DIS_ASM_COMPAT_H #include <stdio.h> #include <dis-asm.h> /* define types for older binutils version, to centralize ifdef'ery a bit */ #ifndef DISASM_INIT_STYLED enum disassembler_style {DISASSEMBLER_STYLE_NOT_EMPTY}; typedef int (*fprintf_styled_ftype) (void *, enum disassembler_style, const char*, ...); #endif /* * Trivial fprintf wrapper to be used as the fprintf_styled_func argument to * init_disassemble_info_compat() when normal fprintf suffices. */ static inline int fprintf_styled(void *out, enum disassembler_style style, const char *fmt, ...) { va_list args; int r; (void)style; va_start(args, fmt); r = vfprintf(out, fmt, args); va_end(args); return r; } /* * Wrapper for init_disassemble_info() that hides version * differences. Depending on binutils version and architecture either * fprintf_func or fprintf_styled_func will be called. */ static inline void init_disassemble_info_compat(struct disassemble_info *info, void *stream, fprintf_ftype unstyled_func, fprintf_styled_ftype styled_func) { #ifdef DISASM_INIT_STYLED init_disassemble_info(info, stream, unstyled_func, styled_func); #else (void)styled_func; init_disassemble_info(info, stream, unstyled_func); #endif } #endif /* _TOOLS_DIS_ASM_COMPAT_H */