cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

decode-thumb.h (2238B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/*
      3 * arch/arm/probes/decode-thumb.h
      4 *
      5 * Copyright 2013 Linaro Ltd.
      6 * Written by: David A. Long
      7 */
      8
      9#ifndef _ARM_KERNEL_PROBES_THUMB_H
     10#define  _ARM_KERNEL_PROBES_THUMB_H
     11
     12#include "decode.h"
     13
     14/*
     15 * True if current instruction is in an IT block.
     16 */
     17#define in_it_block(cpsr)	((cpsr & 0x06000c00) != 0x00000000)
     18
     19/*
     20 * Return the condition code to check for the currently executing instruction.
     21 * This is in ITSTATE<7:4> which is in CPSR<15:12> but is only valid if
     22 * in_it_block returns true.
     23 */
     24#define current_cond(cpsr)	((cpsr >> 12) & 0xf)
     25
     26enum probes_t32_action {
     27	PROBES_T32_EMULATE_NONE,
     28	PROBES_T32_SIMULATE_NOP,
     29	PROBES_T32_LDMSTM,
     30	PROBES_T32_LDRDSTRD,
     31	PROBES_T32_TABLE_BRANCH,
     32	PROBES_T32_TST,
     33	PROBES_T32_CMP,
     34	PROBES_T32_MOV,
     35	PROBES_T32_ADDSUB,
     36	PROBES_T32_LOGICAL,
     37	PROBES_T32_ADDWSUBW_PC,
     38	PROBES_T32_ADDWSUBW,
     39	PROBES_T32_MOVW,
     40	PROBES_T32_SAT,
     41	PROBES_T32_BITFIELD,
     42	PROBES_T32_SEV,
     43	PROBES_T32_WFE,
     44	PROBES_T32_MRS,
     45	PROBES_T32_BRANCH_COND,
     46	PROBES_T32_BRANCH,
     47	PROBES_T32_PLDI,
     48	PROBES_T32_LDR_LIT,
     49	PROBES_T32_LDRSTR,
     50	PROBES_T32_SIGN_EXTEND,
     51	PROBES_T32_MEDIA,
     52	PROBES_T32_REVERSE,
     53	PROBES_T32_MUL_ADD,
     54	PROBES_T32_MUL_ADD2,
     55	PROBES_T32_MUL_ADD_LONG,
     56	NUM_PROBES_T32_ACTIONS
     57};
     58
     59enum probes_t16_action {
     60	PROBES_T16_ADD_SP,
     61	PROBES_T16_CBZ,
     62	PROBES_T16_SIGN_EXTEND,
     63	PROBES_T16_PUSH,
     64	PROBES_T16_POP,
     65	PROBES_T16_SEV,
     66	PROBES_T16_WFE,
     67	PROBES_T16_IT,
     68	PROBES_T16_CMP,
     69	PROBES_T16_ADDSUB,
     70	PROBES_T16_LOGICAL,
     71	PROBES_T16_BLX,
     72	PROBES_T16_HIREGOPS,
     73	PROBES_T16_LDR_LIT,
     74	PROBES_T16_LDRHSTRH,
     75	PROBES_T16_LDRSTR,
     76	PROBES_T16_ADR,
     77	PROBES_T16_LDMSTM,
     78	PROBES_T16_BRANCH_COND,
     79	PROBES_T16_BRANCH,
     80	NUM_PROBES_T16_ACTIONS
     81};
     82
     83extern const union decode_item probes_decode_thumb32_table[];
     84extern const union decode_item probes_decode_thumb16_table[];
     85
     86enum probes_insn __kprobes
     87thumb16_probes_decode_insn(probes_opcode_t insn, struct arch_probes_insn *asi,
     88		bool emulate, const union decode_action *actions,
     89		const struct decode_checker *checkers[]);
     90enum probes_insn __kprobes
     91thumb32_probes_decode_insn(probes_opcode_t insn, struct arch_probes_insn *asi,
     92		bool emulate, const union decode_action *actions,
     93		const struct decode_checker *checkers[]);
     94
     95#endif