Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f197d75f authored by Kieran Bingham's avatar Kieran Bingham Committed by Linus Torvalds
Browse files

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: default avatarKieran Bingham <kieran.bingham@linaro.org>
Signed-off-by: default avatarJan Kiszka <jan.kiszka@siemens.com>
Cc: Michal Marek <mmarek@suse.cz>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 0c22fde8
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@
# 2) Generate timeconst.h
# 3) Generate asm-offsets.h (may need bounds.h and timeconst.h)
# 4) Check for missing system calls
# 5) Generate constants.py (may need bounds.h)

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

#####
# 5) Generate constants for Python GDB integration
#

extra-$(CONFIG_GDB_SCRIPTS) += build_constants_py

build_constants_py: $(obj)/$(timeconst-file) $(obj)/$(bounds-file)
	@$(MAKE) $(build)=scripts/gdb/linux $@

# Keep these three files during make clean
no-clean-files := $(bounds-file) $(offsets-file) $(timeconst-file)
+11 −1
Original line number Diff line number Diff line
@@ -8,4 +8,14 @@ ifneq ($(KBUILD_SRC),)
endif
	@:

clean-files := *.pyc *.pyo $(if $(KBUILD_SRC),*.py)
quiet_cmd_gen_constants_py = GEN     $@
      cmd_gen_constants_py = \
	$(CPP) -E -x c -P $(c_flags) $< > $@ ;\
	sed -i '1,/<!-- end-c-headers -->/d;' $@

$(obj)/constants.py: $(SRCTREE)/$(obj)/constants.py.in
	$(call if_changed,gen_constants_py)

build_constants_py: $(obj)/constants.py

clean-files := *.pyc *.pyo $(if $(KBUILD_SRC),*.py) $(obj)/constants.py
+32 −0
Original line number Diff line number Diff line
/*
 * gdb helper commands and functions for Linux kernel debugging
 *
 *  Kernel constants derived from include files.
 *
 * Copyright (c) 2016 Linaro Ltd
 *
 * Authors:
 *  Kieran Bingham <kieran.bingham@linaro.org>
 *
 * This work is licensed under the terms of the GNU GPL version 2.
 *
 */

/* We need to stringify expanded macros so that they can be parsed */
#define STRING(x) #x
#define XSTRING(x) STRING(x)

#define LX_VALUE(x) LX_##x = x
#define LX_GDBPARSED(x) LX_##x = gdb.parse_and_eval(XSTRING(x))

/*
 * IS_ENABLED generates (a || b) which is not compatible with python
 * We can only switch on configuration items we know are available
 * Therefore - IS_BUILTIN() is more appropriate
 */
#define LX_CONFIG(x) LX_##x = IS_BUILTIN(x)

/* The build system will take care of deleting everything above this marker */
<!-- end-c-headers -->

import gdb
+1 −0
Original line number Diff line number Diff line
@@ -30,3 +30,4 @@ else:
    import linux.cpus
    import linux.lists
    import linux.proc
    import linux.constants