From: Al Viro The next group of helpers is a bit trickier - they want the constants similar to those in user-offsets.h, but we need target sc.h for it. So we can't put that into user-offsets (sc.h depends on it) and need the second generated header for that stuff (kernel-offsets.h. BFD... Signed-off-by: Al Viro Signed-off-by: Jeff Dike Cc: Paolo 'Blaisorblade' Giarrusso Signed-off-by: Andrew Morton --- arch/um/Makefile | 13 +++++++++++++ arch/um/include/common-offsets.h | 14 ++++++++++++++ arch/um/sys-i386/kernel-offsets.c | 25 +++++++++++++++++++++++++ arch/um/sys-x86_64/kernel-offsets.c | 24 ++++++++++++++++++++++++ 4 files changed, 76 insertions(+) diff -puN /dev/null arch/um/include/common-offsets.h --- /dev/null 2003-09-15 06:40:47.000000000 -0700 +++ 25-akpm/arch/um/include/common-offsets.h 2005-05-02 19:01:24.000000000 -0700 @@ -0,0 +1,14 @@ +/* for use by sys-$SUBARCH/kernel-offsets.c */ + +OFFSET(TASK_REGS, task_struct, thread.regs); +OFFSET(TASK_PID, task_struct, pid); +DEFINE(UM_KERN_PAGE_SIZE, PAGE_SIZE); +DEFINE(UM_NSEC_PER_SEC, NSEC_PER_SEC); +DEFINE_STR(UM_KERN_EMERG, KERN_EMERG); +DEFINE_STR(UM_KERN_ALERT, KERN_ALERT); +DEFINE_STR(UM_KERN_CRIT, KERN_CRIT); +DEFINE_STR(UM_KERN_ERR, KERN_ERR); +DEFINE_STR(UM_KERN_WARNING, KERN_WARNING); +DEFINE_STR(UM_KERN_NOTICE, KERN_NOTICE); +DEFINE_STR(UM_KERN_INFO, KERN_INFO); +DEFINE_STR(UM_KERN_DEBUG, KERN_DEBUG); diff -puN arch/um/Makefile~uml-cross-build-support-kernel_offsets arch/um/Makefile --- 25/arch/um/Makefile~uml-cross-build-support-kernel_offsets 2005-05-02 19:01:24.000000000 -0700 +++ 25-akpm/arch/um/Makefile 2005-05-02 19:01:24.000000000 -0700 @@ -174,6 +174,19 @@ $(ARCH_DIR)/user-offsets.h: $(ARCH_DIR)/ CLEAN_FILES += $(ARCH_DIR)/user-offsets.s $(ARCH_DIR)/user-offsets.h +$(ARCH_DIR)/kernel-offsets.s: $(ARCH_DIR)/sys-$(SUBARCH)/kernel-offsets.c \ + $(ARCH_SYMLINKS) \ + $(SYS_DIR)/sc.h \ + include/asm include/linux/version.h \ + include/config/MARKER \ + $(ARCH_DIR)/include/user_constants.h + $(CC) $(CFLAGS) $(NOSTDINC_FLAGS) $(CPPFLAGS) -S -o $@ $< + +$(ARCH_DIR)/kernel-offsets.h: $(ARCH_DIR)/kernel-offsets.s + $(call filechk,gen-asm-offsets) + +CLEAN_FILES += $(ARCH_DIR)/kernel-offsets.s $(ARCH_DIR)/kernel-offsets.h + $(ARCH_DIR)/include/task.h: $(ARCH_DIR)/util/mk_task $(call filechk,gen_header) diff -puN /dev/null arch/um/sys-i386/kernel-offsets.c --- /dev/null 2003-09-15 06:40:47.000000000 -0700 +++ 25-akpm/arch/um/sys-i386/kernel-offsets.c 2005-05-02 19:01:24.000000000 -0700 @@ -0,0 +1,25 @@ +#include +#include +#include +#include +#include + +#define DEFINE(sym, val) \ + asm volatile("\n->" #sym " %0 " #val : : "i" (val)) + +#define STR(x) #x +#define DEFINE_STR(sym, val) asm volatile("\n->" #sym " " STR(val) " " #val: : ) + +#define BLANK() asm volatile("\n->" : : ) + +#define OFFSET(sym, str, mem) \ + DEFINE(sym, offsetof(struct str, mem)); + +void foo(void) +{ + OFFSET(TASK_DEBUGREGS, task_struct, thread.arch.debugregs); +#ifdef CONFIG_MODE_TT + OFFSET(TASK_EXTERN_PID, task_struct, thread.mode.tt.extern_pid); +#endif +#include +} diff -puN /dev/null arch/um/sys-x86_64/kernel-offsets.c --- /dev/null 2003-09-15 06:40:47.000000000 -0700 +++ 25-akpm/arch/um/sys-x86_64/kernel-offsets.c 2005-05-02 19:01:24.000000000 -0700 @@ -0,0 +1,24 @@ +#include +#include +#include +#include +#include + +#define DEFINE(sym, val) \ + asm volatile("\n->" #sym " %0 " #val : : "i" (val)) + +#define DEFINE_STR1(x) #x +#define DEFINE_STR(sym, val) asm volatile("\n->" #sym " " DEFINE_STR1(val) " " #val: : ) + +#define BLANK() asm volatile("\n->" : : ) + +#define OFFSET(sym, str, mem) \ + DEFINE(sym, offsetof(struct str, mem)); + +void foo(void) +{ +#ifdef CONFIG_MODE_TT + OFFSET(TASK_EXTERN_PID, task_struct, thread.mode.tt.extern_pid); +#endif +#include +} _