 c7edc9e326
			
		
	
	
	c7edc9e326
	
	
	
		
			
			Using Rabin Vincent's ARM uprobes patches as a base, enable uprobes support on ARM. Caveats: - Thumb is not supported Signed-off-by: Rabin Vincent <rabin@rab.in> Signed-off-by: David A. Long <dave.long@linaro.org>
		
			
				
	
	
		
			45 lines
		
	
	
	
		
			1.1 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
	
		
			1.1 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * Copyright (C) 2012 Rabin Vincent <rabin at rab.in>
 | |
|  *
 | |
|  * This program is free software; you can redistribute it and/or modify
 | |
|  * it under the terms of the GNU General Public License version 2 as
 | |
|  * published by the Free Software Foundation.
 | |
|  */
 | |
| 
 | |
| #ifndef _ASM_UPROBES_H
 | |
| #define _ASM_UPROBES_H
 | |
| 
 | |
| #include <asm/probes.h>
 | |
| #include <asm/opcodes.h>
 | |
| 
 | |
| typedef u32 uprobe_opcode_t;
 | |
| 
 | |
| #define MAX_UINSN_BYTES		4
 | |
| #define UPROBE_XOL_SLOT_BYTES	64
 | |
| 
 | |
| #define UPROBE_SWBP_ARM_INSN	0xe7f001f9
 | |
| #define UPROBE_SS_ARM_INSN	0xe7f001fa
 | |
| #define UPROBE_SWBP_INSN	__opcode_to_mem_arm(UPROBE_SWBP_ARM_INSN)
 | |
| #define UPROBE_SWBP_INSN_SIZE	4
 | |
| 
 | |
| struct arch_uprobe_task {
 | |
| 	u32 backup;
 | |
| 	unsigned long	saved_trap_no;
 | |
| };
 | |
| 
 | |
| struct arch_uprobe {
 | |
| 	u8 insn[MAX_UINSN_BYTES];
 | |
| 	unsigned long ixol[2];
 | |
| 	uprobe_opcode_t bpinsn;
 | |
| 	bool simulate;
 | |
| 	u32 pcreg;
 | |
| 	void (*prehandler)(struct arch_uprobe *auprobe,
 | |
| 			   struct arch_uprobe_task *autask,
 | |
| 			   struct pt_regs *regs);
 | |
| 	void (*posthandler)(struct arch_uprobe *auprobe,
 | |
| 			    struct arch_uprobe_task *autask,
 | |
| 			    struct pt_regs *regs);
 | |
| 	struct arch_probes_insn asi;
 | |
| };
 | |
| 
 | |
| #endif
 |