Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Jan Kiszka and committed by
Linus Torvalds
3ee7b3fa 0445f01a

+51 -1
+4 -1
Makefile
··· 927 927 ifdef CONFIG_BUILD_DOCSRC 928 928 $(Q)$(MAKE) $(build)=Documentation 929 929 endif 930 + ifdef CONFIG_GDB_SCRIPTS 931 + $(Q)ln -fsn `cd $(srctree) && /bin/pwd`/scripts/gdb/vmlinux-gdb.py 932 + endif 930 933 +$(call if_changed,link-vmlinux) 931 934 932 935 # The actual objects are generated when descending, ··· 1184 1181 Module.symvers tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS \ 1185 1182 signing_key.priv signing_key.x509 x509.genkey \ 1186 1183 extra_certificates signing_key.x509.keyid \ 1187 - signing_key.x509.signer 1184 + signing_key.x509.signer vmlinux-gdb.py 1188 1185 1189 1186 # clean - Delete most, but leave enough to build external modules 1190 1187 #
+11
lib/Kconfig.debug
··· 167 167 But it significantly improves the success of resolving 168 168 variables in gdb on optimized code. 169 169 170 + config 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 + 170 181 config ENABLE_WARN_DEPRECATED 171 182 bool "Enable __deprecated logic" 172 183 default y
+1
scripts/Makefile
··· 36 36 subdir-y += mod 37 37 subdir-$(CONFIG_SECURITY_SELINUX) += selinux 38 38 subdir-$(CONFIG_DTC) += dtc 39 + subdir-$(CONFIG_GDB_SCRIPTS) += gdb 39 40 40 41 # Let clean descend into subdirs 41 42 subdir- += basic kconfig package
+1
scripts/gdb/Makefile
··· 1 + subdir-y := linux
+11
scripts/gdb/linux/Makefile
··· 1 + always := gdb-scripts 2 + 3 + SRCTREE := $(shell cd $(srctree) && /bin/pwd) 4 + 5 + $(obj)/gdb-scripts: 6 + ifneq ($(KBUILD_SRC),) 7 + $(Q)ln -fsn $(SRCTREE)/$(obj)/*.py $(objtree)/$(obj) 8 + endif 9 + @: 10 + 11 + clean-files := *.pyc *.pyo $(if $(KBUILD_SRC),*.py)
+23
scripts/gdb/vmlinux-gdb.py
··· 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 + 14 + import os 15 + 16 + sys.path.insert(0, os.path.dirname(__file__) + "/scripts/gdb") 17 + 18 + try: 19 + gdb.parse_and_eval("0") 20 + gdb.execute("", to_string=True) 21 + except: 22 + gdb.write("NOTE: gdb 7.2 or later required for Linux helper scripts to " 23 + "work.\n")