| /* 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 */ |