This is the mail archive of the
gdb-cvs@sourceware.org
mailing list for the GDB project.
gdb and binutils branch master updated. c1b5a1a6e732a65350af930c499b23018f8663cc
- From: brobecke at sourceware dot org
- To: gdb-cvs at sourceware dot org
- Date: 13 Dec 2014 16:00:49 -0000
- Subject: gdb and binutils branch master updated. c1b5a1a6e732a65350af930c499b23018f8663cc
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gdb and binutils".
The branch, master has been updated
via c1b5a1a6e732a65350af930c499b23018f8663cc (commit)
from 3c46a02f5083c4a9c07b563d44b8b6ded6d85bb1 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=c1b5a1a6e732a65350af930c499b23018f8663cc
commit c1b5a1a6e732a65350af930c499b23018f8663cc
Author: Joel Brobecker <brobecker@adacore.com>
Date: Mon Dec 8 10:37:00 2014 -0500
Internal error trying to print uninitialized string.
Trying to print the value of a string whose size is not known at
compile-time before it gets assigned a value can lead to the following
internal error:
(gdb) p my_str
$1 =
/[...]/utils.c:1089: internal-error: virtual memory exhausted.
What happens is that my_str is described as a reference to an array
type whose bounds are dynamic. During the read of that variable's
value (in default_read_var_value), we end up resolving dynamic types
which, for reference types, makes us also resolve the target of that
reference type. This means we resolve our variable to a reference
to an array whose bounds are undefined, and unfortunately very far
appart.
So, when we pass that value to ada-valprint, and in particular to
da_val_print_ref, we eventually try to allocate too large of a buffer
corresponding to the (bogus) size of our array, hence the internal
error.
This patch fixes the problem by adding a size_check before trying
to print the dereferenced value. To perform this check, a function
that was previously specific to ada-lang.c (check_size) gets
exported, and renamed to something less prone to name collisions
(ada_ensure_varsize_limit).
gdb/ChangeLog:
* ada-lang.h (ada_ensure_varsize_limit): Declare.
* ada-lang.c (check_size): Remove advance declaration.
(ada_ensure_varsize_limit): Renames check_size.
Replace calls to check_size by calls to ada_ensure_varsize_limit
throughout.
* ada-valprint.c (ada_val_print_ref): Add call to
ada_ensure_varsize_limit. Add comment explaining why.
gdb/testsuite/ChangeLog:
* gdb.ada/str_uninit: New testcase.
-----------------------------------------------------------------------
Summary of changes:
gdb/ChangeLog | 10 +++++++
gdb/ada-lang.c | 16 +++++------
gdb/ada-lang.h | 2 +
gdb/ada-valprint.c | 6 ++++
gdb/testsuite/ChangeLog | 4 +++
gdb/testsuite/gdb.ada/str_uninit.exp | 40 ++++++++++++++++++++++++++++
gdb/testsuite/gdb.ada/str_uninit/parse.adb | 22 +++++++++++++++
gdb/testsuite/gdb.ada/str_uninit/pck.adb | 28 +++++++++++++++++++
gdb/testsuite/gdb.ada/str_uninit/pck.ads | 24 ++++++++++++++++
9 files changed, 143 insertions(+), 9 deletions(-)
create mode 100644 gdb/testsuite/gdb.ada/str_uninit.exp
create mode 100644 gdb/testsuite/gdb.ada/str_uninit/parse.adb
create mode 100644 gdb/testsuite/gdb.ada/str_uninit/pck.adb
create mode 100644 gdb/testsuite/gdb.ada/str_uninit/pck.ads
hooks/post-receive
--
gdb and binutils