-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
MIPS: tracing: move insn_has_delay_slot to a shared header
Currently both kprobes and uprobes code have definitions of the insn_has_delay_slot method. Move it to a separate header as an inline method that each probe-specific method can later use. No functional change intended, although the methods slightly varied in the constraints they set for the methods - the uprobes one was chosen as it is slightly more specific when filtering opcode fields. Signed-off-by: Marcin Nowakowski <marcin.nowakowski@imgtec.com> Cc: linux-mips@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/14335/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
- Loading branch information
Marcin Nowakowski
authored and
Ralf Baechle
committed
Oct 6, 2016
1 parent
d66698e
commit e3031b3
Showing
3 changed files
with
87 additions
and
120 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
/* | ||
* Copyright (C) 2016 Imagination Technologies | ||
* Author: Marcin Nowakowski <marcin.nowakowski@imgtec.com> | ||
* | ||
* This program is free software; you can redistribute it and/or modify it | ||
* under the terms of the GNU General Public License as published by the | ||
* Free Software Foundation; either version 2 of the License, or (at your | ||
* option) any later version. | ||
*/ | ||
|
||
#ifndef __PROBES_COMMON_H | ||
#define __PROBES_COMMON_H | ||
|
||
#include <asm/inst.h> | ||
|
||
static inline int __insn_has_delay_slot(const union mips_instruction insn) | ||
{ | ||
switch (insn.i_format.opcode) { | ||
/* | ||
* jr and jalr are in r_format format. | ||
*/ | ||
case spec_op: | ||
switch (insn.r_format.func) { | ||
case jalr_op: | ||
case jr_op: | ||
return 1; | ||
} | ||
break; | ||
|
||
/* | ||
* This group contains: | ||
* bltz_op, bgez_op, bltzl_op, bgezl_op, | ||
* bltzal_op, bgezal_op, bltzall_op, bgezall_op. | ||
*/ | ||
case bcond_op: | ||
switch (insn.i_format.rt) { | ||
case bltz_op: | ||
case bltzl_op: | ||
case bgez_op: | ||
case bgezl_op: | ||
case bltzal_op: | ||
case bltzall_op: | ||
case bgezal_op: | ||
case bgezall_op: | ||
case bposge32_op: | ||
return 1; | ||
} | ||
break; | ||
|
||
/* | ||
* These are unconditional and in j_format. | ||
*/ | ||
case jal_op: | ||
case j_op: | ||
case beq_op: | ||
case beql_op: | ||
case bne_op: | ||
case bnel_op: | ||
case blez_op: /* not really i_format */ | ||
case blezl_op: | ||
case bgtz_op: | ||
case bgtzl_op: | ||
return 1; | ||
|
||
/* | ||
* And now the FPA/cp1 branch instructions. | ||
*/ | ||
case cop1_op: | ||
#ifdef CONFIG_CPU_CAVIUM_OCTEON | ||
case lwc2_op: /* This is bbit0 on Octeon */ | ||
case ldc2_op: /* This is bbit032 on Octeon */ | ||
case swc2_op: /* This is bbit1 on Octeon */ | ||
case sdc2_op: /* This is bbit132 on Octeon */ | ||
#endif | ||
return 1; | ||
} | ||
|
||
return 0; | ||
} | ||
|
||
#endif /* __PROBES_COMMON_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters