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