History

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.

Jan Kiszka committed 11 years ago

Commit 3ee7b3f1 parent 0445f016 files · +51 −1Browse files

Unified · Split

6 files
  1. Makefile +4 −1
  2. lib/Kconfig.debug +11 −0
  3. scripts/Makefile +1 −0
  4. scripts/gdb/Makefile +1 −0
  5. scripts/gdb/linux/Makefile +11 −0
  6. scripts/gdb/vmlinux-gdb.py +23 −0
Makefile+4−1
@@ -926,6 +926,9 @@ ifdef CONFIG_SAMPLES · 925 unmodified lines
926endif926endif
927ifdef CONFIG_BUILD_DOCSRC927ifdef CONFIG_BUILD_DOCSRC
928 $(Q)$(MAKE) $(build)=Documentation928 $(Q)$(MAKE) $(build)=Documentation
929endif
930ifdef CONFIG_GDB_SCRIPTS
931 $(Q)ln -fsn `cd $(srctree) && /bin/pwd`/scripts/gdb/vmlinux-gdb.py
929endif932endif
930 +$(call if_changed,link-vmlinux)933 +$(call if_changed,link-vmlinux)
931 934
@@ -1181,7 +1184,7 @@ MRPROPER_FILES += .config .config.old .version .old_version $(version_h) \ · 249 unmodified lines
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.signer1187 signing_key.x509.signer vmlinux-gdb.py
1185 1188
1186# clean - Delete most, but leave enough to build external modules1189# clean - Delete most, but leave enough to build external modules
1187#1190#
lib/Kconfig.debug+11−0
@@ -167,6 +167,17 @@ config DEBUG_INFO_DWARF4 · 166 unmodified lines
167 But it significantly improves the success of resolving167 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_DEPRECATED181config ENABLE_WARN_DEPRECATED
171 bool "Enable __deprecated logic"182 bool "Enable __deprecated logic"
172 default y183 default y
scripts/Makefile+1−0
@@ -36,6 +36,7 @@ subdir-$(CONFIG_MODVERSIONS) += genksyms · 35 unmodified lines
36subdir-y += mod36subdir-y += mod
37subdir-$(CONFIG_SECURITY_SELINUX) += selinux37subdir-$(CONFIG_SECURITY_SELINUX) += selinux
38subdir-$(CONFIG_DTC) += dtc38subdir-$(CONFIG_DTC) += dtc
39subdir-$(CONFIG_GDB_SCRIPTS) += gdb
39 40
40# Let clean descend into subdirs41# Let clean descend into subdirs
41subdir- += basic kconfig package42subdir- += basic kconfig package
scripts/gdb/Makefile+1−0
@@ -0,0 +1 @@
1subdir-y := linux
scripts/gdb/linux/Makefile+11−0
@@ -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)
scripts/gdb/vmlinux-gdb.py+23−0
@@ -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")