ROSE
0.9.6a
Main Page
Related Pages
Modules
Namespaces
Classes
Files
Examples
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
DisassemblerMips.h
Go to the documentation of this file.
1
/* Disassembly specific to the MIPS architecture */
2
#ifndef ROSE_DISASSEMBLER_MIPS_H
3
#define ROSE_DISASSEMBLER_MIPS_H
4
5
#include "
Disassembler.h
"
6
#include "
InstructionEnumsMips.h
"
7
#include "
sageBuilderAsm.h
"
8
9
class
DisassemblerMips
:
public
Disassembler
{
10
public
:
11
DisassemblerMips
() {
init
(); }
12
virtual
DisassemblerMips
*
clone
() const
/*override*/
{
return
new
DisassemblerMips
(*
this
); }
13
virtual
bool
can_disassemble
(
SgAsmGenericHeader
*) const
/*override*/
;
14
virtual
SgAsmInstruction
*
disassembleOne
(const
MemoryMap
*,
rose_addr_t
start_va,
AddressSet
*successors=NULL)
/*override*/
;
15
virtual
SgAsmInstruction
*
make_unknown_instruction
(const
Disassembler
::Exception&)
/*override*/
;
16
23
class
Mips32
{
24
public
:
25
enum
Architecture
{ Release1, Release2,
Release3
, Micro };
26
Mips32
(
Architecture
arch,
unsigned
match,
unsigned
mask): arch(arch), match(match), mask(mask) {}
27
virtual
~Mips32
() {}
28
Architecture
arch
;
// architecture where this instruction was introduced
29
unsigned
match
;
// value of compared bits
30
unsigned
mask
;
// bits of 'match' that will be compared
31
typedef
DisassemblerMips
D
;
32
virtual
SgAsmMipsInstruction
*operator()(D *d,
unsigned
insn_bits) = 0;
33
};
34
38
Mips32
*
find_idis
(
unsigned
insn_bits);
39
43
void
insert_idis
(
Mips32
*,
bool
replace=
false
);
44
49
SgAsmMipsInstruction
*
disassemble_insn
(
unsigned
insn_bits);
50
51
53
// The following functions are used by the various instruction-specific Mips32 subclasses.
54
56
rose_addr_t
get_ip
()
const
{
return
insn_va
; }
57
59
SgAsmMipsInstruction
*
makeInstruction
(
MipsInstructionKind
,
const
std::string &mnemonic,
60
SgAsmExpression
*arg1=NULL,
SgAsmExpression
*arg2=NULL,
61
SgAsmExpression
*arg3=NULL,
SgAsmExpression
*arg4=NULL);
62
64
SgAsmMipsRegisterReferenceExpression
*
makeRegister
(
unsigned
regnum);
65
67
SgAsmMipsRegisterReferenceExpression
*
makeFpRegister
(
unsigned
regnum);
68
70
SgAsmMipsRegisterReferenceExpression
*
makeCp0Register
(
unsigned
regnum,
unsigned
sel);
71
73
SgAsmMipsRegisterReferenceExpression
*
makeCp2Register
(
unsigned
regnum);
74
78
SgAsmMipsRegisterReferenceExpression
*
makeFpccRegister
(
unsigned
cc);
79
81
SgAsmMipsRegisterReferenceExpression
*
makeCp2ccRegister
(
unsigned
cc);
82
84
SgAsmMipsRegisterReferenceExpression
*
makeHwRegister
(
unsigned
regnum);
85
87
SgAsmMipsRegisterReferenceExpression
*
makeShadowRegister
(
unsigned
regnum);
88
91
SgAsmIntegerValueExpression
*
makeImmediate8
(
unsigned
value,
size_t
bit_offset,
size_t
nbits);
92
95
SgAsmIntegerValueExpression
*
makeImmediate16
(
unsigned
value,
size_t
bit_offset,
size_t
nbits);
96
99
SgAsmIntegerValueExpression
*
makeImmediate32
(
unsigned
value,
size_t
bit_offset,
size_t
nbits);
100
104
SgAsmIntegerValueExpression
*
makeBranchTargetRelative
(
unsigned
offset16,
size_t
bit_offset,
size_t
nbits);
105
109
SgAsmIntegerValueExpression
*
makeBranchTargetAbsolute
(
unsigned
insn_index,
size_t
bit_offset,
size_t
nbits);
110
114
SgAsmBinaryAdd
*
makeRegisterOffset
(
unsigned
gprnum,
unsigned
offset16);
115
117
SgAsmBinaryAdd
*
makeRegisterIndexed
(
unsigned
base_gprnum,
unsigned
index_gprnum);
118
120
SgAsmMemoryReferenceExpression
*
makeMemoryReference
(
SgAsmExpression
*addr,
SgAsmType
*type);
121
123
124
protected
:
125
void
init
();
126
127
protected
:
130
std::vector<Mips32*>
idis_table
;
131
133
rose_addr_t
insn_va
;
134
};
135
136
#endif
rose-edg4x
src
frontend
Disassemblers
DisassemblerMips.h
Generated on Mon May 5 2014 17:29:21 for ROSE by
1.8.4