- [expr-cumulative] Fix using-directive memory leak (Sami Wagiaalla, BZ

578351).
This commit is contained in:
Jan Kratochvil 2010-04-02 22:05:55 +00:00
parent 2459ca53eb
commit 0e42458d97
2 changed files with 217 additions and 1 deletions

View File

@ -0,0 +1,209 @@
FSF GDB variant is at:
http://sourceware.org/ml/gdb-patches/2010-03/msg00789.html
commit 56b45f494f647360f9d6ff84f12f59c08cbe05af
Author: Sami Wagiaalla <swagiaal@redhat.com>
Date: Mon Mar 29 16:08:58 2010 -0400
Fix using_directive memory leak.
Index: gdb-7.0.1/gdb/buildsym.c
===================================================================
--- gdb-7.0.1.orig/gdb/buildsym.c 2009-07-02 19:21:05.000000000 +0200
+++ gdb-7.0.1/gdb/buildsym.c 2010-04-02 23:41:10.000000000 +0200
@@ -387,6 +387,7 @@ finish_block (struct symbol *symbol, str
}
block_set_using (block, using_directives, &objfile->objfile_obstack);
+ using_directives = NULL;
record_pending_block (objfile, block, opblock);
Index: gdb-7.0.1/gdb/cp-namespace.c
===================================================================
--- gdb-7.0.1.orig/gdb/cp-namespace.c 2010-04-02 23:40:44.000000000 +0200
+++ gdb-7.0.1/gdb/cp-namespace.c 2010-04-02 23:45:37.000000000 +0200
@@ -122,7 +122,8 @@ cp_scan_for_anonymous_namespaces (const
anonymous namespace. So add symbols in it to the
namespace given by the previous component if there is
one, or to the global namespace if there isn't. */
- cp_add_using_directive (dest, src, "", "", 0);
+ cp_add_using_directive (dest, src, "", "", 0,
+ &SYMBOL_SYMTAB (symbol)->objfile->objfile_obstack);
}
/* The "+ 2" is for the "::". */
previous_component = next_component + 2;
@@ -134,11 +135,17 @@ cp_scan_for_anonymous_namespaces (const
}
/* Add a using directive to using_list. If the using directive in question
- has already been added, don't add it twice. */
+ has already been added, don't add it twice.
+ Create a new struct using_direct which imports the namespace SRC into the
+ scope DEST. ALIAS is the name of the imported namespace in the current
+ scope. If ALIAS is NULL then the namespace is known by its original name.
+ The arguments are copied into newly allocated memory so they can be
+ temporaries. */
void
cp_add_using_directive (const char *dest, const char *src, const char* alias,
- const char *declaration, const int line_number)
+ const char *declaration, const int line_number,
+ struct obstack *obstack)
{
struct using_direct *current;
struct using_direct *new;
@@ -148,12 +155,26 @@ cp_add_using_directive (const char *dest
for (current = using_directives; current != NULL; current = current->next)
{
if (strcmp (current->import_src, src) == 0
- && strcmp (current->import_dest, dest) == 0)
+ && strcmp (current->import_dest, dest) == 0
+ && ((alias == NULL && current->alias == NULL)
+ || (alias != NULL && current->alias != NULL
+ && strcmp (alias, current->alias) == 0)))
return;
}
- using_directives = cp_add_using (dest, src, alias, declaration,
- line_number, using_directives);
+ new = OBSTACK_ZALLOC (obstack, struct using_direct);
+
+ new->import_src = obsavestring (src, strlen (src), obstack);
+ new->import_dest = obsavestring (dest, strlen (dest), obstack);
+
+ if (alias != NULL)
+ new->alias = obsavestring (alias, strlen (alias), obstack);
+
+ new->declaration = obsavestring (declaration, strlen (declaration), obstack);
+ new->line_number = line_number;
+
+ new->next = using_directives;
+ using_directives = new;
}
@@ -205,37 +226,6 @@ cp_is_anonymous (const char *namespace)
!= NULL);
}
-/* Create a new struct using direct which imports the namespace SRC
- into the scope DEST. ALIAS is the name of the imported namespace
- in the current scope. If ALIAS is an empty string then the
- namespace is known by its original name.
-
- Set its next member in the linked list to NEXT; allocate all memory
- using xmalloc. It copies the strings, so NAME can be a temporary
- string. */
-
-struct using_direct *
-cp_add_using (const char *dest,
- const char *src,
- const char *alias,
- const char *declaration,
- const int line_number,
- struct using_direct *next)
-{
- struct using_direct *retval;
-
- retval = xmalloc (sizeof (struct using_direct));
- retval->import_src = savestring (src, strlen (src));
- retval->import_dest = savestring (dest, strlen (dest));
- retval->alias = savestring (alias, strlen (alias));
- retval->declaration = savestring (declaration, strlen (declaration));
- retval->line_number = line_number;
- retval->next = next;
- retval->searched = 0;
-
- return retval;
-}
-
/* Make a copy of the using directives in the list pointed to by
USING, using OBSTACK to allocate memory. Free all memory pointed
to by USING via xfree. */
Index: gdb-7.0.1/gdb/cp-support.h
===================================================================
--- gdb-7.0.1.orig/gdb/cp-support.h 2010-04-02 23:40:44.000000000 +0200
+++ gdb-7.0.1/gdb/cp-support.h 2010-04-02 23:41:10.000000000 +0200
@@ -101,14 +101,8 @@ extern void cp_add_using_directive (cons
const char *src,
const char *alias,
const char *declaration,
- const int line_number);
-
-extern struct using_direct *cp_add_using (const char *dest,
- const char *src,
- const char *alias,
- const char *declaration,
- const int line_number,
- struct using_direct *next);
+ const int line_number,
+ struct obstack *obstack);
extern void cp_initialize_namespace (void);
Index: gdb-7.0.1/gdb/dwarf2read.c
===================================================================
--- gdb-7.0.1.orig/gdb/dwarf2read.c 2010-04-02 23:41:04.000000000 +0200
+++ gdb-7.0.1/gdb/dwarf2read.c 2010-04-02 23:42:37.000000000 +0200
@@ -3793,12 +3793,12 @@ read_import_statement (struct die_info *
}
}
- using_directives = cp_add_using (import_prefix,
- canonical_name,
- import_alias,
- imported_declaration,
- line_number,
- using_directives);
+ cp_add_using_directive (import_prefix,
+ canonical_name,
+ import_alias,
+ imported_declaration,
+ line_number,
+ &cu->objfile->objfile_obstack);
}
static void
@@ -5972,7 +5972,12 @@ read_namespace (struct die_info *die, st
if (is_anonymous)
{
const char *previous_prefix = determine_prefix (die, cu);
- cp_add_using_directive (previous_prefix, TYPE_NAME (type), "", "", dwarf2_read_decl_line(die, cu));
+ cp_add_using_directive (previous_prefix,
+ TYPE_NAME (type),
+ "",
+ "",
+ dwarf2_read_decl_line(die, cu),
+ &objfile->objfile_obstack);
}
}
Index: gdb-7.0.1/gdb/testsuite/gdb.cp/gdb2384-base.cc
===================================================================
--- gdb-7.0.1.orig/gdb/testsuite/gdb.cp/gdb2384-base.cc 2009-01-03 06:58:04.000000000 +0100
+++ gdb-7.0.1/gdb/testsuite/gdb.cp/gdb2384-base.cc 2010-04-02 23:41:10.000000000 +0200
@@ -23,6 +23,8 @@ base::base (int _x)
{
}
+using namespace B;
+
int
base::meth ()
{
Index: gdb-7.0.1/gdb/testsuite/gdb.cp/gdb2384-base.h
===================================================================
--- gdb-7.0.1.orig/gdb/testsuite/gdb.cp/gdb2384-base.h 2009-01-03 06:58:04.000000000 +0100
+++ gdb-7.0.1/gdb/testsuite/gdb.cp/gdb2384-base.h 2010-04-02 23:41:10.000000000 +0200
@@ -16,6 +16,10 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+namespace B{
+ int x;
+}
+
class base
{
public:

View File

@ -36,7 +36,7 @@ Version: 7.0.1
# The release always contains a leading reserved number, start it at 1.
# `upstream' is not a part of `name' to stay fully rpm dependencies compatible for the testing.
Release: 37%{?_with_upstream:.upstream}%{dist}
Release: 38%{?_with_upstream:.upstream}%{dist}
License: GPLv3+
Group: Development/Debuggers
@ -492,6 +492,9 @@ Patch429: gdb-bz562975-std-terminate-double-free.patch
# Fix incorrect relocation of sections with duplicate name (BZ 575737).
Patch431: gdb-bz575737-pie-duplicate-section-name.patch
# [expr-cumulative] Fix using-directive memory leak (Sami Wagiaalla, BZ 578351).
Patch437: gdb-using-directive-leak.patch
BuildRequires: ncurses-devel%{?_isa} texinfo gettext flex bison expat-devel%{?_isa}
Requires: readline%{?_isa}
BuildRequires: readline-devel%{?_isa}
@ -760,6 +763,7 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c
%patch428 -p1
%patch429 -p1
%patch431 -p1
%patch437 -p1
# Always verify their applicability.
%patch393 -p1
%patch335 -p1
@ -1085,6 +1089,9 @@ fi
%endif
%changelog
* Fri Apr 2 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.1-38.fc12
- [expr-cumulative] Fix using-directive memory leak (Sami Wagiaalla, BZ 578351).
* Wed Mar 31 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.1-37.fc12
- Fix crash due to gdb-readline-6.0-signal.patch (BZ 575516)