diff -r 78da6ce942cc include/asm-generic/asm-values.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/include/asm-generic/asm-values.h Mon Dec 17 13:38:19 2007 +0100 @@ -0,0 +1,7 @@ +#define DEFINE(sym, val) \ + asm volatile("\n->" #sym " %0 " #val : : "i" (val)) + +#define BLANK() asm volatile("\n->" : : ) + +#define OFFSET(sym, str, mem) \ + DEFINE(sym, offsetof(struct str, mem)); diff -r 78da6ce942cc scripts/Makefile.asm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/Makefile.asm Tue Dec 18 10:36:48 2007 +0100 @@ -0,0 +1,29 @@ +# ========================================================================== +# Help generate definitions needed by assembly language modules. +# ========================================================================== + +include scripts/Kbuild.include + +ifndef asm-values_h + asm-values := $(shell test -e $(srctree)/$(src)/asm-values.c && echo ok) + ifneq ($(asm-values),) + asm-values_h := asm-values.h + asm-values := asm-values.s + endif +endif + +always += $(asm-values_h) +targets += $(asm-values_h) $(asm-values) +mkasm-values := $(srctree)/scripts/mkasm-values.sh + +quiet_cmd_mkasm-values = GEN $@ + cmd_mkasm-values = $(CONFIG_SHELL) $(mkasm-values) $< $@ $(2) + +quiet_cmd_cc_s_c = CC $(quiet_modtag) $@ + cmd_cc_s_c = $(CC) $(c_flags) -fverbose-asm -S -o $@ $< + +$(obj)/asm-values.h: $(obj)/asm-values.s + $(call cmd,mkasm-values,$(ASM_NS)) + +$(obj)/%.s: $(src)/%.c + $(call if_changed_dep,cc_s_c) diff -r 78da6ce942cc scripts/mkasm-values.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/mkasm-values.sh Mon Dec 17 13:38:19 2007 +0100 @@ -0,0 +1,55 @@ +#!/bin/sh + +# Input file "*.s", made by Kbuild from a "*.c" source, where values of +# interest are calculated, is processed in a suitable output header file. +# +# $1 - input filename; +# $2 - output filename; +# $3 - generate (private) file with given namespace (optional) + +set -e + +[ -z "$1" ] || [ -z "$2" ] && { + echo "$0: + +Two parameters needed. Exiting. +" + exit 1 +} + +NS=`echo $3 | tr a-z A-Z` +case $NS in + MIPS) +SED_SCRIPT=' +/^@@@/{ +s|^@@@||; +s| #.*$||; +p; +}' ;; + *) +TAB="`printf '\t'`" +SED_SCRIPT=" +/^->/{ +s|^->||; +s|^\([^ ]*\) [\$#]*\([^ ]*\) \([^$TAB]*\).*|#define \1 \2$TAB/* \3 */|; +p; +}" ;; +esac + +NS=__ASM_VALUES_${NS:=H}__ + +exec 1>$2 +echo "\ +#if !defined($NS) +#define $NS + +/* + * $2 + * was generated from + * $1 + */ +" +sed -ne "$SED_SCRIPT" $1 + +echo " +#endif"