From: Pedro Alves <palves@redhat.com>
To: gdb-patches@sourceware.org
Subject: [PATCH 00/13] No-debug-info debugging improvements
Date: Thu, 13 Jul 2017 02:19:00 -0000 [thread overview]
Message-ID: <1499912370-1842-1-git-send-email-palves@redhat.com> (raw)
This series stops GDB from assuming that no-debug-info functions
return int, and that no-debug-info variables have type int.
E.g. instead of this, if you have no debug info for glibc:
(gdb) p getenv("PATH")
$1 = -6185
You'll get:
(gdb) p getenv ("PATH")
'getenv' has unknown return type; cast the call to its declared return type
(gdb) p (char *) getenv ("PATH") # now Just Works
$1 = 0x7fffffffe7d7 "/usr/local/bin:/"...
(gdb) p ((char *(*) (const char *)) getenv) ("PATH") # continues working
$1 = 0x7fffffffe7d7 "/usr/local/bin:/"...
And similarly for variables.
While implementing and writing tests for the above, I ran into a few
other problems (as usual...), and fixed them too. Most of the
problems were related to printing static local variables, with the
documented "p klass::method()::static_var" syntax.
One other problem I ran into today while writing the documentation
patch... I wanted to document when to call a no-debug-info function
by casting it to the right function pointer type, and calling that
pointer, and noticed that that doesn't actually work correctly... GDB
always leaves the target function type of the function pointer type as
an unprototyped function, meaning that it applies argument coercion
incorrectly. W00t!
See many more details and rationale on the description of each patch.
Documentation is in the last patch.
Tested on x86-64 GNU/Linux, native and gdbserver, both with and
without glibc debug info. Adds over 3700 new passes:
-# of expected passes 39661
+# of expected passes 43405
I see this series as follow up to the recent "whatis" fixes for Zack's
errno pretty printer:
https://sourceware.org/ml/gdb-patches/2017-06/msg00827.html
https://sourceware.org/ml/gdb-patches/2017-07/msg00018.html
so I put this series on top of those patches in the same branch:
users/palves/whatis
Pedro Alves (13):
Stop assuming no-debug-info functions return int
Introduce OP_VAR_MSYM_VALUE
Make ptype/whatis print function name of functions with no debug info
too
evaluate_subexp_standard: Eliminate one goto
evaluate_subexp_standard: Remove useless assignments
evaluate_subexp_standard: Factor out OP_VAR_VALUE handling.
Stop assuming no-debug-info variables have type int
Eliminate UNOP_MEMVAL_TLS
Handle "p S::method()::static_var" in the C++ parser
Handle "p 'S::method()::static_var'" (quoted) in symbol lookup
Make "p S::method() const::static_var" work too
Fix calling prototyped functions via function pointers
Document "no debug info debugging" improvements
gdb/doc/gdb.texinfo | 90 ++++-
gdb/NEWS | 24 ++
gdb/ada-lang.c | 11 +-
gdb/ada-typeprint.c | 7 +-
gdb/ax-gdb.c | 72 +++-
gdb/c-exp.y | 51 ++-
gdb/c-typeprint.c | 10 +-
gdb/compile/compile-c-symbols.c | 4 +-
gdb/compile/compile-c-types.c | 35 +-
gdb/compile/compile-object-run.c | 3 +-
gdb/cp-namespace.c | 50 +--
gdb/dwarf2read.c | 46 ++-
gdb/elfread.c | 2 +-
gdb/eval.c | 439 ++++++++++++++-------
gdb/expprint.c | 92 +++--
gdb/expression.h | 1 +
gdb/f-typeprint.c | 7 +-
gdb/gcore.c | 2 +-
gdb/gdbtypes.c | 27 +-
gdb/gdbtypes.h | 15 +-
gdb/guile/scm-value.c | 2 +-
gdb/infcall.c | 34 +-
gdb/infcall.h | 19 +-
gdb/linux-fork.c | 6 +-
gdb/linux-tdep.c | 4 +-
gdb/m2-typeprint.c | 11 +-
gdb/minsyms.h | 9 +
gdb/objc-lang.c | 14 +-
gdb/p-typeprint.c | 57 +--
gdb/parse.c | 130 +++---
gdb/parser-defs.h | 2 +
gdb/python/py-value.c | 3 +-
gdb/rust-lang.c | 2 +-
gdb/std-operator.def | 43 +-
gdb/testsuite/gdb.asm/asm-source.exp | 8 +-
.../gdb.base/break-main-file-remove-fail.exp | 2 +-
gdb/testsuite/gdb.base/break-probes.exp | 2 +-
gdb/testsuite/gdb.base/callfuncs.exp | 26 +-
gdb/testsuite/gdb.base/checkpoint.exp | 44 +--
gdb/testsuite/gdb.base/dprintf-detach.exp | 2 +-
gdb/testsuite/gdb.base/infcall-exec.exp | 2 +-
gdb/testsuite/gdb.base/info-os.exp | 8 +-
gdb/testsuite/gdb.base/nodebug.c | 9 +
gdb/testsuite/gdb.base/nodebug.exp | 156 ++++++--
gdb/testsuite/gdb.base/solib-display.exp | 16 +-
gdb/testsuite/gdb.compile/compile-ifunc.exp | 5 +-
gdb/testsuite/gdb.compile/compile.exp | 10 +-
gdb/testsuite/gdb.cp/local-static.c | 170 ++++++++
gdb/testsuite/gdb.cp/local-static.cc | 1 +
gdb/testsuite/gdb.cp/local-static.exp | 241 +++++++++++
gdb/testsuite/gdb.cp/m-static.exp | 5 -
gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.exp | 2 +-
gdb/testsuite/gdb.threads/siginfo-threads.exp | 7 +-
gdb/testsuite/gdb.threads/tls-nodebug.exp | 5 +-
gdb/testsuite/gdb.trace/entry-values.exp | 6 +-
gdb/typeprint.c | 18 +-
gdb/typeprint.h | 9 +
gdb/valarith.c | 4 +-
gdb/valops.c | 7 +-
59 files changed, 1636 insertions(+), 453 deletions(-)
create mode 100644 gdb/testsuite/gdb.cp/local-static.c
create mode 100644 gdb/testsuite/gdb.cp/local-static.cc
create mode 100644 gdb/testsuite/gdb.cp/local-static.exp
--
2.5.5
next reply other threads:[~2017-07-13 2:19 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-07-13 2:19 Pedro Alves [this message]
2017-07-13 2:19 ` [PATCH 03/13] Make ptype/whatis print function name of functions with no debug info too Pedro Alves
2017-07-13 2:19 ` [PATCH 04/13] evaluate_subexp_standard: Eliminate one goto Pedro Alves
2017-07-13 2:19 ` [PATCH 02/13] Introduce OP_VAR_MSYM_VALUE Pedro Alves
2017-07-13 2:19 ` [PATCH 01/13] Stop assuming no-debug-info functions return int Pedro Alves
2017-07-13 2:19 ` [PATCH 07/13] Stop assuming no-debug-info variables have type int Pedro Alves
2017-07-13 2:19 ` [PATCH 08/13] Eliminate UNOP_MEMVAL_TLS Pedro Alves
2017-07-13 2:27 ` [PATCH 09/13] Handle "p S::method()::static_var" in the C++ parser Pedro Alves
2017-07-13 2:27 ` [PATCH 06/13] evaluate_subexp_standard: Factor out OP_VAR_VALUE handling Pedro Alves
2017-07-13 2:28 ` [PATCH 11/13] Make "p S::method() const::static_var" work too Pedro Alves
2017-07-13 2:28 ` [PATCH 12/13] Document "no debug info debugging" improvements Pedro Alves
2017-07-13 11:09 ` [PATCH 13/13] " Pedro Alves
2017-07-13 13:51 ` Pedro Alves
2017-07-13 13:54 ` Pedro Alves
2017-07-13 15:33 ` Pedro Alves
2017-07-13 15:47 ` [PATCH 12/13] " Eli Zaretskii
2017-07-13 16:14 ` Pedro Alves
2017-07-13 2:28 ` [PATCH 05/13] evaluate_subexp_standard: Remove useless assignments Pedro Alves
2017-07-13 2:29 ` [PATCH 10/13] Handle "p 'S::method()::static_var'" (quoted) in symbol lookup Pedro Alves
2017-07-13 2:29 ` [PATCH 12/13] Fix calling prototyped functions via function pointers Pedro Alves
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=1499912370-1842-1-git-send-email-palves@redhat.com \
--to=palves@redhat.com \
--cc=gdb-patches@sourceware.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