Coverage Report

Created: 2023-09-25 06:27

/src/keystone/llvm/keystone/ks_priv.h
Line
Count
Source
1
/* Keystone Assembler Engine */
2
/* By Nguyen Anh Quynh <aquynh@gmail.com>, 2016 */
3
4
#ifndef KS_PRIV_H
5
#define KS_PRIV_H
6
7
#include <stdint.h>
8
9
#include "../../include/keystone/keystone.h"
10
11
#include "llvm/MC/MCAsmBackend.h"
12
#include "llvm/MC/MCAsmInfo.h"
13
#include "llvm/MC/MCContext.h"
14
#include "llvm/MC/MCInstrInfo.h"
15
#include "llvm/MC/MCParser/MCTargetAsmParser.h"
16
#include "llvm/MC/MCTargetOptionsCommandFlags.h"
17
#include "llvm/Support/SourceMgr.h"
18
#include "llvm/Support/TargetRegistry.h"
19
#include "llvm/Support/TargetSelect.h"
20
21
// These are masks of supported modes for each cpu/arch.
22
// They should be updated when changes are made to the ks_mode enum typedef.
23
49.6k
#define KS_MODE_ARM_MASK    (KS_MODE_ARM|KS_MODE_THUMB|KS_MODE_LITTLE_ENDIAN|KS_MODE_BIG_ENDIAN|KS_MODE_V8)
24
5.15k
#define KS_MODE_MIPS_MASK   (KS_MODE_MIPS32|KS_MODE_MIPS64|KS_MODE_LITTLE_ENDIAN|KS_MODE_BIG_ENDIAN)
25
13.2k
#define KS_MODE_X86_MASK    (KS_MODE_16|KS_MODE_32|KS_MODE_64|KS_MODE_LITTLE_ENDIAN)
26
5.68k
#define KS_MODE_PPC_MASK    (KS_MODE_PPC32|KS_MODE_PPC64|KS_MODE_LITTLE_ENDIAN|KS_MODE_BIG_ENDIAN)
27
10.4k
#define KS_MODE_SPARC_MASK  (KS_MODE_V9|KS_MODE_SPARC32|KS_MODE_SPARC64|KS_MODE_LITTLE_ENDIAN|KS_MODE_BIG_ENDIAN)
28
3.17k
#define KS_MODE_HEXAGON_MASK  (KS_MODE_BIG_ENDIAN)
29
42
#define KS_MODE_SYSTEMZ_MASK  (KS_MODE_BIG_ENDIAN)
30
#define KS_MODE_ARM64_MASK  (KS_MODE_LITTLE_ENDIAN)
31
#define KS_MODE_M68K_MASK   (KS_MODE_BIG_ENDIAN)
32
21.8k
#define KS_MODE_RISCV_MASK (KS_MODE_RISCV32|KS_MODE_RISCV64|KS_MODE_LITTLE_ENDIAN)
33
34
35
#define ARR_SIZE(a) (sizeof(a)/sizeof(a[0]))
36
37
struct ks_struct;
38
39
// return 0 on success, -1 on failure
40
typedef void (*ks_args_ks_t)(struct ks_struct*);
41
42
struct ks_struct {
43
    ks_arch arch;
44
    int mode;
45
    unsigned int errnum;
46
    ks_opt_value syntax;
47
48
    ks_args_ks_t init_arch = nullptr;
49
    const Target *TheTarget = nullptr;
50
    std::string TripleName;
51
    SourceMgr SrcMgr;
52
    MCAsmBackend *MAB = nullptr;
53
    MCTargetOptions MCOptions;
54
    MCRegisterInfo *MRI = nullptr;
55
    MCAsmInfo *MAI = nullptr;
56
    MCInstrInfo *MCII = nullptr;
57
    std::string FeaturesStr;
58
    MCSubtargetInfo *STI = nullptr;
59
    MCObjectFileInfo MOFI;
60
    ks_sym_resolver sym_resolver = nullptr;
61
62
    ks_struct(ks_arch arch, int mode, unsigned int errnum, ks_opt_value syntax)
63
111k
        : arch(arch), mode(mode), errnum(errnum), syntax(syntax) { }
64
};
65
66
67
#endif