2014-03-07 20:16:10 +04:00
/*
* arch / arm / kernel / probes - arm . h
*
* 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
2014-03-07 03:06:43 +04:00
enum probes_arm_action {
PROBES_EMULATE_NONE ,
PROBES_SIMULATE_NOP ,
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-06 06:17:23 +04:00
void __kprobes simulate_bbl ( probes_opcode_t opcode ,
2014-03-06 06:41:29 +04:00
struct arch_probes_insn * asi , struct pt_regs * regs ) ;
2014-03-06 06:17:23 +04:00
void __kprobes simulate_blx1 ( probes_opcode_t opcode ,
2014-03-06 06:41:29 +04:00
struct arch_probes_insn * asi , struct pt_regs * regs ) ;
2014-03-06 06:17:23 +04:00
void __kprobes simulate_blx2bx ( probes_opcode_t opcode ,
2014-03-06 06:41:29 +04:00
struct arch_probes_insn * asi , struct pt_regs * regs ) ;
2014-03-06 06:17:23 +04:00
void __kprobes simulate_mrs ( probes_opcode_t opcode ,
2014-03-06 06:41:29 +04:00
struct arch_probes_insn * asi , struct pt_regs * regs ) ;
2014-03-06 06:17:23 +04:00
void __kprobes simulate_mov_ipsp ( probes_opcode_t opcode ,
2014-03-06 06:41:29 +04:00
struct arch_probes_insn * asi , struct pt_regs * regs ) ;
2014-03-07 20:16:10 +04:00
2014-03-07 03:12:07 +04:00
extern const union decode_item probes_decode_arm_table [ ] ;
enum probes_insn arm_probes_decode_insn ( probes_opcode_t ,
2014-03-06 06:41:29 +04:00
struct arch_probes_insn * , bool emulate ,
2014-03-07 03:12:07 +04:00
const union decode_action * actions ) ;
2014-03-07 20:16:10 +04:00
# endif