aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Kiszka <jan.kiszka@siemens.com>2015-02-17 16:46:36 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2015-02-17 17:34:53 -0500
commit3ee7b3fa2cd0182628cca8d9bb5ce2d4722e8dc5 (patch)
treeecbead6b6c7ac9f7a9a62e17f516611873e6c275
parent0445f01a53ad53ef6b23307b4630ab92423994ab (diff)
scripts/gdb: add infrastructure
This provides the basic infrastructure to load kernel-specific python helper scripts when debugging the kernel in gdb. The loading mechanism is based on gdb loading for <objfile>-gdb.py when opening <objfile>. Therefore, this places a corresponding link to the main helper script into the output directory that contains vmlinux. The main scripts will pull in submodules containing Linux specific gdb commands and functions. To avoid polluting the source directory with compiled python modules, we link to them from the object directory. Due to gdb.parse_and_eval and string redirection for gdb.execute, we depend on gdb >= 7.2. This feature is enabled via CONFIG_GDB_SCRIPTS. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Acked-by: Michal Marek <mmarek@suse.cz> [kbuild stuff] Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Jason Wessel <jason.wessel@windriver.com> Cc: Andi Kleen <andi@firstfloor.org> Cc: Ben Widawsky <ben@bwidawsk.net> Cc: Borislav Petkov <bp@suse.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--Makefile5
-rw-r--r--lib/Kconfig.debug11
-rw-r--r--scripts/Makefile1
-rw-r--r--scripts/gdb/Makefile1
-rw-r--r--scripts/gdb/linux/Makefile11
-rw-r--r--scripts/gdb/vmlinux-gdb.py23
6 files changed, 51 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index 33cb15efd257..dd8796caa239 100644
--- a/Makefile
+++ b/Makefile
@@ -927,6 +927,9 @@ endif
927ifdef CONFIG_BUILD_DOCSRC 927ifdef CONFIG_BUILD_DOCSRC
928 $(Q)$(MAKE) $(build)=Documentation 928 $(Q)$(MAKE) $(build)=Documentation
929endif 929endif
930ifdef CONFIG_GDB_SCRIPTS
931 $(Q)ln -fsn `cd $(srctree) && /bin/pwd`/scripts/gdb/vmlinux-gdb.py
932endif
930 +$(call if_changed,link-vmlinux) 933 +$(call if_changed,link-vmlinux)
931 934
932# The actual objects are generated when descending, 935# The actual objects are generated when descending,
@@ -1181,7 +1184,7 @@ MRPROPER_FILES += .config .config.old .version .old_version $(version_h) \
1181 Module.symvers tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS \ 1184 Module.symvers tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS \
1182 signing_key.priv signing_key.x509 x509.genkey \ 1185 signing_key.priv signing_key.x509 x509.genkey \
1183 extra_certificates signing_key.x509.keyid \ 1186 extra_certificates signing_key.x509.keyid \
1184 signing_key.x509.signer 1187 signing_key.x509.signer vmlinux-gdb.py
1185 1188
1186# clean - Delete most, but leave enough to build external modules 1189# clean - Delete most, but leave enough to build external modules
1187# 1190#
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index ecb3516f6546..c5cefb3c009c 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -167,6 +167,17 @@ config DEBUG_INFO_DWARF4
167 But it significantly improves the success of resolving 167 But it significantly improves the success of resolving
168 variables in gdb on optimized code. 168 variables in gdb on optimized code.
169 169
170config GDB_SCRIPTS
171 bool "Provide GDB scripts for kernel debugging"
172 depends on DEBUG_INFO
173 help
174 This creates the required links to GDB helper scripts in the
175 build directory. If you load vmlinux into gdb, the helper
176 scripts will be automatically imported by gdb as well, and
177 additional functions are available to analyze a Linux kernel
178 instance. See Documentation/gdb-kernel-debugging.txt for further
179 details.
180
170config ENABLE_WARN_DEPRECATED 181config ENABLE_WARN_DEPRECATED
171 bool "Enable __deprecated logic" 182 bool "Enable __deprecated logic"
172 default y 183 default y
diff --git a/scripts/Makefile b/scripts/Makefile
index 72902b5f2721..2016a64497ab 100644
--- a/scripts/Makefile
+++ b/scripts/Makefile
@@ -36,6 +36,7 @@ subdir-$(CONFIG_MODVERSIONS) += genksyms
36subdir-y += mod 36subdir-y += mod
37subdir-$(CONFIG_SECURITY_SELINUX) += selinux 37subdir-$(CONFIG_SECURITY_SELINUX) += selinux
38subdir-$(CONFIG_DTC) += dtc 38subdir-$(CONFIG_DTC) += dtc
39subdir-$(CONFIG_GDB_SCRIPTS) += gdb
39 40
40# Let clean descend into subdirs 41# Let clean descend into subdirs
41subdir- += basic kconfig package 42subdir- += basic kconfig package
diff --git a/scripts/gdb/Makefile b/scripts/gdb/Makefile
new file mode 100644
index 000000000000..62f5f65becfd
--- /dev/null
+++ b/scripts/gdb/Makefile
@@ -0,0 +1 @@
subdir-y := linux
diff --git a/scripts/gdb/linux/Makefile b/scripts/gdb/linux/Makefile
new file mode 100644
index 000000000000..6cf1ecf61057
--- /dev/null
+++ b/scripts/gdb/linux/Makefile
@@ -0,0 +1,11 @@
1always := gdb-scripts
2
3SRCTREE := $(shell cd $(srctree) && /bin/pwd)
4
5$(obj)/gdb-scripts:
6ifneq ($(KBUILD_SRC),)
7 $(Q)ln -fsn $(SRCTREE)/$(obj)/*.py $(objtree)/$(obj)
8endif
9 @:
10
11clean-files := *.pyc *.pyo $(if $(KBUILD_SRC),*.py)
diff --git a/scripts/gdb/vmlinux-gdb.py b/scripts/gdb/vmlinux-gdb.py
new file mode 100644
index 000000000000..c1d90cea5288
--- /dev/null
+++ b/scripts/gdb/vmlinux-gdb.py
@@ -0,0 +1,23 @@
1#
2# gdb helper commands and functions for Linux kernel debugging
3#
4# loader module
5#
6# Copyright (c) Siemens AG, 2012, 2013
7#
8# Authors:
9# Jan Kiszka <jan.kiszka@siemens.com>
10#
11# This work is licensed under the terms of the GNU GPL version 2.
12#
13
14import os
15
16sys.path.insert(0, os.path.dirname(__file__) + "/scripts/gdb")
17
18try:
19 gdb.parse_and_eval("0")
20 gdb.execute("", to_string=True)
21except:
22 gdb.write("NOTE: gdb 7.2 or later required for Linux helper scripts to "
23 "work.\n")