- Fix an occasional crash during printing of missing debuginfo rpms (BZ
505401).
This commit is contained in:
parent
638b7b7c33
commit
c030186760
@ -421,7 +421,7 @@ Index: gdb-6.8.50.20090302/gdb/symfile.c
|
|||||||
}
|
}
|
||||||
|
|
||||||
@@ -1802,14 +2154,33 @@ debug_print_missing (const char *binary,
|
@@ -1802,14 +2154,33 @@ debug_print_missing (const char *binary,
|
||||||
}
|
|
||||||
*slot = missing_filepair;
|
*slot = missing_filepair;
|
||||||
|
|
||||||
- /* We do not collect and flush these messages as each such message
|
- /* We do not collect and flush these messages as each such message
|
||||||
|
@ -646,7 +646,7 @@ Index: gdb-6.8.50.20090302/gdb/symfile.c
|
|||||||
|
|
||||||
if (retval != NULL && !build_id_verify (retval, build_id))
|
if (retval != NULL && !build_id_verify (retval, build_id))
|
||||||
{
|
{
|
||||||
@@ -1279,9 +1676,142 @@ build_id_to_debug_filename (struct build
|
@@ -1279,9 +1676,150 @@ build_id_to_debug_filename (struct build
|
||||||
retval = NULL;
|
retval = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -700,8 +700,8 @@ Index: gdb-6.8.50.20090302/gdb/symfile.c
|
|||||||
+ const struct missing_filepair *elem2)
|
+ const struct missing_filepair *elem2)
|
||||||
+{
|
+{
|
||||||
+ return strcmp (elem1->binary, elem2->binary) == 0
|
+ return strcmp (elem1->binary, elem2->binary) == 0
|
||||||
+ && ((elem1->debug == NULL && elem2->debug == NULL)
|
+ && ((elem1->debug == NULL) == (elem2->debug == NULL))
|
||||||
+ || strcmp (elem1->debug, elem2->debug) == 0);
|
+ && (elem1->debug == NULL || strcmp (elem1->debug, elem2->debug) == 0);
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+static void
|
+static void
|
||||||
@ -732,6 +732,7 @@ Index: gdb-6.8.50.20090302/gdb/symfile.c
|
|||||||
+{
|
+{
|
||||||
+ size_t binary_len0 = strlen (binary) + 1;
|
+ size_t binary_len0 = strlen (binary) + 1;
|
||||||
+ size_t debug_len0 = debug ? strlen (debug) + 1 : 0;
|
+ size_t debug_len0 = debug ? strlen (debug) + 1 : 0;
|
||||||
|
+ struct missing_filepair missing_filepair_find;
|
||||||
+ struct missing_filepair *missing_filepair;
|
+ struct missing_filepair *missing_filepair;
|
||||||
+ struct missing_filepair **slot;
|
+ struct missing_filepair **slot;
|
||||||
+
|
+
|
||||||
@ -747,6 +748,27 @@ Index: gdb-6.8.50.20090302/gdb/symfile.c
|
|||||||
+ missing_filepair_xcalloc, NULL);
|
+ missing_filepair_xcalloc, NULL);
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
|
+ /* Use MISSING_FILEPAIR_FIND first instead of calling obstack_alloc with
|
||||||
|
+ obstack_free in the case of a (rare) match. The problem is ALLOC_F for
|
||||||
|
+ MISSING_FILEPAIR_HASH allocates from MISSING_FILEPAIR_OBSTACK maintenance
|
||||||
|
+ structures for MISSING_FILEPAIR_HASH. Calling obstack_free would possibly
|
||||||
|
+ not to free only MISSING_FILEPAIR but also some such structures (allocated
|
||||||
|
+ during the htab_find_slot call). */
|
||||||
|
+
|
||||||
|
+ missing_filepair_find.binary = (char *) binary;
|
||||||
|
+ missing_filepair_find.debug = (char *) debug;
|
||||||
|
+ slot = (struct missing_filepair **) htab_find_slot (missing_filepair_hash,
|
||||||
|
+ &missing_filepair_find,
|
||||||
|
+ INSERT);
|
||||||
|
+
|
||||||
|
+ /* While it may be still printed duplicitely with the missing debuginfo file
|
||||||
|
+ * it is due to once printing about the binary file build-id link and once
|
||||||
|
+ * about the .debug file build-id link as both the build-id symlinks are
|
||||||
|
+ * located in the debuginfo package. */
|
||||||
|
+
|
||||||
|
+ if (*slot != NULL)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
+ missing_filepair = obstack_alloc (&missing_filepair_obstack,
|
+ missing_filepair = obstack_alloc (&missing_filepair_obstack,
|
||||||
+ sizeof (*missing_filepair) - 1
|
+ sizeof (*missing_filepair) - 1
|
||||||
+ + binary_len0 + debug_len0);
|
+ + binary_len0 + debug_len0);
|
||||||
@ -760,20 +782,6 @@ Index: gdb-6.8.50.20090302/gdb/symfile.c
|
|||||||
+ else
|
+ else
|
||||||
+ missing_filepair->debug = NULL;
|
+ missing_filepair->debug = NULL;
|
||||||
+
|
+
|
||||||
+ slot = (struct missing_filepair **) htab_find_slot (missing_filepair_hash,
|
|
||||||
+ missing_filepair,
|
|
||||||
+ INSERT);
|
|
||||||
+
|
|
||||||
+ /* While it may be still printed duplicitely with the missing debuginfo file
|
|
||||||
+ * it is due to once printing about the binary file build-id link and once
|
|
||||||
+ * about the .debug file build-id link as both the build-id symlinks are
|
|
||||||
+ * located in the debuginfo package. */
|
|
||||||
+
|
|
||||||
+ if (*slot != NULL)
|
|
||||||
+ {
|
|
||||||
+ obstack_free (&missing_filepair_obstack, missing_filepair);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+ *slot = missing_filepair;
|
+ *slot = missing_filepair;
|
||||||
+
|
+
|
||||||
+ /* We do not collect and flush these messages as each such message
|
+ /* We do not collect and flush these messages as each such message
|
||||||
|
5
gdb.spec
5
gdb.spec
@ -15,7 +15,7 @@ Version: 6.8.50.20090302
|
|||||||
|
|
||||||
# The release always contains a leading reserved number, start it at 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.
|
# `upstream' is not a part of `name' to stay fully rpm dependencies compatible for the testing.
|
||||||
Release: 30%{?_with_upstream:.upstream}%{?dist}
|
Release: 31%{?_with_upstream:.upstream}%{?dist}
|
||||||
|
|
||||||
License: GPLv3+
|
License: GPLv3+
|
||||||
Group: Development/Debuggers
|
Group: Development/Debuggers
|
||||||
@ -891,6 +891,9 @@ fi
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Jun 12 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-31
|
||||||
|
- Fix an occasional crash during printing of missing debuginfo rpms (BZ 505401).
|
||||||
|
|
||||||
* Fri Jun 12 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-30
|
* Fri Jun 12 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-30
|
||||||
- Implement DW_OP_call_frame_cfa (for recent GCC).
|
- Implement DW_OP_call_frame_cfa (for recent GCC).
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user