Skip to content

Commit f197d75

Browse files
kbinghamtorvalds
authored andcommitted
scripts/gdb: provide linux constants
Some macro's and defines are needed when parsing memory, and without compiling the kernel as -g3 they are not available in the debug-symbols. We use the pre-processor here to extract constants to a dedicated module for the linux debugger extensions Top level Kbuild is used to call in and generate the constants file, while maintaining dependencies on autogenerated files in include/generated Link: http://lkml.kernel.org/r/bc3df9c25f57ea72177c066a51a446fc19e2c27f.1462865983.git.jan.kiszka@siemens.com Signed-off-by: Kieran Bingham <[email protected]> Signed-off-by: Jan Kiszka <[email protected]> Cc: Michal Marek <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
1 parent 0c22fde commit f197d75

File tree

4 files changed

+54
-1
lines changed

4 files changed

+54
-1
lines changed

Kbuild

+10
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
# 2) Generate timeconst.h
66
# 3) Generate asm-offsets.h (may need bounds.h and timeconst.h)
77
# 4) Check for missing system calls
8+
# 5) Generate constants.py (may need bounds.h)
89

910
# Default sed regexp - multiline due to syntax constraints
1011
define sed-y
@@ -96,5 +97,14 @@ quiet_cmd_syscalls = CALL $<
9697
missing-syscalls: scripts/checksyscalls.sh $(offsets-file) FORCE
9798
$(call cmd,syscalls)
9899

100+
#####
101+
# 5) Generate constants for Python GDB integration
102+
#
103+
104+
extra-$(CONFIG_GDB_SCRIPTS) += build_constants_py
105+
106+
build_constants_py: $(obj)/$(timeconst-file) $(obj)/$(bounds-file)
107+
@$(MAKE) $(build)=scripts/gdb/linux $@
108+
99109
# Keep these three files during make clean
100110
no-clean-files := $(bounds-file) $(offsets-file) $(timeconst-file)

scripts/gdb/linux/Makefile

+11-1
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,14 @@ ifneq ($(KBUILD_SRC),)
88
endif
99
@:
1010

11-
clean-files := *.pyc *.pyo $(if $(KBUILD_SRC),*.py)
11+
quiet_cmd_gen_constants_py = GEN $@
12+
cmd_gen_constants_py = \
13+
$(CPP) -E -x c -P $(c_flags) $< > $@ ;\
14+
sed -i '1,/<!-- end-c-headers -->/d;' $@
15+
16+
$(obj)/constants.py: $(SRCTREE)/$(obj)/constants.py.in
17+
$(call if_changed,gen_constants_py)
18+
19+
build_constants_py: $(obj)/constants.py
20+
21+
clean-files := *.pyc *.pyo $(if $(KBUILD_SRC),*.py) $(obj)/constants.py

scripts/gdb/linux/constants.py.in

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/*
2+
* gdb helper commands and functions for Linux kernel debugging
3+
*
4+
* Kernel constants derived from include files.
5+
*
6+
* Copyright (c) 2016 Linaro Ltd
7+
*
8+
* Authors:
9+
* Kieran Bingham <[email protected]>
10+
*
11+
* This work is licensed under the terms of the GNU GPL version 2.
12+
*
13+
*/
14+
15+
/* We need to stringify expanded macros so that they can be parsed */
16+
#define STRING(x) #x
17+
#define XSTRING(x) STRING(x)
18+
19+
#define LX_VALUE(x) LX_##x = x
20+
#define LX_GDBPARSED(x) LX_##x = gdb.parse_and_eval(XSTRING(x))
21+
22+
/*
23+
* IS_ENABLED generates (a || b) which is not compatible with python
24+
* We can only switch on configuration items we know are available
25+
* Therefore - IS_BUILTIN() is more appropriate
26+
*/
27+
#define LX_CONFIG(x) LX_##x = IS_BUILTIN(x)
28+
29+
/* The build system will take care of deleting everything above this marker */
30+
<!-- end-c-headers -->
31+
32+
import gdb

scripts/gdb/vmlinux-gdb.py

+1
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,4 @@
3030
import linux.cpus
3131
import linux.lists
3232
import linux.proc
33+
import linux.constants

0 commit comments

Comments
 (0)