forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
156 lines
3.4 KiB
156 lines
3.4 KiB
/* SPDX-License-Identifier: GPL-2.0-only */ |
|
/* |
|
* Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com) |
|
*/ |
|
|
|
#ifndef _ASM_ARC_UNWIND_H |
|
#define _ASM_ARC_UNWIND_H |
|
|
|
#ifdef CONFIG_ARC_DW2_UNWIND |
|
|
|
#include <linux/sched.h> |
|
|
|
struct arc700_regs { |
|
unsigned long r0; |
|
unsigned long r1; |
|
unsigned long r2; |
|
unsigned long r3; |
|
unsigned long r4; |
|
unsigned long r5; |
|
unsigned long r6; |
|
unsigned long r7; |
|
unsigned long r8; |
|
unsigned long r9; |
|
unsigned long r10; |
|
unsigned long r11; |
|
unsigned long r12; |
|
unsigned long r13; |
|
unsigned long r14; |
|
unsigned long r15; |
|
unsigned long r16; |
|
unsigned long r17; |
|
unsigned long r18; |
|
unsigned long r19; |
|
unsigned long r20; |
|
unsigned long r21; |
|
unsigned long r22; |
|
unsigned long r23; |
|
unsigned long r24; |
|
unsigned long r25; |
|
unsigned long r26; |
|
unsigned long r27; /* fp */ |
|
unsigned long r28; /* sp */ |
|
unsigned long r29; |
|
unsigned long r30; |
|
unsigned long r31; /* blink */ |
|
unsigned long r63; /* pc */ |
|
}; |
|
|
|
struct unwind_frame_info { |
|
struct arc700_regs regs; |
|
struct task_struct *task; |
|
unsigned call_frame:1; |
|
}; |
|
|
|
#define UNW_PC(frame) ((frame)->regs.r63) |
|
#define UNW_SP(frame) ((frame)->regs.r28) |
|
#define UNW_BLINK(frame) ((frame)->regs.r31) |
|
|
|
/* Rajesh FIXME */ |
|
#ifdef CONFIG_FRAME_POINTER |
|
#define UNW_FP(frame) ((frame)->regs.r27) |
|
#define FRAME_RETADDR_OFFSET 4 |
|
#define FRAME_LINK_OFFSET 0 |
|
#define STACK_BOTTOM_UNW(tsk) STACK_LIMIT((tsk)->thread.ksp) |
|
#define STACK_TOP_UNW(tsk) ((tsk)->thread.ksp) |
|
#else |
|
#define UNW_FP(frame) ((void)(frame), 0) |
|
#endif |
|
|
|
#define STACK_LIMIT(ptr) (((ptr) - 1) & ~(THREAD_SIZE - 1)) |
|
|
|
#define UNW_REGISTER_INFO \ |
|
PTREGS_INFO(r0), \ |
|
PTREGS_INFO(r1), \ |
|
PTREGS_INFO(r2), \ |
|
PTREGS_INFO(r3), \ |
|
PTREGS_INFO(r4), \ |
|
PTREGS_INFO(r5), \ |
|
PTREGS_INFO(r6), \ |
|
PTREGS_INFO(r7), \ |
|
PTREGS_INFO(r8), \ |
|
PTREGS_INFO(r9), \ |
|
PTREGS_INFO(r10), \ |
|
PTREGS_INFO(r11), \ |
|
PTREGS_INFO(r12), \ |
|
PTREGS_INFO(r13), \ |
|
PTREGS_INFO(r14), \ |
|
PTREGS_INFO(r15), \ |
|
PTREGS_INFO(r16), \ |
|
PTREGS_INFO(r17), \ |
|
PTREGS_INFO(r18), \ |
|
PTREGS_INFO(r19), \ |
|
PTREGS_INFO(r20), \ |
|
PTREGS_INFO(r21), \ |
|
PTREGS_INFO(r22), \ |
|
PTREGS_INFO(r23), \ |
|
PTREGS_INFO(r24), \ |
|
PTREGS_INFO(r25), \ |
|
PTREGS_INFO(r26), \ |
|
PTREGS_INFO(r27), \ |
|
PTREGS_INFO(r28), \ |
|
PTREGS_INFO(r29), \ |
|
PTREGS_INFO(r30), \ |
|
PTREGS_INFO(r31), \ |
|
PTREGS_INFO(r63) |
|
|
|
#define UNW_DEFAULT_RA(raItem, dataAlign) \ |
|
((raItem).where == Memory && !((raItem).value * (dataAlign) + 4)) |
|
|
|
extern int arc_unwind(struct unwind_frame_info *frame); |
|
extern void arc_unwind_init(void); |
|
extern void *unwind_add_table(struct module *module, const void *table_start, |
|
unsigned long table_size); |
|
extern void unwind_remove_table(void *handle, int init_only); |
|
|
|
static inline int |
|
arch_unwind_init_running(struct unwind_frame_info *info, |
|
int (*callback) (struct unwind_frame_info *info, |
|
void *arg), |
|
void *arg) |
|
{ |
|
return 0; |
|
} |
|
|
|
static inline int arch_unw_user_mode(const struct unwind_frame_info *info) |
|
{ |
|
return 0; |
|
} |
|
|
|
static inline void arch_unw_init_blocked(struct unwind_frame_info *info) |
|
{ |
|
return; |
|
} |
|
|
|
static inline void arch_unw_init_frame_info(struct unwind_frame_info *info, |
|
struct pt_regs *regs) |
|
{ |
|
return; |
|
} |
|
|
|
#else |
|
|
|
#define UNW_PC(frame) ((void)(frame), 0) |
|
#define UNW_SP(frame) ((void)(frame), 0) |
|
#define UNW_FP(frame) ((void)(frame), 0) |
|
|
|
static inline void arc_unwind_init(void) |
|
{ |
|
} |
|
|
|
#define unwind_add_table(a, b, c) |
|
#define unwind_remove_table(a, b) |
|
|
|
#endif /* CONFIG_ARC_DW2_UNWIND */ |
|
|
|
#endif /* _ASM_ARC_UNWIND_H */
|
|
|