update to ida 7.6, add builds
This commit is contained in:
136
idasdk76/module/avr/avr.hpp
Normal file
136
idasdk76/module/avr/avr.hpp
Normal file
@@ -0,0 +1,136 @@
|
||||
/*
|
||||
* Interactive disassembler (IDA).
|
||||
* Copyright (c) 1990-99 by Ilfak Guilfanov.
|
||||
* ALL RIGHTS RESERVED.
|
||||
* E-mail: ig@datarescue.com
|
||||
*
|
||||
* Atmel AVR - 8-bit RISC processor
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _AVR_HPP
|
||||
#define _AVR_HPP
|
||||
|
||||
#include "../idaidp.hpp"
|
||||
#include "ins.hpp"
|
||||
#include <diskio.hpp>
|
||||
#include <fixup.hpp>
|
||||
#include "../iohandler.hpp"
|
||||
#include "../../ldr/elf/elfr_avr.h"
|
||||
extern int data_id;
|
||||
|
||||
#define PROCMOD_NAME avr
|
||||
#define PROCMOD_NODE_NAME AVR_INFO_NODENAME
|
||||
|
||||
//---------------------------------
|
||||
// Operand types:
|
||||
|
||||
enum phrase_t ENUM_SIZE(uint16)
|
||||
{
|
||||
PH_X, // X
|
||||
PH_XPLUS, // X+
|
||||
PH_MINUSX, // -X
|
||||
PH_Y, // Y
|
||||
PH_YPLUS, // Y+
|
||||
PH_MINUSY, // -Y
|
||||
PH_Z, // Z
|
||||
PH_ZPLUS, // Z+
|
||||
PH_MINUSZ, // -Z
|
||||
};
|
||||
|
||||
|
||||
#define reg_pair specflag1 // o_reg: operand is 16bit a register pair (even register is in op.reg)
|
||||
#define o_port o_idpspec0 // port number in x.addr
|
||||
|
||||
//------------------------------------------------------------------
|
||||
enum RegNo
|
||||
{
|
||||
R0, R1, R2, R3, R4, R5, R6, R7,
|
||||
R8, R9, R10, R11, R12, R13, R14, R15,
|
||||
R16, R17, R18, R19, R20, R21, R22, R23,
|
||||
R24, R25, R26, R27, R28, R29, R30, R31,
|
||||
rVcs, rVds, // virtual registers for code and data segments
|
||||
};
|
||||
|
||||
//------------------------------------------------------------------
|
||||
void idaapi avr_segend(outctx_t &ctx, segment_t *seg);
|
||||
void idaapi avr_assumes(outctx_t &ctx); // function to produce assume directives
|
||||
|
||||
int idaapi is_align_insn(ea_t ea);
|
||||
|
||||
//------------------------------------------------------------------
|
||||
struct avr_iohandler_t : public iohandler_t
|
||||
{
|
||||
struct avr_t ±
|
||||
avr_iohandler_t(avr_t &_pm, netnode &nn) : iohandler_t(nn), pm(_pm) {}
|
||||
virtual const char *iocallback(const ioports_t &iop, const char *line) override;
|
||||
virtual bool entry_processing(ea_t &, const char * /*word*/, const char * /*cmt*/) override;
|
||||
virtual bool check_ioresp() const override;
|
||||
};
|
||||
|
||||
DECLARE_PROC_LISTENER(idb_listener_t, struct avr_t);
|
||||
|
||||
struct avr_t : public procmod_t
|
||||
{
|
||||
netnode helper;
|
||||
avr_iohandler_t ioh = avr_iohandler_t(*this, helper);
|
||||
idb_listener_t idb_listener = idb_listener_t(*this);
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// not tested
|
||||
fixup_handler_t cfh_avr16 =
|
||||
{
|
||||
sizeof(fixup_handler_t),
|
||||
"AVR16", // Format name, must be unique
|
||||
0, // props
|
||||
2, 16, 0, 0, // size, width, shift
|
||||
REFINFO_CUSTOM, // reftype
|
||||
nullptr, // apply, will be inited in processor_t::ev_init
|
||||
NULL, // get_value
|
||||
NULL, // patch_value
|
||||
};
|
||||
fixup_type_t cfh_avr16_id = 0;
|
||||
int ref_avr16_id = 0;
|
||||
|
||||
int subarch = 0;
|
||||
|
||||
// memory configuration
|
||||
ea_t ram = BADADDR;
|
||||
uint32 ramsize = 0;
|
||||
uint32 romsize = 0;
|
||||
uint32 eepromsize = 0;
|
||||
|
||||
bool imageFile = false;
|
||||
bool nonBinary = false;
|
||||
|
||||
bool flow = false;
|
||||
|
||||
virtual ssize_t idaapi on_event(ssize_t msgid, va_list va) override;
|
||||
|
||||
const ioport_t *find_port(ea_t address);
|
||||
const char *find_bit(ea_t address, size_t bit);
|
||||
void setup_avr_device(int resp_info);
|
||||
const char *set_idp_options(
|
||||
const char *keyword,
|
||||
int value_type,
|
||||
const void *value,
|
||||
bool idb_loaded);
|
||||
bool set_param_by_arch(void);
|
||||
bool is_possible_subarch(int addr) const;
|
||||
|
||||
void handle_operand(const insn_t &insn, const op_t &x, bool isAlt, bool isload);
|
||||
int emu(const insn_t &insn);
|
||||
|
||||
void avr_header(outctx_t &ctx);
|
||||
|
||||
inline void opimm(const insn_t &insn, op_t &x, int value) const;
|
||||
inline uint32 code_address(const insn_t &insn, signed int delta) const;
|
||||
int ana(insn_t *_insn);
|
||||
|
||||
void avr_segstart(outctx_t &ctx, segment_t *Sarea) const;
|
||||
void avr_footer(outctx_t &ctx) const;
|
||||
|
||||
void load_from_idb();
|
||||
};
|
||||
|
||||
#endif // _AVR_HPP
|
||||
Reference in New Issue
Block a user