45 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
// SPDX-License-Identifier: GPL-2.0
 | 
						|
/*
 | 
						|
 * Mapping of DWARF debug register numbers into register names.
 | 
						|
 *
 | 
						|
 * Copyright IBM Corp. 2010, 2017
 | 
						|
 * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>,
 | 
						|
 *	      Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
 | 
						|
 *
 | 
						|
 */
 | 
						|
 | 
						|
#include <errno.h>
 | 
						|
#include <stddef.h>
 | 
						|
#include <stdlib.h>
 | 
						|
#include <linux/kernel.h>
 | 
						|
#include <asm/ptrace.h>
 | 
						|
#include <string.h>
 | 
						|
#include <dwarf-regs.h>
 | 
						|
#include "dwarf-regs-table.h"
 | 
						|
 | 
						|
const char *get_arch_regstr(unsigned int n)
 | 
						|
{
 | 
						|
	return (n >= ARRAY_SIZE(s390_dwarf_regs)) ? NULL : s390_dwarf_regs[n];
 | 
						|
}
 | 
						|
 | 
						|
/*
 | 
						|
 * Convert the register name into an offset to struct pt_regs (kernel).
 | 
						|
 * This is required by the BPF prologue generator.  The BPF
 | 
						|
 * program is called in the BPF overflow handler in the perf
 | 
						|
 * core.
 | 
						|
 */
 | 
						|
int regs_query_register_offset(const char *name)
 | 
						|
{
 | 
						|
	unsigned long gpr;
 | 
						|
 | 
						|
	if (!name || strncmp(name, "%r", 2))
 | 
						|
		return -EINVAL;
 | 
						|
 | 
						|
	errno = 0;
 | 
						|
	gpr = strtoul(name + 2, NULL, 10);
 | 
						|
	if (errno || gpr >= 16)
 | 
						|
		return -EINVAL;
 | 
						|
 | 
						|
	return offsetof(user_pt_regs, gprs) + 8 * gpr;
 | 
						|
}
 |