1/* 2 * This program is used to generate definitions needed by 3 * assembly language modules. 4 * 5 * We use the technique used in the OSF Mach kernel code: 6 * generate asm statements containing #defines, 7 * compile this file to assembler, and then extract the 8 * #defines from the assembly-language output. 9 */ 10 11#include <linux/stddef.h> 12#include <linux/sched.h> 13#include <linux/kernel_stat.h> 14#include <linux/ptrace.h> 15#include <linux/hardirq.h> 16#include <asm/irq.h> 17#include <asm/errno.h> 18 19#define DEFINE(sym, val) \ 20 asm volatile("\n->" #sym " %0 " #val : : "i" (val)) 21 22#define BLANK() asm volatile("\n->" : : ) 23 24int main (void) 25{ 26 /* offsets into the task struct */ 27 DEFINE (TASK_STATE, offsetof (struct task_struct, state)); 28 DEFINE (TASK_FLAGS, offsetof (struct task_struct, flags)); 29 DEFINE (TASK_PTRACE, offsetof (struct task_struct, ptrace)); 30 DEFINE (TASK_BLOCKED, offsetof (struct task_struct, blocked)); 31 DEFINE (TASK_THREAD, offsetof (struct task_struct, thread)); 32 DEFINE (TASK_THREAD_INFO, offsetof (struct task_struct, stack)); 33 DEFINE (TASK_MM, offsetof (struct task_struct, mm)); 34 DEFINE (TASK_ACTIVE_MM, offsetof (struct task_struct, active_mm)); 35 DEFINE (TASK_PID, offsetof (struct task_struct, pid)); 36 37 /* offsets into the kernel_stat struct */ 38 DEFINE (STAT_IRQ, offsetof (struct kernel_stat, irqs)); 39 40 41 /* signal defines */ 42 DEFINE (SIGSEGV, SIGSEGV); 43 DEFINE (SEGV_MAPERR, SEGV_MAPERR); 44 DEFINE (SIGTRAP, SIGTRAP); 45 DEFINE (SIGCHLD, SIGCHLD); 46 DEFINE (SIGILL, SIGILL); 47 DEFINE (TRAP_TRACE, TRAP_TRACE); 48 49 /* ptrace flag bits */ 50 DEFINE (PT_PTRACED, PT_PTRACED); 51 DEFINE (PT_DTRACE, PT_DTRACE); 52 53 /* error values */ 54 DEFINE (ENOSYS, ENOSYS); 55 56 /* clone flag bits */ 57 DEFINE (CLONE_VFORK, CLONE_VFORK); 58 DEFINE (CLONE_VM, CLONE_VM); 59 60 return 0; 61} 62