update to ida 7.6, add builds
This commit is contained in:
127
idasdk76/module/i960/i960.hpp
Normal file
127
idasdk76/module/i960/i960.hpp
Normal file
@@ -0,0 +1,127 @@
|
||||
/*
|
||||
* Interactive disassembler (IDA).
|
||||
* Copyright (c) 1990-2001 by Ilfak Guilfanov.
|
||||
* ALL RIGHTS RESERVED.
|
||||
* E-mail: ig@datarescue.com
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _I960_HPP
|
||||
#define _I960_HPP
|
||||
|
||||
#include "../idaidp.hpp"
|
||||
#include <diskio.hpp>
|
||||
#include "ins.hpp"
|
||||
#include "../iohandler.hpp"
|
||||
|
||||
// Absolute offset (<4096) offset exp MEMA o_imm
|
||||
// Absolute displacement disp exp MEMB o_imm
|
||||
// Register Indirect abase (reg) o_phrase, index=-1, scale=1
|
||||
// with offset abase+offset exp(reg) o_displ, index=-1,scale=1
|
||||
// with displacement abase+disp exp(reg) o_displ, index=-1,scale=1
|
||||
// with index abase+(index*scale) (reg)[reg*scale] o_phrase, index=index
|
||||
// with index and displacement abase+(index*scale)+disp exp(reg)[reg*scale] o_displ
|
||||
// Index with displacement (index*scale) + disp exp[reg*scale] o_displ, reg=index, index=-1
|
||||
// IP with displacement IP+disp+8 exp(IP) o_near
|
||||
|
||||
#define index specflag1 // o_displ, o_phrase
|
||||
#define scale specflag2 // o_displ, o_phrase
|
||||
|
||||
#define aux_t 0x0001 // .t suffix
|
||||
#define aux_f 0x0002 // .f suffix
|
||||
#define aux_ip 0x0004 // ip relative addressing
|
||||
|
||||
//------------------------------------------------------------------
|
||||
enum regnum_t
|
||||
{
|
||||
LR0, LR1, LR2, LR3, LR4, LR5, LR6, LR7,
|
||||
LR8, LR9, LR10, LR11, LR12, LR13, LR14, LR15,
|
||||
GR0, GR1, GR2, GR3, GR4, GR5, GR6, GR7,
|
||||
GR8, GR9, GR10, GR11, GR12, GR13, GR14, GR15,
|
||||
SF0, SF31=SF0+31,
|
||||
PC, AC, IP, TC,
|
||||
FP0, FP1, FP2, FP3,
|
||||
ds, cs,
|
||||
MAXREG = cs,
|
||||
PFP = LR0,
|
||||
SP = LR1,
|
||||
RIP = LR2,
|
||||
FP = GR15,
|
||||
IPND = SF0+0,
|
||||
IMSK = SF0+1,
|
||||
DMAC = SF0+2,
|
||||
};
|
||||
|
||||
//------------------------------------------------------------------
|
||||
ea_t calc_mem(const insn_t &insn, ea_t ea); // map virtual to physical ea
|
||||
//------------------------------------------------------------------
|
||||
void idaapi i960_header(outctx_t &ctx);
|
||||
|
||||
void idaapi i960_segend(outctx_t &ctx, segment_t *seg);
|
||||
void idaapi i960_assumes(outctx_t &ctx); // function to produce assume directives
|
||||
|
||||
int idaapi is_align_insn(ea_t ea);
|
||||
|
||||
//------------------------------------------------------------------
|
||||
struct tabent_t
|
||||
{
|
||||
ushort itype;
|
||||
char opnum;
|
||||
char dtype;
|
||||
};
|
||||
|
||||
//------------------------------------------------------------------
|
||||
struct i960_iohandler_t : public iohandler_t
|
||||
{
|
||||
struct i960_t ±
|
||||
i960_iohandler_t(i960_t &_pm, netnode &nn) : iohandler_t(nn), pm(_pm) {}
|
||||
};
|
||||
|
||||
struct i960_t : public procmod_t
|
||||
{
|
||||
netnode helper;
|
||||
i960_iohandler_t ioh = i960_iohandler_t(*this, helper);
|
||||
|
||||
ushort idpflags;
|
||||
#define IDP_STRICT 0x0001 // Strictly adhere to instruction encodings
|
||||
inline bool is_strict(void) { return (idpflags & IDP_STRICT) != 0; }
|
||||
void save_idpflags() { helper.altset(-1, idpflags); }
|
||||
|
||||
#define REG_MIN 0x580
|
||||
#define REG_MAX 0x7f4
|
||||
struct tabent_t reg_tab_buf[REG_MAX - REG_MIN + 1];
|
||||
struct tabent_t *reg_tab = nullptr;
|
||||
|
||||
bool flow;
|
||||
|
||||
virtual ssize_t idaapi on_event(ssize_t msgid, va_list va) override;
|
||||
|
||||
void load_symbols(void);
|
||||
const char *find_sym(ea_t address);
|
||||
void choose_device();
|
||||
const char *set_idp_options(
|
||||
const char *keyword,
|
||||
int value_type,
|
||||
const void * value,
|
||||
bool idb_loaded);
|
||||
bool ctrl(insn_t &insn, uint32 code);
|
||||
bool opmemory(insn_t &insn, op_t &x, uint32 code, char dtype);
|
||||
bool mem(insn_t &insn, uint32 code);
|
||||
|
||||
int i960_ana(insn_t *_insn);
|
||||
bool reg(insn_t &insn, uint32 code);
|
||||
|
||||
void handle_operand(const insn_t &insn, const op_t &x, bool isload);
|
||||
int i960_emu(const insn_t &insn);
|
||||
|
||||
void i960_segstart(outctx_t &ctx, segment_t *Sarea) const;
|
||||
void i960_footer(outctx_t &ctx) const;
|
||||
|
||||
void load_from_idb();
|
||||
};
|
||||
|
||||
extern int data_id;
|
||||
#define PROCMOD_NODE_NAME "$ i960"
|
||||
#define PROCMOD_NAME i960
|
||||
#endif // _I960_HPP
|
||||
Reference in New Issue
Block a user