linux/arch/parisc/include/asm/ptrace.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2/* written by Philipp Rumpf, Copyright (C) 1999 SuSE GmbH Nuernberg
   3** Copyright (C) 2000 Grant Grundler, Hewlett-Packard
   4*/
   5#ifndef _PARISC_PTRACE_H
   6#define _PARISC_PTRACE_H
   7
   8#include <uapi/asm/ptrace.h>
   9
  10
  11#define task_regs(task) ((struct pt_regs *) ((char *)(task) + TASK_REGS))
  12
  13#define arch_has_single_step()  1
  14#define arch_has_block_step()   1
  15
  16/* XXX should we use iaoq[1] or iaoq[0] ? */
  17#define user_mode(regs)                 (((regs)->iaoq[0] & 3) ? 1 : 0)
  18#define user_space(regs)                (((regs)->iasq[1] != 0) ? 1 : 0)
  19#define instruction_pointer(regs)       ((regs)->iaoq[0] & ~3)
  20#define user_stack_pointer(regs)        ((regs)->gr[30])
  21unsigned long profile_pc(struct pt_regs *);
  22
  23static inline unsigned long regs_return_value(struct pt_regs *regs)
  24{
  25        return regs->gr[28];
  26}
  27
  28static inline void instruction_pointer_set(struct pt_regs *regs,
  29                                                unsigned long val)
  30{
  31        regs->iaoq[0] = val;
  32        regs->iaoq[1] = val + 4;
  33}
  34
  35/* Query offset/name of register from its name/offset */
  36extern int regs_query_register_offset(const char *name);
  37extern const char *regs_query_register_name(unsigned int offset);
  38#define MAX_REG_OFFSET (offsetof(struct pt_regs, ipsw))
  39
  40#define kernel_stack_pointer(regs) ((regs)->gr[30])
  41
  42static inline unsigned long regs_get_register(struct pt_regs *regs,
  43                                              unsigned int offset)
  44{
  45        if (unlikely(offset > MAX_REG_OFFSET))
  46                return 0;
  47        return *(unsigned long *)((unsigned long)regs + offset);
  48}
  49
  50unsigned long regs_get_kernel_stack_nth(struct pt_regs *regs, unsigned int n);
  51int regs_within_kernel_stack(struct pt_regs *regs, unsigned long addr);
  52
  53#endif
  54