Linux Audio

Check our new training course

Buildroot integration, development and maintenance

Need a Buildroot system for your embedded project?
Loading...
v5.14.15
  1/* SPDX-License-Identifier: GPL-2.0-only */
  2/*
  3 * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
 
 
 
 
  4 */
  5
  6#ifndef _ASM_ARC_UNWIND_H
  7#define _ASM_ARC_UNWIND_H
  8
  9#ifdef CONFIG_ARC_DW2_UNWIND
 10
 11#include <linux/sched.h>
 12
 13struct arc700_regs {
 14	unsigned long r0;
 15	unsigned long r1;
 16	unsigned long r2;
 17	unsigned long r3;
 18	unsigned long r4;
 19	unsigned long r5;
 20	unsigned long r6;
 21	unsigned long r7;
 22	unsigned long r8;
 23	unsigned long r9;
 24	unsigned long r10;
 25	unsigned long r11;
 26	unsigned long r12;
 27	unsigned long r13;
 28	unsigned long r14;
 29	unsigned long r15;
 30	unsigned long r16;
 31	unsigned long r17;
 32	unsigned long r18;
 33	unsigned long r19;
 34	unsigned long r20;
 35	unsigned long r21;
 36	unsigned long r22;
 37	unsigned long r23;
 38	unsigned long r24;
 39	unsigned long r25;
 40	unsigned long r26;
 41	unsigned long r27;	/* fp */
 42	unsigned long r28;	/* sp */
 43	unsigned long r29;
 44	unsigned long r30;
 45	unsigned long r31;	/* blink */
 46	unsigned long r63;	/* pc */
 47};
 48
 49struct unwind_frame_info {
 50	struct arc700_regs regs;
 51	struct task_struct *task;
 52	unsigned call_frame:1;
 53};
 54
 55#define UNW_PC(frame)		((frame)->regs.r63)
 56#define UNW_SP(frame)		((frame)->regs.r28)
 57#define UNW_BLINK(frame)	((frame)->regs.r31)
 58
 59/* Rajesh FIXME */
 60#ifdef CONFIG_FRAME_POINTER
 61#define UNW_FP(frame)		((frame)->regs.r27)
 62#define FRAME_RETADDR_OFFSET	4
 63#define FRAME_LINK_OFFSET	0
 64#define STACK_BOTTOM_UNW(tsk)	STACK_LIMIT((tsk)->thread.ksp)
 65#define STACK_TOP_UNW(tsk)	((tsk)->thread.ksp)
 66#else
 67#define UNW_FP(frame)		((void)(frame), 0)
 68#endif
 69
 70#define STACK_LIMIT(ptr)	(((ptr) - 1) & ~(THREAD_SIZE - 1))
 71
 72#define UNW_REGISTER_INFO \
 73	PTREGS_INFO(r0), \
 74	PTREGS_INFO(r1), \
 75	PTREGS_INFO(r2), \
 76	PTREGS_INFO(r3), \
 77	PTREGS_INFO(r4), \
 78	PTREGS_INFO(r5), \
 79	PTREGS_INFO(r6), \
 80	PTREGS_INFO(r7), \
 81	PTREGS_INFO(r8), \
 82	PTREGS_INFO(r9), \
 83	PTREGS_INFO(r10), \
 84	PTREGS_INFO(r11), \
 85	PTREGS_INFO(r12), \
 86	PTREGS_INFO(r13), \
 87	PTREGS_INFO(r14), \
 88	PTREGS_INFO(r15), \
 89	PTREGS_INFO(r16), \
 90	PTREGS_INFO(r17), \
 91	PTREGS_INFO(r18), \
 92	PTREGS_INFO(r19), \
 93	PTREGS_INFO(r20), \
 94	PTREGS_INFO(r21), \
 95	PTREGS_INFO(r22), \
 96	PTREGS_INFO(r23), \
 97	PTREGS_INFO(r24), \
 98	PTREGS_INFO(r25), \
 99	PTREGS_INFO(r26), \
100	PTREGS_INFO(r27), \
101	PTREGS_INFO(r28), \
102	PTREGS_INFO(r29), \
103	PTREGS_INFO(r30), \
104	PTREGS_INFO(r31), \
105	PTREGS_INFO(r63)
106
107#define UNW_DEFAULT_RA(raItem, dataAlign) \
108	((raItem).where == Memory && !((raItem).value * (dataAlign) + 4))
109
110extern int arc_unwind(struct unwind_frame_info *frame);
111extern void arc_unwind_init(void);
112extern void *unwind_add_table(struct module *module, const void *table_start,
113			      unsigned long table_size);
114extern void unwind_remove_table(void *handle, int init_only);
115
116static inline int
117arch_unwind_init_running(struct unwind_frame_info *info,
118			 int (*callback) (struct unwind_frame_info *info,
119					  void *arg),
120			 void *arg)
121{
122	return 0;
123}
124
125static inline int arch_unw_user_mode(const struct unwind_frame_info *info)
126{
127	return 0;
128}
129
130static inline void arch_unw_init_blocked(struct unwind_frame_info *info)
131{
132	return;
133}
134
135static inline void arch_unw_init_frame_info(struct unwind_frame_info *info,
136					    struct pt_regs *regs)
137{
138	return;
139}
140
141#else
142
143#define UNW_PC(frame) ((void)(frame), 0)
144#define UNW_SP(frame) ((void)(frame), 0)
145#define UNW_FP(frame) ((void)(frame), 0)
146
147static inline void arc_unwind_init(void)
148{
149}
150
151#define unwind_add_table(a, b, c)
152#define unwind_remove_table(a, b)
153
154#endif /* CONFIG_ARC_DW2_UNWIND */
155
156#endif /* _ASM_ARC_UNWIND_H */
v4.17
 
  1/*
  2 * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
  3 *
  4 * This program is free software; you can redistribute it and/or modify
  5 * it under the terms of the GNU General Public License version 2 as
  6 * published by the Free Software Foundation.
  7 */
  8
  9#ifndef _ASM_ARC_UNWIND_H
 10#define _ASM_ARC_UNWIND_H
 11
 12#ifdef CONFIG_ARC_DW2_UNWIND
 13
 14#include <linux/sched.h>
 15
 16struct arc700_regs {
 17	unsigned long r0;
 18	unsigned long r1;
 19	unsigned long r2;
 20	unsigned long r3;
 21	unsigned long r4;
 22	unsigned long r5;
 23	unsigned long r6;
 24	unsigned long r7;
 25	unsigned long r8;
 26	unsigned long r9;
 27	unsigned long r10;
 28	unsigned long r11;
 29	unsigned long r12;
 30	unsigned long r13;
 31	unsigned long r14;
 32	unsigned long r15;
 33	unsigned long r16;
 34	unsigned long r17;
 35	unsigned long r18;
 36	unsigned long r19;
 37	unsigned long r20;
 38	unsigned long r21;
 39	unsigned long r22;
 40	unsigned long r23;
 41	unsigned long r24;
 42	unsigned long r25;
 43	unsigned long r26;
 44	unsigned long r27;	/* fp */
 45	unsigned long r28;	/* sp */
 46	unsigned long r29;
 47	unsigned long r30;
 48	unsigned long r31;	/* blink */
 49	unsigned long r63;	/* pc */
 50};
 51
 52struct unwind_frame_info {
 53	struct arc700_regs regs;
 54	struct task_struct *task;
 55	unsigned call_frame:1;
 56};
 57
 58#define UNW_PC(frame)		((frame)->regs.r63)
 59#define UNW_SP(frame)		((frame)->regs.r28)
 60#define UNW_BLINK(frame)	((frame)->regs.r31)
 61
 62/* Rajesh FIXME */
 63#ifdef CONFIG_FRAME_POINTER
 64#define UNW_FP(frame)		((frame)->regs.r27)
 65#define FRAME_RETADDR_OFFSET	4
 66#define FRAME_LINK_OFFSET	0
 67#define STACK_BOTTOM_UNW(tsk)	STACK_LIMIT((tsk)->thread.ksp)
 68#define STACK_TOP_UNW(tsk)	((tsk)->thread.ksp)
 69#else
 70#define UNW_FP(frame)		((void)(frame), 0)
 71#endif
 72
 73#define STACK_LIMIT(ptr)	(((ptr) - 1) & ~(THREAD_SIZE - 1))
 74
 75#define UNW_REGISTER_INFO \
 76	PTREGS_INFO(r0), \
 77	PTREGS_INFO(r1), \
 78	PTREGS_INFO(r2), \
 79	PTREGS_INFO(r3), \
 80	PTREGS_INFO(r4), \
 81	PTREGS_INFO(r5), \
 82	PTREGS_INFO(r6), \
 83	PTREGS_INFO(r7), \
 84	PTREGS_INFO(r8), \
 85	PTREGS_INFO(r9), \
 86	PTREGS_INFO(r10), \
 87	PTREGS_INFO(r11), \
 88	PTREGS_INFO(r12), \
 89	PTREGS_INFO(r13), \
 90	PTREGS_INFO(r14), \
 91	PTREGS_INFO(r15), \
 92	PTREGS_INFO(r16), \
 93	PTREGS_INFO(r17), \
 94	PTREGS_INFO(r18), \
 95	PTREGS_INFO(r19), \
 96	PTREGS_INFO(r20), \
 97	PTREGS_INFO(r21), \
 98	PTREGS_INFO(r22), \
 99	PTREGS_INFO(r23), \
100	PTREGS_INFO(r24), \
101	PTREGS_INFO(r25), \
102	PTREGS_INFO(r26), \
103	PTREGS_INFO(r27), \
104	PTREGS_INFO(r28), \
105	PTREGS_INFO(r29), \
106	PTREGS_INFO(r30), \
107	PTREGS_INFO(r31), \
108	PTREGS_INFO(r63)
109
110#define UNW_DEFAULT_RA(raItem, dataAlign) \
111	((raItem).where == Memory && !((raItem).value * (dataAlign) + 4))
112
113extern int arc_unwind(struct unwind_frame_info *frame);
114extern void arc_unwind_init(void);
115extern void *unwind_add_table(struct module *module, const void *table_start,
116			      unsigned long table_size);
117extern void unwind_remove_table(void *handle, int init_only);
118
119static inline int
120arch_unwind_init_running(struct unwind_frame_info *info,
121			 int (*callback) (struct unwind_frame_info *info,
122					  void *arg),
123			 void *arg)
124{
125	return 0;
126}
127
128static inline int arch_unw_user_mode(const struct unwind_frame_info *info)
129{
130	return 0;
131}
132
133static inline void arch_unw_init_blocked(struct unwind_frame_info *info)
134{
135	return;
136}
137
138static inline void arch_unw_init_frame_info(struct unwind_frame_info *info,
139					    struct pt_regs *regs)
140{
141	return;
142}
143
144#else
145
146#define UNW_PC(frame) ((void)(frame), 0)
147#define UNW_SP(frame) ((void)(frame), 0)
148#define UNW_FP(frame) ((void)(frame), 0)
149
150static inline void arc_unwind_init(void)
151{
152}
153
154#define unwind_add_table(a, b, c)
155#define unwind_remove_table(a, b)
156
157#endif /* CONFIG_ARC_DW2_UNWIND */
158
159#endif /* _ASM_ARC_UNWIND_H */