2 * File: arch/blackfin/kernel/asm-offsets.c
7 * Description: generate definitions needed by assembly language modules.
10 * Copyright 2004-2006 Analog Devices Inc.
12 * Bugs: Enter bugs at http://blackfin.uclinux.org/
14 * This program is free software; you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License as published by
16 * the Free Software Foundation; either version 2 of the License, or
17 * (at your option) any later version.
19 * This program is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 * GNU General Public License for more details.
24 * You should have received a copy of the GNU General Public License
25 * along with this program; if not, see the file COPYING, or write
26 * to the Free Software Foundation, Inc.,
27 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
30 #include <linux/stddef.h>
31 #include <linux/sched.h>
32 #include <linux/kernel_stat.h>
33 #include <linux/ptrace.h>
34 #include <linux/hardirq.h>
35 #include <linux/irq.h>
36 #include <linux/thread_info.h>
38 #define DEFINE(sym, val) asm volatile("\n->" #sym " %0 " #val : : "i" (val))
42 /* offsets into the task struct */
43 DEFINE(TASK_STATE
, offsetof(struct task_struct
, state
));
44 DEFINE(TASK_FLAGS
, offsetof(struct task_struct
, flags
));
45 DEFINE(TASK_PTRACE
, offsetof(struct task_struct
, ptrace
));
46 DEFINE(TASK_BLOCKED
, offsetof(struct task_struct
, blocked
));
47 DEFINE(TASK_THREAD
, offsetof(struct task_struct
, thread
));
48 DEFINE(TASK_THREAD_INFO
, offsetof(struct task_struct
, stack
));
49 DEFINE(TASK_MM
, offsetof(struct task_struct
, mm
));
50 DEFINE(TASK_ACTIVE_MM
, offsetof(struct task_struct
, active_mm
));
51 DEFINE(TASK_SIGPENDING
, offsetof(struct task_struct
, pending
));
53 /* offsets into the irq_cpustat_t struct */
54 DEFINE(CPUSTAT_SOFTIRQ_PENDING
,
55 offsetof(irq_cpustat_t
, __softirq_pending
));
57 /* offsets into the thread struct */
58 DEFINE(THREAD_KSP
, offsetof(struct thread_struct
, ksp
));
59 DEFINE(THREAD_USP
, offsetof(struct thread_struct
, usp
));
60 DEFINE(THREAD_SR
, offsetof(struct thread_struct
, seqstat
));
61 DEFINE(PT_SR
, offsetof(struct thread_struct
, seqstat
));
62 DEFINE(THREAD_ESP0
, offsetof(struct thread_struct
, esp0
));
63 DEFINE(THREAD_PC
, offsetof(struct thread_struct
, pc
));
64 DEFINE(KERNEL_STACK_SIZE
, THREAD_SIZE
);
66 /* offsets into the pt_regs */
67 DEFINE(PT_ORIG_P0
, offsetof(struct pt_regs
, orig_p0
));
68 DEFINE(PT_ORIG_PC
, offsetof(struct pt_regs
, orig_pc
));
69 DEFINE(PT_R0
, offsetof(struct pt_regs
, r0
));
70 DEFINE(PT_R1
, offsetof(struct pt_regs
, r1
));
71 DEFINE(PT_R2
, offsetof(struct pt_regs
, r2
));
72 DEFINE(PT_R3
, offsetof(struct pt_regs
, r3
));
73 DEFINE(PT_R4
, offsetof(struct pt_regs
, r4
));
74 DEFINE(PT_R5
, offsetof(struct pt_regs
, r5
));
75 DEFINE(PT_R6
, offsetof(struct pt_regs
, r6
));
76 DEFINE(PT_R7
, offsetof(struct pt_regs
, r7
));
78 DEFINE(PT_P0
, offsetof(struct pt_regs
, p0
));
79 DEFINE(PT_P1
, offsetof(struct pt_regs
, p1
));
80 DEFINE(PT_P2
, offsetof(struct pt_regs
, p2
));
81 DEFINE(PT_P3
, offsetof(struct pt_regs
, p3
));
82 DEFINE(PT_P4
, offsetof(struct pt_regs
, p4
));
83 DEFINE(PT_P5
, offsetof(struct pt_regs
, p5
));
85 DEFINE(PT_FP
, offsetof(struct pt_regs
, fp
));
86 DEFINE(PT_USP
, offsetof(struct pt_regs
, usp
));
87 DEFINE(PT_I0
, offsetof(struct pt_regs
, i0
));
88 DEFINE(PT_I1
, offsetof(struct pt_regs
, i1
));
89 DEFINE(PT_I2
, offsetof(struct pt_regs
, i2
));
90 DEFINE(PT_I3
, offsetof(struct pt_regs
, i3
));
91 DEFINE(PT_M0
, offsetof(struct pt_regs
, m0
));
92 DEFINE(PT_M1
, offsetof(struct pt_regs
, m1
));
93 DEFINE(PT_M2
, offsetof(struct pt_regs
, m2
));
94 DEFINE(PT_M3
, offsetof(struct pt_regs
, m3
));
95 DEFINE(PT_L0
, offsetof(struct pt_regs
, l0
));
96 DEFINE(PT_L1
, offsetof(struct pt_regs
, l1
));
97 DEFINE(PT_L2
, offsetof(struct pt_regs
, l2
));
98 DEFINE(PT_L3
, offsetof(struct pt_regs
, l3
));
99 DEFINE(PT_B0
, offsetof(struct pt_regs
, b0
));
100 DEFINE(PT_B1
, offsetof(struct pt_regs
, b1
));
101 DEFINE(PT_B2
, offsetof(struct pt_regs
, b2
));
102 DEFINE(PT_B3
, offsetof(struct pt_regs
, b3
));
103 DEFINE(PT_A0X
, offsetof(struct pt_regs
, a0x
));
104 DEFINE(PT_A0W
, offsetof(struct pt_regs
, a0w
));
105 DEFINE(PT_A1X
, offsetof(struct pt_regs
, a1x
));
106 DEFINE(PT_A1W
, offsetof(struct pt_regs
, a1w
));
107 DEFINE(PT_LC0
, offsetof(struct pt_regs
, lc0
));
108 DEFINE(PT_LC1
, offsetof(struct pt_regs
, lc1
));
109 DEFINE(PT_LT0
, offsetof(struct pt_regs
, lt0
));
110 DEFINE(PT_LT1
, offsetof(struct pt_regs
, lt1
));
111 DEFINE(PT_LB0
, offsetof(struct pt_regs
, lb0
));
112 DEFINE(PT_LB1
, offsetof(struct pt_regs
, lb1
));
113 DEFINE(PT_ASTAT
, offsetof(struct pt_regs
, astat
));
114 DEFINE(PT_RESERVED
, offsetof(struct pt_regs
, reserved
));
115 DEFINE(PT_RETS
, offsetof(struct pt_regs
, rets
));
116 DEFINE(PT_PC
, offsetof(struct pt_regs
, pc
));
117 DEFINE(PT_RETX
, offsetof(struct pt_regs
, retx
));
118 DEFINE(PT_RETN
, offsetof(struct pt_regs
, retn
));
119 DEFINE(PT_RETE
, offsetof(struct pt_regs
, rete
));
120 DEFINE(PT_SEQSTAT
, offsetof(struct pt_regs
, seqstat
));
121 DEFINE(PT_SYSCFG
, offsetof(struct pt_regs
, syscfg
));
122 DEFINE(PT_IPEND
, offsetof(struct pt_regs
, ipend
));
123 DEFINE(SIZEOF_PTREGS
, sizeof(struct pt_regs
));
124 DEFINE(PT_TEXT_ADDR
, sizeof(struct pt_regs
)); /* Needed by gdb */
125 DEFINE(PT_TEXT_END_ADDR
, 4 + sizeof(struct pt_regs
));/* Needed by gdb */
126 DEFINE(PT_DATA_ADDR
, 8 + sizeof(struct pt_regs
)); /* Needed by gdb */
127 DEFINE(PT_FDPIC_EXEC
, 12 + sizeof(struct pt_regs
)); /* Needed by gdb */
128 DEFINE(PT_FDPIC_INTERP
, 16 + sizeof(struct pt_regs
));/* Needed by gdb */
131 DEFINE(SIGSEGV
, SIGSEGV
);
132 DEFINE(SIGTRAP
, SIGTRAP
);