| 1 | |
| 2 | |
| 3 | |
| 4 | |
| 5 | |
| 6 | |
| 7 | |
| 8 | |
| 9 |
|
| 10 | if [ "$KBUILD_VERBOSE" = "1" ]; then
|
| 11 | set -x
|
| 12 | fi
|
| 13 |
|
| 14 | |
| 15 | ignore="( -name SCCS -o -name BitKeeper -o -name .svn -o \
|
| 16 | -name CVS -o -name .pc -o -name .hg -o \
|
| 17 | -name .git ) \
|
| 18 | -prune -o"
|
| 19 |
|
| 20 | |
| 21 | |
| 22 | |
| 23 | if [ "${KBUILD_SRC}" = "" ]; then
|
| 24 | tree=
|
| 25 | else
|
| 26 | tree=${srctree}/
|
| 27 | fi
|
| 28 |
|
| 29 | |
| 30 | find_all_archs()
|
| 31 | {
|
| 32 | ALLSOURCE_ARCHS=""
|
| 33 | for arch in `ls ${tree}arch`; do
|
| 34 | ALLSOURCE_ARCHS="${ALLSOURCE_ARCHS} "${arch##\/}
|
| 35 | done
|
| 36 | }
|
| 37 |
|
| 38 | |
| 39 | if [ "${ALLSOURCE_ARCHS}" = "" ]; then
|
| 40 | ALLSOURCE_ARCHS=${SRCARCH}
|
| 41 | elif [ "${ALLSOURCE_ARCHS}" = "all" ]; then
|
| 42 | find_all_archs
|
| 43 | fi
|
| 44 |
|
| 45 | |
| 46 | find_arch_sources()
|
| 47 | {
|
| 48 | for i in $archincludedir; do
|
| 49 | prune="$prune -wholename $i -prune -o"
|
| 50 | done
|
| 51 | find ${tree}arch/$1 $ignore $subarchprune $prune -name "$2" -print;
|
| 52 | }
|
| 53 |
|
| 54 | |
| 55 | find_arch_include_sources()
|
| 56 | {
|
| 57 | include=$(find ${tree}arch/$1/ $subarchprune \
|
| 58 | -name include -type d -print);
|
| 59 | if [ -n "$include" ]; then
|
| 60 | archincludedir="$archincludedir $include"
|
| 61 | find $include $ignore -name "$2" -print;
|
| 62 | fi
|
| 63 | }
|
| 64 |
|
| 65 | |
| 66 | find_include_sources()
|
| 67 | {
|
| 68 | find ${tree}include $ignore -name config -prune -o -name "$1" -print;
|
| 69 | }
|
| 70 |
|
| 71 | |
| 72 | |
| 73 | find_other_sources()
|
| 74 | {
|
| 75 | find ${tree}* $ignore \
|
| 76 | \( -name include -o -name arch -o -name '.tmp_*' \) -prune -o \
|
| 77 | -name "$1" -print;
|
| 78 | }
|
| 79 |
|
| 80 | find_sources()
|
| 81 | {
|
| 82 | find_arch_sources $1 "$2"
|
| 83 | }
|
| 84 |
|
| 85 | all_sources()
|
| 86 | {
|
| 87 | find_arch_include_sources ${SRCARCH} '*.[chS]'
|
| 88 | if [ ! -z "$archinclude" ]; then
|
| 89 | find_arch_include_sources $archinclude '*.[chS]'
|
| 90 | fi
|
| 91 | find_include_sources '*.[chS]'
|
| 92 | for arch in $ALLSOURCE_ARCHS
|
| 93 | do
|
| 94 | find_sources $arch '*.[chS]'
|
| 95 | done
|
| 96 | find_other_sources '*.[chS]'
|
| 97 | }
|
| 98 |
|
| 99 | all_compiled_sources()
|
| 100 | {
|
| 101 | for i in $(all_sources); do
|
| 102 | case "$i" in
|
| 103 | *.[cS])
|
| 104 | j=${i/\.[cS]/\.o}
|
| 105 | if [ -e $j ]; then
|
| 106 | echo $i
|
| 107 | fi
|
| 108 | ;;
|
| 109 | *)
|
| 110 | echo $i
|
| 111 | ;;
|
| 112 | esac
|
| 113 | done
|
| 114 | }
|
| 115 |
|
| 116 | all_target_sources()
|
| 117 | {
|
| 118 | if [ -n "$COMPILED_SOURCE" ]; then
|
| 119 | all_compiled_sources
|
| 120 | else
|
| 121 | all_sources
|
| 122 | fi
|
| 123 | }
|
| 124 |
|
| 125 | all_kconfigs()
|
| 126 | {
|
| 127 | for arch in $ALLSOURCE_ARCHS; do
|
| 128 | find_sources $arch 'Kconfig*'
|
| 129 | done
|
| 130 | find_other_sources 'Kconfig*'
|
| 131 | }
|
| 132 |
|
| 133 | all_defconfigs()
|
| 134 | {
|
| 135 | find_sources $ALLSOURCE_ARCHS "defconfig"
|
| 136 | }
|
| 137 |
|
| 138 | docscope()
|
| 139 | {
|
| 140 | (echo \-k; echo \-q; all_target_sources) > cscope.files
|
| 141 | cscope -b -f cscope.out
|
| 142 | }
|
| 143 |
|
| 144 | dogtags()
|
| 145 | {
|
| 146 | all_target_sources | gtags -i -f -
|
| 147 | }
|
| 148 |
|
| 149 | exuberant()
|
| 150 | {
|
| 151 | all_target_sources | xargs $1 -a \
|
| 152 | -I __initdata,__exitdata,__initconst, \
|
| 153 | -I __cpuinitdata,__initdata_memblock \
|
| 154 | -I __refdata,__attribute,__maybe_unused,__always_unused \
|
| 155 | -I __acquires,__releases,__deprecated \
|
| 156 | -I __read_mostly,__aligned,____cacheline_aligned \
|
| 157 | -I ____cacheline_aligned_in_smp \
|
| 158 | -I __cacheline_aligned,__cacheline_aligned_in_smp \
|
| 159 | -I ____cacheline_internodealigned_in_smp \
|
| 160 | -I __used,__packed,__packed2__,__must_check,__must_hold \
|
| 161 | -I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL,ACPI_EXPORT_SYMBOL \
|
| 162 | -I DEFINE_TRACE,EXPORT_TRACEPOINT_SYMBOL,EXPORT_TRACEPOINT_SYMBOL_GPL \
|
| 163 | -I static,const \
|
| 164 | --extra=+f --c-kinds=+px \
|
| 165 | --regex-asm='/^(ENTRY|_GLOBAL)\(([^)]*)\).*/\2/' \
|
| 166 | --regex-c='/^SYSCALL_DEFINE[[:digit:]]?\(([^,)]*).*/sys_\1/' \
|
| 167 | --regex-c++='/^TRACE_EVENT\(([^,)]*).*/trace_\1/' \
|
| 168 | --regex-c++='/^DEFINE_EVENT\([^,)]*, *([^,)]*).*/trace_\1/' \
|
| 169 | --regex-c++='/PAGEFLAG\(([^,)]*).*/Page\1/' \
|
| 170 | --regex-c++='/PAGEFLAG\(([^,)]*).*/SetPage\1/' \
|
| 171 | --regex-c++='/PAGEFLAG\(([^,)]*).*/ClearPage\1/' \
|
| 172 | --regex-c++='/TESTSETFLAG\(([^,)]*).*/TestSetPage\1/' \
|
| 173 | --regex-c++='/TESTPAGEFLAG\(([^,)]*).*/Page\1/' \
|
| 174 | --regex-c++='/SETPAGEFLAG\(([^,)]*).*/SetPage\1/' \
|
| 175 | --regex-c++='/__SETPAGEFLAG\(([^,)]*).*/__SetPage\1/' \
|
| 176 | --regex-c++='/TESTCLEARFLAG\(([^,)]*).*/TestClearPage\1/' \
|
| 177 | --regex-c++='/__TESTCLEARFLAG\(([^,)]*).*/TestClearPage\1/' \
|
| 178 | --regex-c++='/CLEARPAGEFLAG\(([^,)]*).*/ClearPage\1/' \
|
| 179 | --regex-c++='/__CLEARPAGEFLAG\(([^,)]*).*/__ClearPage\1/' \
|
| 180 | --regex-c++='/__PAGEFLAG\(([^,)]*).*/__SetPage\1/' \
|
| 181 | --regex-c++='/__PAGEFLAG\(([^,)]*).*/__ClearPage\1/' \
|
| 182 | --regex-c++='/PAGEFLAG_FALSE\(([^,)]*).*/Page\1/' \
|
| 183 | --regex-c++='/TESTSCFLAG\(([^,)]*).*/TestSetPage\1/' \
|
| 184 | --regex-c++='/TESTSCFLAG\(([^,)]*).*/TestClearPage\1/' \
|
| 185 | --regex-c++='/SETPAGEFLAG_NOOP\(([^,)]*).*/SetPage\1/' \
|
| 186 | --regex-c++='/CLEARPAGEFLAG_NOOP\(([^,)]*).*/ClearPage\1/' \
|
| 187 | --regex-c++='/__CLEARPAGEFLAG_NOOP\(([^,)]*).*/__ClearPage\1/' \
|
| 188 | --regex-c++='/TESTCLEARFLAG_FALSE\(([^,)]*).*/TestClearPage\1/' \
|
| 189 | --regex-c++='/__TESTCLEARFLAG_FALSE\(([^,)]*).*/__TestClearPage\1/' \
|
| 190 | --regex-c++='/_PE\(([^,)]*).*/PEVENT_ERRNO__\1/' \
|
| 191 | --regex-c='/PCI_OP_READ\((\w*).*[1-4]\)/pci_bus_read_config_\1/' \
|
| 192 | --regex-c='/PCI_OP_WRITE\((\w*).*[1-4]\)/pci_bus_write_config_\1/' \
|
| 193 | --regex-c='/DEFINE_(MUTEX|SEMAPHORE|SPINLOCK)\((\w*)/\2/v/' \
|
| 194 | --regex-c='/DEFINE_(RAW_SPINLOCK|RWLOCK|SEQLOCK)\((\w*)/\2/v/' \
|
| 195 | --regex-c='/DECLARE_(RWSEM|COMPLETION)\((\w*)/\2/v/' \
|
| 196 | --regex-c='/DECLARE_BITMAP\((\w*)/\1/v/' \
|
| 197 | --regex-c='/(^|\s)(|L|H)LIST_HEAD\((\w*)/\3/v/' \
|
| 198 | --regex-c='/(^|\s)RADIX_TREE\((\w*)/\2/v/' \
|
| 199 | --regex-c='/DEFINE_PER_CPU\(([^,]*,\s*)(\w*).*\)/\2/v/' \
|
| 200 | --regex-c='/DEFINE_PER_CPU_SHARED_ALIGNED\(([^,]*,\s*)(\w*).*\)/\2/v/' \
|
| 201 | --regex-c='/DECLARE_WAIT_QUEUE_HEAD\((\w*)/\1/v/' \
|
| 202 | --regex-c='/DECLARE_(TASKLET|WORK|DELAYED_WORK)\((\w*)/\2/v/' \
|
| 203 | --regex-c='/DEFINE_PCI_DEVICE_TABLE\((\w*)/\1/v/' \
|
| 204 | --regex-c='/(^\s)OFFSET\((\w*)/\2/v/' \
|
| 205 | --regex-c='/(^\s)DEFINE\((\w*)/\2/v/'
|
| 206 |
|
| 207 | all_kconfigs | xargs $1 -a \
|
| 208 | --langdef=kconfig --language-force=kconfig \
|
| 209 | --regex-kconfig='/^[[:blank:]]*(menu|)config[[:blank:]]+([[:alnum:]_]+)/\2/'
|
| 210 |
|
| 211 | all_kconfigs | xargs $1 -a \
|
| 212 | --langdef=kconfig --language-force=kconfig \
|
| 213 | --regex-kconfig='/^[[:blank:]]*(menu|)config[[:blank:]]+([[:alnum:]_]+)/CONFIG_\2/'
|
| 214 |
|
| 215 | all_defconfigs | xargs -r $1 -a \
|
| 216 | --langdef=dotconfig --language-force=dotconfig \
|
| 217 | --regex-dotconfig='/^#?[[:blank:]]*(CONFIG_[[:alnum:]_]+)/\1/'
|
| 218 | }
|
| 219 |
|
| 220 | emacs()
|
| 221 | {
|
| 222 | all_target_sources | xargs $1 -a \
|
| 223 | --regex='/^\(ENTRY\|_GLOBAL\)(\([^)]*\)).*/\2/' \
|
| 224 | --regex='/^SYSCALL_DEFINE[0-9]?(\([^,)]*\).*/sys_\1/' \
|
| 225 | --regex='/^TRACE_EVENT(\([^,)]*\).*/trace_\1/' \
|
| 226 | --regex='/^DEFINE_EVENT([^,)]*, *\([^,)]*\).*/trace_\1/' \
|
| 227 | --regex='/PAGEFLAG(\([^,)]*\).*/Page\1/' \
|
| 228 | --regex='/PAGEFLAG(\([^,)]*\).*/SetPage\1/' \
|
| 229 | --regex='/PAGEFLAG(\([^,)]*\).*/ClearPage\1/' \
|
| 230 | --regex='/TESTSETFLAG(\([^,)]*\).*/TestSetPage\1/' \
|
| 231 | --regex='/TESTPAGEFLAG(\([^,)]*\).*/Page\1/' \
|
| 232 | --regex='/SETPAGEFLAG(\([^,)]*\).*/SetPage\1/' \
|
| 233 | --regex='/__SETPAGEFLAG(\([^,)]*\).*/__SetPage\1/' \
|
| 234 | --regex='/TESTCLEARFLAG(\([^,)]*\).*/TestClearPage\1/' \
|
| 235 | --regex='/__TESTCLEARFLAG(\([^,)]*\).*/TestClearPage\1/' \
|
| 236 | --regex='/CLEARPAGEFLAG(\([^,)]*\).*/ClearPage\1/' \
|
| 237 | --regex='/__CLEARPAGEFLAG(\([^,)]*\).*/__ClearPage\1/' \
|
| 238 | --regex='/__PAGEFLAG(\([^,)]*\).*/__SetPage\1/' \
|
| 239 | --regex='/__PAGEFLAG(\([^,)]*\).*/__ClearPage\1/' \
|
| 240 | --regex='/PAGEFLAG_FALSE(\([^,)]*\).*/Page\1/' \
|
| 241 | --regex='/TESTSCFLAG(\([^,)]*\).*/TestSetPage\1/' \
|
| 242 | --regex='/TESTSCFLAG(\([^,)]*\).*/TestClearPage\1/' \
|
| 243 | --regex='/SETPAGEFLAG_NOOP(\([^,)]*\).*/SetPage\1/' \
|
| 244 | --regex='/CLEARPAGEFLAG_NOOP(\([^,)]*\).*/ClearPage\1/' \
|
| 245 | --regex='/__CLEARPAGEFLAG_NOOP(\([^,)]*\).*/__ClearPage\1/' \
|
| 246 | --regex='/TESTCLEARFLAG_FALSE(\([^,)]*\).*/TestClearPage\1/' \
|
| 247 | --regex='/__TESTCLEARFLAG_FALSE(\([^,)]*\).*/__TestClearPage\1/' \
|
| 248 | --regex='/_PE(\([^,)]*\).*/PEVENT_ERRNO__\1/' \
|
| 249 | --regex='/PCI_OP_READ(\([a-z]*[a-z]\).*[1-4])/pci_bus_read_config_\1/' \
|
| 250 | --regex='/PCI_OP_WRITE(\([a-z]*[a-z]\).*[1-4])/pci_bus_write_config_\1/'
|
| 251 |
|
| 252 | all_kconfigs | xargs $1 -a \
|
| 253 | --regex='/^[ \t]*\(\(menu\)*config\)[ \t]+\([a-zA-Z0-9_]+\)/\3/'
|
| 254 |
|
| 255 | all_kconfigs | xargs $1 -a \
|
| 256 | --regex='/^[ \t]*\(\(menu\)*config\)[ \t]+\([a-zA-Z0-9_]+\)/CONFIG_\3/'
|
| 257 |
|
| 258 | all_defconfigs | xargs -r $1 -a \
|
| 259 | --regex='/^#?[ \t]?\(CONFIG_[a-zA-Z0-9_]+\)/\1/'
|
| 260 | }
|
| 261 |
|
| 262 | xtags()
|
| 263 | {
|
| 264 | if $1 --version 2>&1 | grep -iq exuberant; then
|
| 265 | exuberant $1
|
| 266 | elif $1 --version 2>&1 | grep -iq emacs; then
|
| 267 | emacs $1
|
| 268 | else
|
| 269 | all_target_sources | xargs $1 -a
|
| 270 | fi
|
| 271 | }
|
| 272 |
|
| 273 | |
| 274 | if [ "${ARCH}" = "um" ]; then
|
| 275 | if [ "$SUBARCH" = "i386" ]; then
|
| 276 | archinclude=x86
|
| 277 | elif [ "$SUBARCH" = "x86_64" ]; then
|
| 278 | archinclude=x86
|
| 279 | else
|
| 280 | archinclude=${SUBARCH}
|
| 281 | fi
|
| 282 | elif [ "${SRCARCH}" = "arm" -a "${SUBARCH}" != "" ]; then
|
| 283 | subarchdir=$(find ${tree}arch/$SRCARCH/ -name "mach-*" -type d -o \
|
| 284 | -name "plat-*" -type d);
|
| 285 | for i in $subarchdir; do
|
| 286 | case "$i" in
|
| 287 | *"mach-"${SUBARCH})
|
| 288 | ;;
|
| 289 | *"plat-"${SUBARCH})
|
| 290 | ;;
|
| 291 | *)
|
| 292 | subarchprune="$subarchprune \
|
| 293 | -wholename $i -prune -o"
|
| 294 | ;;
|
| 295 | esac
|
| 296 | done
|
| 297 | fi
|
| 298 |
|
| 299 | remove_structs=
|
| 300 | case "$1" in
|
| 301 | "cscope")
|
| 302 | docscope
|
| 303 | ;;
|
| 304 |
|
| 305 | "gtags")
|
| 306 | dogtags
|
| 307 | ;;
|
| 308 |
|
| 309 | "tags")
|
| 310 | rm -f tags
|
| 311 | xtags ctags
|
| 312 | remove_structs=y
|
| 313 | ;;
|
| 314 |
|
| 315 | "TAGS")
|
| 316 | rm -f TAGS
|
| 317 | xtags etags
|
| 318 | remove_structs=y
|
| 319 | ;;
|
| 320 | esac
|
| 321 |
|
| 322 | |
| 323 | if [ -n "$remove_structs" ]; then
|
| 324 | LANG=C sed -i -e '/^\([a-zA-Z_][a-zA-Z0-9_]*\)\t.*\t\/\^struct \1;.*\$\/;"\tx$/d' $1
|
| 325 | fi
|