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
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")