linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Kieran Bingham <kieran.bingham@linaro.org>
To: jan.kiszka@siemens.com, linux-kernel@vger.kernel.org
Cc: lee.jones@linaro.org, peter.griffin@linaro.org,
	maxime.coquelin@st.com,
	Kieran Bingham <kieran.bingham@linaro.org>,
	mmarek@suse.com, linux-kbuild@vger.kernel.org
Subject: [PATCHv3 01/13] scripts/gdb: Provide linux constants
Date: Thu,  3 Mar 2016 11:40:55 +0000	[thread overview]
Message-ID: <1457005267-843-2-git-send-email-kieran.bingham@linaro.org> (raw)
In-Reply-To: <1457005267-843-1-git-send-email-kieran.bingham@linaro.org>

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

CC: mmarek@suse.com
CC: linux-kbuild@vger.kernel.org

Signed-off-by: Kieran Bingham <kieran.bingham@linaro.org>
---
Changes since v1:

Kbuild:
 - Call to generate constants_py with dependancy on generated files

scripts/gdb/linux/Makefile:
 - Use call if_changed, and correct quiet invocation
 - Annouce "GEN  $@" instead of GDB PP

scripts/gdb/linux/constants.py.in:
 - Updated to use better macro implementations for one line defines
---
 Kbuild                            | 10 ++++++++++
 scripts/gdb/linux/Makefile        | 12 +++++++++++-
 scripts/gdb/linux/constants.py.in | 32 ++++++++++++++++++++++++++++++++
 scripts/gdb/vmlinux-gdb.py        |  1 +
 4 files changed, 54 insertions(+), 1 deletion(-)
 create mode 100644 scripts/gdb/linux/constants.py.in

diff --git a/Kbuild b/Kbuild
index f55cefd9bf29..3d0ae152af7c 100644
--- a/Kbuild
+++ b/Kbuild
@@ -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)
diff --git a/scripts/gdb/linux/Makefile b/scripts/gdb/linux/Makefile
index 6cf1ecf61057..cd129e65d1ff 100644
--- a/scripts/gdb/linux/Makefile
+++ b/scripts/gdb/linux/Makefile
@@ -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
diff --git a/scripts/gdb/linux/constants.py.in b/scripts/gdb/linux/constants.py.in
new file mode 100644
index 000000000000..79d9d0092452
--- /dev/null
+++ b/scripts/gdb/linux/constants.py.in
@@ -0,0 +1,32 @@
+/*
+ * 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
diff --git a/scripts/gdb/vmlinux-gdb.py b/scripts/gdb/vmlinux-gdb.py
index d5943eca19cd..6e0b0afd888a 100644
--- a/scripts/gdb/vmlinux-gdb.py
+++ b/scripts/gdb/vmlinux-gdb.py
@@ -30,3 +30,4 @@ else:
     import linux.cpus
     import linux.lists
     import linux.proc
+    import linux.constants
-- 
2.5.0

  reply	other threads:[~2016-03-03 11:41 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-03 11:40 [PATCHv3 00/13] scripts/gdb: Linux awareness debug commands Kieran Bingham
2016-03-03 11:40 ` Kieran Bingham [this message]
2016-03-03 11:40 ` [PATCHv3 02/13] scripts/gdb: Provide kernel list item generators Kieran Bingham
2016-03-08  3:47   ` Jeff Mahoney
2016-03-08  7:55     ` Kieran Bingham
2016-03-03 11:40 ` [PATCHv3 03/13] scripts/gdb: Convert modules usage to lists functions Kieran Bingham
2016-03-03 11:40 ` [PATCHv3 04/13] scripts/gdb: Provide exception catching parser Kieran Bingham
2016-03-03 11:40 ` [PATCHv3 05/13] scripts/gdb: Support !CONFIG_MODULES gracefully Kieran Bingham
2016-03-03 11:41 ` [PATCHv3 06/13] scripts/gdb: Provide a dentry_name VFS path helper Kieran Bingham
2016-03-03 11:41 ` [PATCHv3 07/13] scripts/gdb: Add io resource readers Kieran Bingham
2016-03-03 11:41 ` [PATCHv3 08/13] scripts/gdb: Add mount point list command Kieran Bingham
2016-03-13 16:34   ` Jan Kiszka
2016-03-14 14:39     ` Kieran Bingham
2016-03-14 15:05       ` Jan Kiszka
2016-03-15 10:46         ` Kieran Bingham
2016-03-03 11:41 ` [PATCHv3 09/13] scripts/gdb: Add meminfo command Kieran Bingham
2016-03-13 16:34   ` Jan Kiszka
2016-03-13 18:16     ` Kieran Bingham
2016-03-13 19:08       ` Jan Kiszka
2016-03-14 12:13         ` Kieran Bingham
2016-03-03 11:41 ` [PATCHv3 10/13] scripts/gdb: Add cpu iterators Kieran Bingham
2016-03-13 16:33   ` Jan Kiszka
2016-03-13 18:39     ` Kieran Bingham
2016-03-03 11:41 ` [PATCHv3 11/13] scripts/gdb: Add a Radix Tree Parser Kieran Bingham
2016-03-03 11:41 ` [PATCHv3 12/13] scripts/gdb: Add interrupts command Kieran Bingham
2016-03-03 11:41 ` [PATCHv3 13/13] scripts/gdb: Add lx_thread_info_by_pid helper Kieran Bingham
2016-03-13 16:35 ` [PATCHv3 00/13] scripts/gdb: Linux awareness debug commands Jan Kiszka
2016-03-14 14:40   ` Kieran Bingham
2016-03-14 15:09     ` Jan Kiszka
2016-03-14 17:18       ` Kieran Bingham
2016-03-14 17:31         ` Jan Kiszka

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1457005267-843-2-git-send-email-kieran.bingham@linaro.org \
    --to=kieran.bingham@linaro.org \
    --cc=jan.kiszka@siemens.com \
    --cc=lee.jones@linaro.org \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=maxime.coquelin@st.com \
    --cc=mmarek@suse.com \
    --cc=peter.griffin@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).