--- linux-2.6.33.org/Makefile	2010-02-25 03:52:17.000000000 +0900
+++ linux-2.6.33/Makefile	2010-03-27 13:12:56.000000000 +0900
@@ -409,7 +409,7 @@
 # of make so .config is not included in this case either (for *config).
 
 no-dot-config-targets := clean mrproper distclean \
-			 cscope TAGS tags help %docs check% \
+			 cscope TAGS tags GTAGS help %docs check% \
 			 include/linux/version.h headers_% \
 			 kernelrelease kernelversion
 
@@ -1161,7 +1161,7 @@
 MRPROPER_DIRS  += include/config usr/include include/generated
 MRPROPER_FILES += .config .config.old .version .old_version             \
                   include/linux/version.h                               \
-		  Module.symvers tags TAGS cscope*
+		  Module.symvers tags TAGS GPATH GTAGS GRTAGS GSYMS cscope*
 
 # clean - Delete most, but leave enough to build external modules
 #
@@ -1250,7 +1250,7 @@
 	@echo  '  dir/file.[ois]  - Build specified target only'
 	@echo  '  dir/file.ko     - Build module including final link'
 	@echo  '  modules_prepare - Set up for building external modules'
-	@echo  '  tags/TAGS	  - Generate tags file for editors'
+	@echo  '  tags/TAGS/GTAGS - Generate tags file for editors'
 	@echo  '  cscope	  - Generate cscope index'
 	@echo  '  kernelrelease	  - Output the release version string'
 	@echo  '  kernelversion	  - Output the version stored in Makefile'
@@ -1408,7 +1408,7 @@
 quiet_cmd_tags = GEN     $@
       cmd_tags = $(CONFIG_SHELL) $(srctree)/scripts/tags.sh $@
 
-tags TAGS cscope: FORCE
+tags TAGS cscope GTAGS: FORCE
 	$(call cmd,tags)
 
 # Scripts to check various things for consistency
--- linux-2.6.33.org/scripts/tags.sh	2010-02-25 03:52:17.000000000 +0900
+++ linux-2.6.33/scripts/tags.sh	2010-03-27 14:21:22.000000000 +0900
@@ -2,7 +2,7 @@
 # Generate tags or cscope files
 # Usage tags.sh <mode>
 #
-# mode may be any of: tags, TAGS, cscope
+# mode may be any of: tags, TAGS, cscope, GTAGS
 #
 # Uses the following environment variables:
 # ARCH, SUBARCH, srctree, src, obj
@@ -153,6 +153,25 @@
         fi
 }
 
+dogtags()
+{
+	# for exuberant-ctags plugin
+	CTAGS="$CTAGS -I __initdata,__exitdata,__acquires,__releases"
+	CTAGS="$CTAGS -I __read_mostly,____cacheline_aligned"
+	CTAGS="$CTAGS -I ____cacheline_aligned_in_smp"
+	CTAGS="$CTAGS -I ____cacheline_internodealigned_in_smp"
+	CTAGS="$CTAGS -I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL"
+	CTAGS="$CTAGS -I DEFINE_TRACE,EXPORT_TRACEPOINT_SYMBOL,EXPORT_TRACEPOINT_SYMBOL_GPL"
+	CTAGS="$CTAGS --regex-asm="'/^ENTRY\(([^)]*)\).*/\1/'
+	CTAGS="$CTAGS --regex-c="'/^SYSCALL_DEFINE[[:digit:]]?\(([^,)]*).*/sys_\1/'
+	export CTAGS
+
+	tree=
+	dbpath=`pwd`
+	cd "$srctree"
+	all_sources | gtags -i -f - "$dbpath"
+}
+
 
 # Support um (which uses SUBARCH)
 if [ "${ARCH}" = "um" ]; then
@@ -179,4 +198,8 @@
 		rm -f TAGS
 		xtags etags
 		;;
+
+	"GTAGS")
+		dogtags
+		;;
 esac
