1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * OpenRISC asm-offsets.c 4 * 5 * Linux architectural port borrowing liberally from similar works of 6 * others. All original copyrights apply as per the original source 7 * declaration. 8 * 9 * Modifications for the OpenRISC architecture: 10 * Copyright (C) 2003 Matjaz Breskvar <phoenix@bsemi.com> 11 * Copyright (C) 2010-2011 Jonas Bonn <jonas@southpole.se> 12 * 13 * This program is used to generate definitions needed by 14 * assembly language modules. 15 * 16 * We use the technique used in the OSF Mach kernel code: 17 * generate asm statements containing #defines, 18 * compile this file to assembler, and then extract the 19 * #defines from the assembly-language output. 20 */ 21 22 #include <linux/signal.h> 23 #include <linux/sched.h> 24 #include <linux/kernel.h> 25 #include <linux/errno.h> 26 #include <linux/string.h> 27 #include <linux/types.h> 28 #include <linux/ptrace.h> 29 #include <linux/mman.h> 30 #include <linux/mm.h> 31 #include <linux/io.h> 32 #include <linux/thread_info.h> 33 #include <linux/kbuild.h> 34 #include <asm/page.h> 35 #include <asm/processor.h> 36 37 int main(void) 38 { 39 /* offsets into the task_struct */ 40 DEFINE(TASK_STATE, offsetof(struct task_struct, state)); 41 DEFINE(TASK_FLAGS, offsetof(struct task_struct, flags)); 42 DEFINE(TASK_PTRACE, offsetof(struct task_struct, ptrace)); 43 DEFINE(TASK_THREAD, offsetof(struct task_struct, thread)); 44 DEFINE(TASK_MM, offsetof(struct task_struct, mm)); 45 DEFINE(TASK_ACTIVE_MM, offsetof(struct task_struct, active_mm)); 46 47 /* offsets into thread_info */ 48 DEFINE(TI_TASK, offsetof(struct thread_info, task)); 49 DEFINE(TI_FLAGS, offsetof(struct thread_info, flags)); 50 DEFINE(TI_PREEMPT, offsetof(struct thread_info, preempt_count)); 51 DEFINE(TI_KSP, offsetof(struct thread_info, ksp)); 52 53 DEFINE(PT_SIZE, sizeof(struct pt_regs)); 54 55 /* Interrupt register frame */ 56 DEFINE(STACK_FRAME_OVERHEAD, STACK_FRAME_OVERHEAD); 57 DEFINE(INT_FRAME_SIZE, STACK_FRAME_OVERHEAD + sizeof(struct pt_regs)); 58 59 DEFINE(NUM_USER_SEGMENTS, TASK_SIZE >> 28); 60 return 0; 61 } 62