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

Showing the changes to scripts (4 of 6 files). Show all

Unified · Split

4 files
  1. scripts/Makefile +1 −0
  2. scripts/gdb/Makefile +1 −0
  3. scripts/gdb/linux/Makefile +11 −0
  4. scripts/gdb/vmlinux-gdb.py +23 −0
scripts/Makefile+1−0
@@ -36,6 +36,7 @@ subdir-$(CONFIG_MODVERSIONS) += genksyms · 35 unmodified lines
3636 subdir-y += mod
3737 subdir-$(CONFIG_SECURITY_SELINUX) += selinux
3838 subdir-$(CONFIG_DTC) += dtc
39+subdir-$(CONFIG_GDB_SCRIPTS) += gdb
3940
4041 # Let clean descend into subdirs
4142 subdir- += basic kconfig package
scripts/gdb/Makefile+1−0
@@ -0,0 +1 @@
1+subdir-y := linux
scripts/gdb/linux/Makefile+11−0
@@ -0,0 +1,11 @@
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)
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+
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")