2015-10-14 09:48:06 +00:00
|
|
|
#!/bin/bash
|
2019-05-19 12:08:55 +00:00
|
|
|
# SPDX-License-Identifier: GPL-2.0-only
|
2008-12-03 21:24:13 +00:00
|
|
|
# Generate tags or cscope files
|
|
|
|
# Usage tags.sh <mode>
|
|
|
|
#
|
|
|
|
# mode may be any of: tags, TAGS, cscope
|
|
|
|
#
|
|
|
|
# Uses the following environment variables:
|
2019-07-05 15:14:31 +00:00
|
|
|
# SUBARCH, SRCARCH, srctree
|
2008-12-03 21:24:13 +00:00
|
|
|
|
2008-12-10 12:48:38 +00:00
|
|
|
if [ "$KBUILD_VERBOSE" = "1" ]; then
|
2008-12-03 21:24:13 +00:00
|
|
|
set -x
|
|
|
|
fi
|
|
|
|
|
2014-02-06 12:51:42 +00:00
|
|
|
# RCS_FIND_IGNORE has escaped ()s -- remove them.
|
|
|
|
ignore="$(echo "$RCS_FIND_IGNORE" | sed 's|\\||g' )"
|
|
|
|
# tags and cscope files should also ignore MODVERSION *.mod.c files
|
|
|
|
ignore="$ignore ( -name *.mod.c ) -prune -o"
|
2008-12-03 21:24:13 +00:00
|
|
|
|
2019-07-06 03:07:13 +00:00
|
|
|
# Use make KBUILD_ABS_SRCTREE=1 {tags|cscope}
|
2010-03-08 09:26:22 +00:00
|
|
|
# to force full paths for a non-O= build
|
2019-04-29 04:06:43 +00:00
|
|
|
if [ "${srctree}" = "." -o -z "${srctree}" ]; then
|
2008-12-03 21:24:13 +00:00
|
|
|
tree=
|
|
|
|
else
|
2008-12-10 12:10:13 +00:00
|
|
|
tree=${srctree}/
|
2008-12-03 21:24:13 +00:00
|
|
|
fi
|
|
|
|
|
2014-04-21 08:03:08 +00:00
|
|
|
# ignore userspace tools
|
2020-08-10 15:36:50 +00:00
|
|
|
if [ -n "$COMPILED_SOURCE" ]; then
|
|
|
|
ignore="$ignore ( -path ./tools ) -prune -o"
|
|
|
|
else
|
|
|
|
ignore="$ignore ( -path ${tree}tools ) -prune -o"
|
|
|
|
fi
|
2014-04-21 08:03:08 +00:00
|
|
|
|
2009-01-05 06:57:03 +00:00
|
|
|
# Detect if ALLSOURCE_ARCHS is set. If not, we assume SRCARCH
|
|
|
|
if [ "${ALLSOURCE_ARCHS}" = "" ]; then
|
|
|
|
ALLSOURCE_ARCHS=${SRCARCH}
|
2010-03-02 15:57:52 +00:00
|
|
|
elif [ "${ALLSOURCE_ARCHS}" = "all" ]; then
|
2018-05-22 09:16:06 +00:00
|
|
|
ALLSOURCE_ARCHS=$(find ${tree}arch/ -mindepth 1 -maxdepth 1 -type d -printf '%f ')
|
2009-01-05 06:57:03 +00:00
|
|
|
fi
|
|
|
|
|
2019-07-05 15:14:31 +00:00
|
|
|
# find sources in arch/$1
|
2008-12-03 21:24:13 +00:00
|
|
|
find_arch_sources()
|
|
|
|
{
|
2010-02-07 23:25:59 +00:00
|
|
|
for i in $archincludedir; do
|
|
|
|
prune="$prune -wholename $i -prune -o"
|
|
|
|
done
|
2019-07-05 15:14:30 +00:00
|
|
|
find ${tree}arch/$1 $ignore $prune -name "$2" -not -type l -print;
|
2008-12-03 21:24:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
# find sources in arch/$1/include
|
|
|
|
find_arch_include_sources()
|
|
|
|
{
|
2019-07-05 15:14:30 +00:00
|
|
|
include=$(find ${tree}arch/$1/ -name include -type d -print);
|
2010-02-07 23:25:59 +00:00
|
|
|
if [ -n "$include" ]; then
|
|
|
|
archincludedir="$archincludedir $include"
|
scripts/tags.sh: ignore symlink'ed source files
Since commit 22d651dcef536c75f75537290bf3da5038e68b6b ('selftests/powerpc:
Import Anton's memcpy / copy_tofrom_user tests'), some source files in the
tree appear as symlink.
Until commit 8c38a5328af8080bc69a25b3e4e144b03eeea95e ('scripts/tags.sh:
ignore code of user space tools'), those symlinks made cscope report some
warnings:
$ make ALLSOURCE_ARCHS=all O=./obj-cscope/ cscope
GEN cscope
cscope: cannot find
file .../tools/testing/selftests/powerpc/copyloops/copyuser_power7.S
cscope: cannot find
file .../tools/testing/selftests/powerpc/copyloops/memcpy_64.S
cscope: cannot find
file .../tools/testing/selftests/powerpc/copyloops/memcpy_power7.S
cscope: cannot find
file .../tools/testing/selftests/powerpc/copyloops/copyuser_64.S
In order to prevent the same kind of warnings to be triggered by future
addition of symlinks, the best option is to ignore all symlinks when
building the file list to be processed by cscope (and other tools
supported by scripts/tags.sh).
Ignoring symlinks won't hide source files from cscope (and others) as the
target of these symlinks already appear somewhere else in the tree, and,
as such, should be processed by cscope (or others).
Note that, cscope, when used with -R option to make it find the files to
process by itself, already skip symlinks: it's not expected that cscope
access source files through symlink.
On top of commit 8c38a5328af8080bc69a25b3e4e144b03eeea95e ('scripts/tags.sh:
ignore code of user space tools'), scripts/tags.sh output from
"make cscope tags TAGS" is the same with and without this patch: it doesn't
seems to introduce any regression (on Fedora 20).
Link: http://lkml.kernel.org/r/1396530975.4361.28.camel@localhost.localdomain
Link: http://mid.gmane.org/534312F8.5090609@t-online.de
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Anton Blanchard <anton@samba.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Hans-Bernhard Bröker <broeker@users.sourceforge.net>,
Cc: Hans-Bernhard Broeker <broeker@physik.rwth-aachen.de>,
Cc: Neil Horman <nhorman@users.sourceforge.net>
Cc: Neil Horman <nhorman@tuxdriver.com>
Cc: Gerhard Sittig <gsi@denx.de>
Cc: Konstantin Khlebnikov <koct9i@gmail.com>
Signed-off-by: Yann Droneaud <ydroneaud@opteya.com>
Signed-off-by: Michal Marek <mmarek@suse.cz>
2014-05-21 13:32:17 +00:00
|
|
|
find $include $ignore -name "$2" -not -type l -print;
|
2010-02-07 23:25:59 +00:00
|
|
|
fi
|
2008-12-03 21:24:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
# find sources in include/
|
|
|
|
find_include_sources()
|
|
|
|
{
|
scripts/tags.sh: ignore symlink'ed source files
Since commit 22d651dcef536c75f75537290bf3da5038e68b6b ('selftests/powerpc:
Import Anton's memcpy / copy_tofrom_user tests'), some source files in the
tree appear as symlink.
Until commit 8c38a5328af8080bc69a25b3e4e144b03eeea95e ('scripts/tags.sh:
ignore code of user space tools'), those symlinks made cscope report some
warnings:
$ make ALLSOURCE_ARCHS=all O=./obj-cscope/ cscope
GEN cscope
cscope: cannot find
file .../tools/testing/selftests/powerpc/copyloops/copyuser_power7.S
cscope: cannot find
file .../tools/testing/selftests/powerpc/copyloops/memcpy_64.S
cscope: cannot find
file .../tools/testing/selftests/powerpc/copyloops/memcpy_power7.S
cscope: cannot find
file .../tools/testing/selftests/powerpc/copyloops/copyuser_64.S
In order to prevent the same kind of warnings to be triggered by future
addition of symlinks, the best option is to ignore all symlinks when
building the file list to be processed by cscope (and other tools
supported by scripts/tags.sh).
Ignoring symlinks won't hide source files from cscope (and others) as the
target of these symlinks already appear somewhere else in the tree, and,
as such, should be processed by cscope (or others).
Note that, cscope, when used with -R option to make it find the files to
process by itself, already skip symlinks: it's not expected that cscope
access source files through symlink.
On top of commit 8c38a5328af8080bc69a25b3e4e144b03eeea95e ('scripts/tags.sh:
ignore code of user space tools'), scripts/tags.sh output from
"make cscope tags TAGS" is the same with and without this patch: it doesn't
seems to introduce any regression (on Fedora 20).
Link: http://lkml.kernel.org/r/1396530975.4361.28.camel@localhost.localdomain
Link: http://mid.gmane.org/534312F8.5090609@t-online.de
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Anton Blanchard <anton@samba.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Hans-Bernhard Bröker <broeker@users.sourceforge.net>,
Cc: Hans-Bernhard Broeker <broeker@physik.rwth-aachen.de>,
Cc: Neil Horman <nhorman@users.sourceforge.net>
Cc: Neil Horman <nhorman@tuxdriver.com>
Cc: Gerhard Sittig <gsi@denx.de>
Cc: Konstantin Khlebnikov <koct9i@gmail.com>
Signed-off-by: Yann Droneaud <ydroneaud@opteya.com>
Signed-off-by: Michal Marek <mmarek@suse.cz>
2014-05-21 13:32:17 +00:00
|
|
|
find ${tree}include $ignore -name config -prune -o -name "$1" \
|
|
|
|
-not -type l -print;
|
2008-12-03 21:24:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
# find sources in rest of tree
|
|
|
|
# we could benefit from a list of dirs to search in here
|
|
|
|
find_other_sources()
|
|
|
|
{
|
|
|
|
find ${tree}* $ignore \
|
2018-02-01 00:14:14 +00:00
|
|
|
\( -path ${tree}include -o -path ${tree}arch -o -name '.tmp_*' \) -prune -o \
|
scripts/tags.sh: ignore symlink'ed source files
Since commit 22d651dcef536c75f75537290bf3da5038e68b6b ('selftests/powerpc:
Import Anton's memcpy / copy_tofrom_user tests'), some source files in the
tree appear as symlink.
Until commit 8c38a5328af8080bc69a25b3e4e144b03eeea95e ('scripts/tags.sh:
ignore code of user space tools'), those symlinks made cscope report some
warnings:
$ make ALLSOURCE_ARCHS=all O=./obj-cscope/ cscope
GEN cscope
cscope: cannot find
file .../tools/testing/selftests/powerpc/copyloops/copyuser_power7.S
cscope: cannot find
file .../tools/testing/selftests/powerpc/copyloops/memcpy_64.S
cscope: cannot find
file .../tools/testing/selftests/powerpc/copyloops/memcpy_power7.S
cscope: cannot find
file .../tools/testing/selftests/powerpc/copyloops/copyuser_64.S
In order to prevent the same kind of warnings to be triggered by future
addition of symlinks, the best option is to ignore all symlinks when
building the file list to be processed by cscope (and other tools
supported by scripts/tags.sh).
Ignoring symlinks won't hide source files from cscope (and others) as the
target of these symlinks already appear somewhere else in the tree, and,
as such, should be processed by cscope (or others).
Note that, cscope, when used with -R option to make it find the files to
process by itself, already skip symlinks: it's not expected that cscope
access source files through symlink.
On top of commit 8c38a5328af8080bc69a25b3e4e144b03eeea95e ('scripts/tags.sh:
ignore code of user space tools'), scripts/tags.sh output from
"make cscope tags TAGS" is the same with and without this patch: it doesn't
seems to introduce any regression (on Fedora 20).
Link: http://lkml.kernel.org/r/1396530975.4361.28.camel@localhost.localdomain
Link: http://mid.gmane.org/534312F8.5090609@t-online.de
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Anton Blanchard <anton@samba.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Hans-Bernhard Bröker <broeker@users.sourceforge.net>,
Cc: Hans-Bernhard Broeker <broeker@physik.rwth-aachen.de>,
Cc: Neil Horman <nhorman@users.sourceforge.net>
Cc: Neil Horman <nhorman@tuxdriver.com>
Cc: Gerhard Sittig <gsi@denx.de>
Cc: Konstantin Khlebnikov <koct9i@gmail.com>
Signed-off-by: Yann Droneaud <ydroneaud@opteya.com>
Signed-off-by: Michal Marek <mmarek@suse.cz>
2014-05-21 13:32:17 +00:00
|
|
|
-name "$1" -not -type l -print;
|
2008-12-03 21:24:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
find_sources()
|
|
|
|
{
|
2008-12-10 12:10:13 +00:00
|
|
|
find_arch_sources $1 "$2"
|
2008-12-03 21:24:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
all_sources()
|
|
|
|
{
|
2010-02-19 15:18:41 +00:00
|
|
|
find_arch_include_sources ${SRCARCH} '*.[chS]'
|
2008-12-03 21:24:13 +00:00
|
|
|
if [ ! -z "$archinclude" ]; then
|
2008-12-10 12:10:13 +00:00
|
|
|
find_arch_include_sources $archinclude '*.[chS]'
|
2008-12-03 21:24:13 +00:00
|
|
|
fi
|
2009-01-05 06:57:03 +00:00
|
|
|
find_include_sources '*.[chS]'
|
2010-02-07 23:25:59 +00:00
|
|
|
for arch in $ALLSOURCE_ARCHS
|
|
|
|
do
|
|
|
|
find_sources $arch '*.[chS]'
|
|
|
|
done
|
2009-01-05 06:57:03 +00:00
|
|
|
find_other_sources '*.[chS]'
|
2008-12-03 21:24:13 +00:00
|
|
|
}
|
|
|
|
|
2012-12-10 15:11:46 +00:00
|
|
|
all_compiled_sources()
|
|
|
|
{
|
2020-08-07 06:17:29 +00:00
|
|
|
realpath -es $([ -z "$KBUILD_ABS_SRCTREE" ] && echo --relative-to=.) \
|
2020-08-10 15:36:50 +00:00
|
|
|
include/generated/autoconf.h $(find $ignore -name "*.cmd" -exec \
|
2020-08-07 06:17:29 +00:00
|
|
|
grep -Poh '(?(?=^source_.* \K).*|(?=^ \K\S).*(?= \\))' {} \+ |
|
|
|
|
awk '!a[$0]++') | sort -u
|
2012-12-10 15:11:46 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
all_target_sources()
|
|
|
|
{
|
|
|
|
if [ -n "$COMPILED_SOURCE" ]; then
|
|
|
|
all_compiled_sources
|
|
|
|
else
|
|
|
|
all_sources
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2008-12-03 21:24:13 +00:00
|
|
|
all_kconfigs()
|
|
|
|
{
|
2017-02-22 23:40:29 +00:00
|
|
|
find ${tree}arch/ -maxdepth 1 $ignore \
|
|
|
|
-name "Kconfig*" -not -type l -print;
|
2009-02-11 21:24:09 +00:00
|
|
|
for arch in $ALLSOURCE_ARCHS; do
|
|
|
|
find_sources $arch 'Kconfig*'
|
|
|
|
done
|
|
|
|
find_other_sources 'Kconfig*'
|
2008-12-03 21:24:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
docscope()
|
|
|
|
{
|
2012-12-10 15:11:46 +00:00
|
|
|
(echo \-k; echo \-q; all_target_sources) > cscope.files
|
2008-12-03 21:24:13 +00:00
|
|
|
cscope -b -f cscope.out
|
|
|
|
}
|
|
|
|
|
2011-01-14 12:07:05 +00:00
|
|
|
dogtags()
|
|
|
|
{
|
2012-12-10 15:11:46 +00:00
|
|
|
all_target_sources | gtags -i -f -
|
2011-01-14 12:07:05 +00:00
|
|
|
}
|
|
|
|
|
2015-10-14 09:48:06 +00:00
|
|
|
# Basic regular expressions with an optional /kind-spec/ for ctags and
|
|
|
|
# the following limitations:
|
|
|
|
# - No regex modifiers
|
|
|
|
# - Use \{0,1\} instead of \?, because etags expects an unescaped ?
|
|
|
|
# - \s is not working with etags, use a space or [ \t]
|
|
|
|
# - \w works, but does not match underscores in etags
|
|
|
|
# - etags regular expressions have to match at the start of a line;
|
|
|
|
# a ^[^#] is prepended by setup_regex unless an anchor is already present
|
|
|
|
regex_asm=(
|
|
|
|
'/^\(ENTRY\|_GLOBAL\)(\([[:alnum:]_\\]*\)).*/\2/'
|
|
|
|
)
|
|
|
|
regex_c=(
|
|
|
|
'/^SYSCALL_DEFINE[0-9](\([[:alnum:]_]*\).*/sys_\1/'
|
2018-07-12 05:28:46 +00:00
|
|
|
'/^BPF_CALL_[0-9](\([[:alnum:]_]*\).*/\1/'
|
2015-10-14 09:48:06 +00:00
|
|
|
'/^COMPAT_SYSCALL_DEFINE[0-9](\([[:alnum:]_]*\).*/compat_sys_\1/'
|
|
|
|
'/^TRACE_EVENT(\([[:alnum:]_]*\).*/trace_\1/'
|
|
|
|
'/^TRACE_EVENT(\([[:alnum:]_]*\).*/trace_\1_rcuidle/'
|
|
|
|
'/^DEFINE_EVENT([^,)]*, *\([[:alnum:]_]*\).*/trace_\1/'
|
|
|
|
'/^DEFINE_EVENT([^,)]*, *\([[:alnum:]_]*\).*/trace_\1_rcuidle/'
|
2016-02-18 15:26:31 +00:00
|
|
|
'/^DEFINE_INSN_CACHE_OPS(\([[:alnum:]_]*\).*/get_\1_slot/'
|
|
|
|
'/^DEFINE_INSN_CACHE_OPS(\([[:alnum:]_]*\).*/free_\1_slot/'
|
2015-10-14 09:48:06 +00:00
|
|
|
'/^PAGEFLAG(\([[:alnum:]_]*\).*/Page\1/'
|
|
|
|
'/^PAGEFLAG(\([[:alnum:]_]*\).*/SetPage\1/'
|
|
|
|
'/^PAGEFLAG(\([[:alnum:]_]*\).*/ClearPage\1/'
|
|
|
|
'/^TESTSETFLAG(\([[:alnum:]_]*\).*/TestSetPage\1/'
|
|
|
|
'/^TESTPAGEFLAG(\([[:alnum:]_]*\).*/Page\1/'
|
|
|
|
'/^SETPAGEFLAG(\([[:alnum:]_]*\).*/SetPage\1/'
|
|
|
|
'/\<__SETPAGEFLAG(\([[:alnum:]_]*\).*/__SetPage\1/'
|
|
|
|
'/\<TESTCLEARFLAG(\([[:alnum:]_]*\).*/TestClearPage\1/'
|
|
|
|
'/\<__TESTCLEARFLAG(\([[:alnum:]_]*\).*/TestClearPage\1/'
|
|
|
|
'/\<CLEARPAGEFLAG(\([[:alnum:]_]*\).*/ClearPage\1/'
|
|
|
|
'/\<__CLEARPAGEFLAG(\([[:alnum:]_]*\).*/__ClearPage\1/'
|
|
|
|
'/^__PAGEFLAG(\([[:alnum:]_]*\).*/__SetPage\1/'
|
|
|
|
'/^__PAGEFLAG(\([[:alnum:]_]*\).*/__ClearPage\1/'
|
|
|
|
'/^PAGEFLAG_FALSE(\([[:alnum:]_]*\).*/Page\1/'
|
|
|
|
'/\<TESTSCFLAG(\([[:alnum:]_]*\).*/TestSetPage\1/'
|
|
|
|
'/\<TESTSCFLAG(\([[:alnum:]_]*\).*/TestClearPage\1/'
|
|
|
|
'/\<SETPAGEFLAG_NOOP(\([[:alnum:]_]*\).*/SetPage\1/'
|
|
|
|
'/\<CLEARPAGEFLAG_NOOP(\([[:alnum:]_]*\).*/ClearPage\1/'
|
|
|
|
'/\<__CLEARPAGEFLAG_NOOP(\([[:alnum:]_]*\).*/__ClearPage\1/'
|
|
|
|
'/\<TESTCLEARFLAG_FALSE(\([[:alnum:]_]*\).*/TestClearPage\1/'
|
2018-06-08 00:08:18 +00:00
|
|
|
'/^PAGE_TYPE_OPS(\([[:alnum:]_]*\).*/Page\1/'
|
|
|
|
'/^PAGE_TYPE_OPS(\([[:alnum:]_]*\).*/__SetPage\1/'
|
|
|
|
'/^PAGE_TYPE_OPS(\([[:alnum:]_]*\).*/__ClearPage\1/'
|
2015-10-14 09:48:06 +00:00
|
|
|
'/^TASK_PFA_TEST([^,]*, *\([[:alnum:]_]*\))/task_\1/'
|
|
|
|
'/^TASK_PFA_SET([^,]*, *\([[:alnum:]_]*\))/task_set_\1/'
|
|
|
|
'/^TASK_PFA_CLEAR([^,]*, *\([[:alnum:]_]*\))/task_clear_\1/'
|
|
|
|
'/^DEF_MMIO_\(IN\|OUT\)_[XD](\([[:alnum:]_]*\),[^)]*)/\2/'
|
|
|
|
'/^DEBUGGER_BOILERPLATE(\([[:alnum:]_]*\))/\1/'
|
|
|
|
'/^DEF_PCI_AC_\(\|NO\)RET(\([[:alnum:]_]*\).*/\2/'
|
|
|
|
'/^PCI_OP_READ(\(\w*\).*[1-4])/pci_bus_read_config_\1/'
|
|
|
|
'/^PCI_OP_WRITE(\(\w*\).*[1-4])/pci_bus_write_config_\1/'
|
2018-12-28 08:31:35 +00:00
|
|
|
'/\<DEFINE_\(RT_MUTEX\|MUTEX\|SEMAPHORE\|SPINLOCK\)(\([[:alnum:]_]*\)/\2/v/'
|
2015-10-14 09:48:06 +00:00
|
|
|
'/\<DEFINE_\(RAW_SPINLOCK\|RWLOCK\|SEQLOCK\)(\([[:alnum:]_]*\)/\2/v/'
|
|
|
|
'/\<DECLARE_\(RWSEM\|COMPLETION\)(\([[:alnum:]_]\+\)/\2/v/'
|
|
|
|
'/\<DECLARE_BITMAP(\([[:alnum:]_]*\)/\1/v/'
|
|
|
|
'/\(^\|\s\)\(\|L\|H\)LIST_HEAD(\([[:alnum:]_]*\)/\3/v/'
|
|
|
|
'/\(^\|\s\)RADIX_TREE(\([[:alnum:]_]*\)/\2/v/'
|
|
|
|
'/\<DEFINE_PER_CPU([^,]*, *\([[:alnum:]_]*\)/\1/v/'
|
|
|
|
'/\<DEFINE_PER_CPU_SHARED_ALIGNED([^,]*, *\([[:alnum:]_]*\)/\1/v/'
|
|
|
|
'/\<DECLARE_WAIT_QUEUE_HEAD(\([[:alnum:]_]*\)/\1/v/'
|
|
|
|
'/\<DECLARE_\(TASKLET\|WORK\|DELAYED_WORK\)(\([[:alnum:]_]*\)/\2/v/'
|
|
|
|
'/\(^\s\)OFFSET(\([[:alnum:]_]*\)/\2/v/'
|
|
|
|
'/\(^\s\)DEFINE(\([[:alnum:]_]*\)/\2/v/'
|
2018-10-26 22:02:38 +00:00
|
|
|
'/\<\(DEFINE\|DECLARE\)_HASHTABLE(\([[:alnum:]_]*\)/\2/v/'
|
2018-12-28 08:31:35 +00:00
|
|
|
'/\<DEFINE_ID\(R\|A\)(\([[:alnum:]_]\+\)/\2/'
|
|
|
|
'/\<DEFINE_WD_CLASS(\([[:alnum:]_]\+\)/\1/'
|
|
|
|
'/\<ATOMIC_NOTIFIER_HEAD(\([[:alnum:]_]\+\)/\1/'
|
|
|
|
'/\<RAW_NOTIFIER_HEAD(\([[:alnum:]_]\+\)/\1/'
|
|
|
|
'/\<DECLARE_FAULT_ATTR(\([[:alnum:]_]\+\)/\1/'
|
|
|
|
'/\<BLOCKING_NOTIFIER_HEAD(\([[:alnum:]_]\+\)/\1/'
|
|
|
|
'/\<DEVICE_ATTR_\(RW\|RO\|WO\)(\([[:alnum:]_]\+\)/dev_attr_\2/'
|
|
|
|
'/\<DRIVER_ATTR_\(RW\|RO\|WO\)(\([[:alnum:]_]\+\)/driver_attr_\2/'
|
|
|
|
'/\<\(DEFINE\|DECLARE\)_STATIC_KEY_\(TRUE\|FALSE\)\(\|_RO\)(\([[:alnum:]_]\+\)/\4/'
|
2020-07-29 18:12:32 +00:00
|
|
|
'/^SEQCOUNT_LOCKTYPE(\([^,]*\),[[:space:]]*\([^,]*\),[^)]*)/seqcount_\2_t/'
|
|
|
|
'/^SEQCOUNT_LOCKTYPE(\([^,]*\),[[:space:]]*\([^,]*\),[^)]*)/seqcount_\2_init/'
|
2015-10-14 09:48:06 +00:00
|
|
|
)
|
|
|
|
regex_kconfig=(
|
|
|
|
'/^[[:blank:]]*\(menu\|\)config[[:blank:]]\+\([[:alnum:]_]\+\)/\2/'
|
|
|
|
'/^[[:blank:]]*\(menu\|\)config[[:blank:]]\+\([[:alnum:]_]\+\)/CONFIG_\2/'
|
|
|
|
)
|
|
|
|
setup_regex()
|
|
|
|
{
|
|
|
|
local mode=$1 lang tmp=() r
|
|
|
|
shift
|
|
|
|
|
|
|
|
regex=()
|
|
|
|
for lang; do
|
|
|
|
case "$lang" in
|
|
|
|
asm) tmp=("${regex_asm[@]}") ;;
|
|
|
|
c) tmp=("${regex_c[@]}") ;;
|
|
|
|
kconfig) tmp=("${regex_kconfig[@]}") ;;
|
|
|
|
esac
|
|
|
|
for r in "${tmp[@]}"; do
|
|
|
|
if test "$mode" = "exuberant"; then
|
|
|
|
regex[${#regex[@]}]="--regex-$lang=${r}b"
|
|
|
|
else
|
|
|
|
# Remove ctags /kind-spec/
|
|
|
|
case "$r" in
|
|
|
|
/*/*/?/)
|
|
|
|
r=${r%?/}
|
|
|
|
esac
|
|
|
|
# Prepend ^[^#] unless already anchored
|
|
|
|
case "$r" in
|
|
|
|
/^*) ;;
|
|
|
|
*)
|
|
|
|
r="/^[^#]*${r#/}"
|
|
|
|
esac
|
|
|
|
regex[${#regex[@]}]="--regex=$r"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2008-12-03 21:24:13 +00:00
|
|
|
exuberant()
|
|
|
|
{
|
2015-10-14 09:48:06 +00:00
|
|
|
setup_regex exuberant asm c
|
2012-12-10 15:11:46 +00:00
|
|
|
all_target_sources | xargs $1 -a \
|
2018-07-11 18:36:42 +00:00
|
|
|
-I __initdata,__exitdata,__initconst,__ro_after_init \
|
2015-04-27 21:37:53 +00:00
|
|
|
-I __initdata_memblock \
|
2013-10-23 13:08:44 +00:00
|
|
|
-I __refdata,__attribute,__maybe_unused,__always_unused \
|
2018-12-28 08:31:35 +00:00
|
|
|
-I __acquires,__releases,__deprecated,__always_inline \
|
2013-02-22 00:42:42 +00:00
|
|
|
-I __read_mostly,__aligned,____cacheline_aligned \
|
2008-12-03 21:24:13 +00:00
|
|
|
-I ____cacheline_aligned_in_smp \
|
2013-10-23 13:08:44 +00:00
|
|
|
-I __cacheline_aligned,__cacheline_aligned_in_smp \
|
2008-12-03 21:24:13 +00:00
|
|
|
-I ____cacheline_internodealigned_in_smp \
|
2013-02-22 00:42:42 +00:00
|
|
|
-I __used,__packed,__packed2__,__must_check,__must_hold \
|
2013-10-23 13:08:44 +00:00
|
|
|
-I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL,ACPI_EXPORT_SYMBOL \
|
2009-09-18 19:49:24 +00:00
|
|
|
-I DEFINE_TRACE,EXPORT_TRACEPOINT_SYMBOL,EXPORT_TRACEPOINT_SYMBOL_GPL \
|
2013-02-22 00:42:42 +00:00
|
|
|
-I static,const \
|
2016-10-11 20:55:14 +00:00
|
|
|
--extra=+fq --c-kinds=+px --fields=+iaS --langmap=c:+.h \
|
|
|
|
"${regex[@]}"
|
2008-12-03 21:24:13 +00:00
|
|
|
|
2015-10-14 09:48:06 +00:00
|
|
|
setup_regex exuberant kconfig
|
2008-12-03 21:24:13 +00:00
|
|
|
all_kconfigs | xargs $1 -a \
|
2015-10-14 09:48:06 +00:00
|
|
|
--langdef=kconfig --language-force=kconfig "${regex[@]}"
|
2008-12-03 21:24:13 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
emacs()
|
|
|
|
{
|
2015-10-14 09:48:06 +00:00
|
|
|
setup_regex emacs asm c
|
|
|
|
all_target_sources | xargs $1 -a "${regex[@]}"
|
2008-12-03 21:24:13 +00:00
|
|
|
|
2015-10-14 09:48:06 +00:00
|
|
|
setup_regex emacs kconfig
|
|
|
|
all_kconfigs | xargs $1 -a "${regex[@]}"
|
2008-12-03 21:24:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
xtags()
|
|
|
|
{
|
|
|
|
if $1 --version 2>&1 | grep -iq exuberant; then
|
|
|
|
exuberant $1
|
|
|
|
elif $1 --version 2>&1 | grep -iq emacs; then
|
|
|
|
emacs $1
|
|
|
|
else
|
2012-12-10 15:11:46 +00:00
|
|
|
all_target_sources | xargs $1 -a
|
2014-06-10 10:08:13 +00:00
|
|
|
fi
|
2008-12-03 21:24:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
# Support um (which uses SUBARCH)
|
2008-12-10 12:48:38 +00:00
|
|
|
if [ "${ARCH}" = "um" ]; then
|
|
|
|
if [ "$SUBARCH" = "i386" ]; then
|
2008-12-03 21:24:13 +00:00
|
|
|
archinclude=x86
|
2008-12-10 12:48:38 +00:00
|
|
|
elif [ "$SUBARCH" = "x86_64" ]; then
|
2008-12-03 21:24:13 +00:00
|
|
|
archinclude=x86
|
|
|
|
else
|
|
|
|
archinclude=${SUBARCH}
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2012-03-12 08:20:51 +00:00
|
|
|
remove_structs=
|
2008-12-03 21:24:13 +00:00
|
|
|
case "$1" in
|
|
|
|
"cscope")
|
|
|
|
docscope
|
|
|
|
;;
|
|
|
|
|
2011-01-14 12:07:05 +00:00
|
|
|
"gtags")
|
|
|
|
dogtags
|
|
|
|
;;
|
|
|
|
|
2008-12-03 21:24:13 +00:00
|
|
|
"tags")
|
2009-04-22 03:38:23 +00:00
|
|
|
rm -f tags
|
2008-12-03 21:24:13 +00:00
|
|
|
xtags ctags
|
2012-03-12 08:20:51 +00:00
|
|
|
remove_structs=y
|
2008-12-03 21:24:13 +00:00
|
|
|
;;
|
|
|
|
|
|
|
|
"TAGS")
|
2009-04-22 03:38:23 +00:00
|
|
|
rm -f TAGS
|
2008-12-03 21:24:13 +00:00
|
|
|
xtags etags
|
2012-03-12 08:20:51 +00:00
|
|
|
remove_structs=y
|
2008-12-03 21:24:13 +00:00
|
|
|
;;
|
|
|
|
esac
|
2012-03-12 08:20:51 +00:00
|
|
|
|
|
|
|
# Remove structure forward declarations.
|
2012-04-01 06:41:07 +00:00
|
|
|
if [ -n "$remove_structs" ]; then
|
2021-04-30 01:56:27 +00:00
|
|
|
LC_ALL=C sed -i -e '/^\([a-zA-Z_][a-zA-Z0-9_]*\)\t.*\t\/\^struct \1;.*\$\/;"\tx$/d' $1
|
2012-03-12 08:20:51 +00:00
|
|
|
fi
|