This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]