2014-03-07 11:16:10 -05:00
/*
2015-01-09 10:19:49 +08:00
* arch / arm / probes / decode - arm . h
2014-03-07 11:16:10 -05:00
*
* Copyright 2013 Linaro Ltd .
* Written by : David A . Long
*
* The code contained herein is licensed under the GNU General Public
* License . You may obtain a copy of the GNU General Public License
* Version 2 or later at the following locations :
*
* http : //www.opensource.org/licenses/gpl-license.html
* http : //www.gnu.org/copyleft/gpl.html
*/
# ifndef _ARM_KERNEL_PROBES_ARM_H
# define _ARM_KERNEL_PROBES_ARM_H
2015-01-09 10:19:49 +08:00
# include "decode.h"
2014-03-06 18:06:43 -05:00
enum probes_arm_action {
PROBES_PRELOAD_IMM ,
PROBES_PRELOAD_REG ,
PROBES_BRANCH_IMM ,
PROBES_BRANCH_REG ,
PROBES_MRS ,
PROBES_CLZ ,
PROBES_SATURATING_ARITHMETIC ,
PROBES_MUL1 ,
PROBES_MUL2 ,
PROBES_SWP ,
PROBES_LDRSTRD ,
PROBES_LOAD ,
PROBES_STORE ,
PROBES_LOAD_EXTRA ,
PROBES_STORE_EXTRA ,
PROBES_MOV_IP_SP ,
PROBES_DATA_PROCESSING_REG ,
PROBES_DATA_PROCESSING_IMM ,
PROBES_MOV_HALFWORD ,
PROBES_SEV ,
PROBES_WFE ,
PROBES_SATURATE ,
PROBES_REV ,
PROBES_MMI ,
PROBES_PACK ,
PROBES_EXTEND ,
PROBES_EXTEND_ADD ,
PROBES_MUL_ADD_LONG ,
PROBES_MUL_ADD ,
PROBES_BITFIELD ,
PROBES_BRANCH ,
PROBES_LDMSTM ,
NUM_PROBES_ARM_ACTIONS
} ;
2014-03-05 21:17:23 -05:00
void __kprobes simulate_bbl ( probes_opcode_t opcode ,
2014-03-05 21:41:29 -05:00
struct arch_probes_insn * asi , struct pt_regs * regs ) ;
2014-03-05 21:17:23 -05:00
void __kprobes simulate_blx1 ( probes_opcode_t opcode ,
2014-03-05 21:41:29 -05:00
struct arch_probes_insn * asi , struct pt_regs * regs ) ;
2014-03-05 21:17:23 -05:00
void __kprobes simulate_blx2bx ( probes_opcode_t opcode ,
2014-03-05 21:41:29 -05:00
struct arch_probes_insn * asi , struct pt_regs * regs ) ;
2014-03-05 21:17:23 -05:00
void __kprobes simulate_mrs ( probes_opcode_t opcode ,
2014-03-05 21:41:29 -05:00
struct arch_probes_insn * asi , struct pt_regs * regs ) ;
2014-03-05 21:17:23 -05:00
void __kprobes simulate_mov_ipsp ( probes_opcode_t opcode ,
2014-03-05 21:41:29 -05:00
struct arch_probes_insn * asi , struct pt_regs * regs ) ;
2014-03-07 11:16:10 -05:00
2014-03-06 18:12:07 -05:00
extern const union decode_item probes_decode_arm_table [ ] ;
enum probes_insn arm_probes_decode_insn ( probes_opcode_t ,
2014-03-05 21:41:29 -05:00
struct arch_probes_insn * , bool emulate ,
2015-01-05 19:29:18 +08:00
const union decode_action * actions ,
const struct decode_checker * checkers [ ] ) ;
2014-03-06 18:12:07 -05:00
2014-03-07 11:16:10 -05:00
# endif