root/arch/arc/include/asm/unwind.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. arch_unwind_init_running
  2. arch_unw_user_mode
  3. arch_unw_init_blocked
  4. arch_unw_init_frame_info
  5. arc_unwind_init

   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 
  13 struct 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 
  49 struct 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 
 110 extern int arc_unwind(struct unwind_frame_info *frame);
 111 extern void arc_unwind_init(void);
 112 extern void *unwind_add_table(struct module *module, const void *table_start,
 113                               unsigned long table_size);
 114 extern void unwind_remove_table(void *handle, int init_only);
 115 
 116 static inline int
 117 arch_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 
 125 static inline int arch_unw_user_mode(const struct unwind_frame_info *info)
 126 {
 127         return 0;
 128 }
 129 
 130 static inline void arch_unw_init_blocked(struct unwind_frame_info *info)
 131 {
 132         return;
 133 }
 134 
 135 static 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 
 147 static 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 */

/* [<][>][^][v][top][bottom][index][help] */