forked from Minki/linux
2ce36bfa6a
This patch adds arch ptrace implementation, stack dump and bug.h. Signed-off-by: Guo Ren <ren_guo@c-sky.com> Reviewed-by: Arnd Bergmann <arnd@arndb.de>
105 lines
2.0 KiB
C
105 lines
2.0 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
// Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd.
|
|
|
|
#ifndef _CSKY_PTRACE_H
|
|
#define _CSKY_PTRACE_H
|
|
|
|
#ifndef __ASSEMBLY__
|
|
|
|
struct pt_regs {
|
|
unsigned long tls;
|
|
unsigned long lr;
|
|
unsigned long pc;
|
|
unsigned long sr;
|
|
unsigned long usp;
|
|
|
|
/*
|
|
* a0, a1, a2, a3:
|
|
* abiv1: r2, r3, r4, r5
|
|
* abiv2: r0, r1, r2, r3
|
|
*/
|
|
unsigned long orig_a0;
|
|
unsigned long a0;
|
|
unsigned long a1;
|
|
unsigned long a2;
|
|
unsigned long a3;
|
|
|
|
/*
|
|
* ABIV2: r4 ~ r13
|
|
* ABIV1: r6 ~ r14, r1
|
|
*/
|
|
unsigned long regs[10];
|
|
|
|
#if defined(__CSKYABIV2__)
|
|
/* r16 ~ r30 */
|
|
unsigned long exregs[15];
|
|
|
|
unsigned long rhi;
|
|
unsigned long rlo;
|
|
unsigned long pad; /* reserved */
|
|
#endif
|
|
};
|
|
|
|
struct user_fp {
|
|
unsigned long vr[96];
|
|
unsigned long fcr;
|
|
unsigned long fesr;
|
|
unsigned long fid;
|
|
unsigned long reserved;
|
|
};
|
|
|
|
/*
|
|
* Switch stack for switch_to after push pt_regs.
|
|
*
|
|
* ABI_CSKYV2: r4 ~ r11, r15 ~ r17, r26 ~ r30;
|
|
* ABI_CSKYV1: r8 ~ r14, r15;
|
|
*/
|
|
struct switch_stack {
|
|
#if defined(__CSKYABIV2__)
|
|
unsigned long r4;
|
|
unsigned long r5;
|
|
unsigned long r6;
|
|
unsigned long r7;
|
|
unsigned long r8;
|
|
unsigned long r9;
|
|
unsigned long r10;
|
|
unsigned long r11;
|
|
#else
|
|
unsigned long r8;
|
|
unsigned long r9;
|
|
unsigned long r10;
|
|
unsigned long r11;
|
|
unsigned long r12;
|
|
unsigned long r13;
|
|
unsigned long r14;
|
|
#endif
|
|
unsigned long r15;
|
|
#if defined(__CSKYABIV2__)
|
|
unsigned long r16;
|
|
unsigned long r17;
|
|
unsigned long r26;
|
|
unsigned long r27;
|
|
unsigned long r28;
|
|
unsigned long r29;
|
|
unsigned long r30;
|
|
#endif
|
|
};
|
|
|
|
#ifdef __KERNEL__
|
|
|
|
#define PS_S 0x80000000 /* Supervisor Mode */
|
|
|
|
#define arch_has_single_step() (1)
|
|
#define current_pt_regs() \
|
|
({ (struct pt_regs *)((char *)current_thread_info() + THREAD_SIZE) - 1; })
|
|
|
|
#define user_stack_pointer(regs) ((regs)->usp)
|
|
|
|
#define user_mode(regs) (!((regs)->sr & PS_S))
|
|
#define instruction_pointer(regs) ((regs)->pc)
|
|
#define profile_pc(regs) instruction_pointer(regs)
|
|
|
|
#endif /* __KERNEL__ */
|
|
#endif /* __ASSEMBLY__ */
|
|
#endif /* _CSKY_PTRACE_H */
|