gdb_bfd_unref failed assertion on AIX.
authorJoel Brobecker <brobecker@gnat.com>
Tue, 2 Oct 2012 15:05:42 +0000 (15:05 +0000)
committerJoel Brobecker <brobecker@gnat.com>
Tue, 2 Oct 2012 15:05:42 +0000 (15:05 +0000)
Trying to run any program on AIX triggers a failed assertion:

    (gdb) run
    Starting program: /[...]/simple_main
    /[...]/gdb_bfd.c:288: internal-error: gdb_bfd_unref: Assertion `gdata->refc >= 1' failed.
    A problem internal to GDB has been detected,
    further debugging may prove unreliable.
    Quit this debugging session? (y or n)

What happens is that we have a loop where we forgot to update
the value of "last", resulting in the loop unref'ing the same
BFD over and over again. We bomb the second time around, when
triggering an assertion on the ref counter.

gdb/ChangeLog:

        * rs6000-nat.c (add_vmap): Set "last" to "next" after having
        unref'ed it.

gdb/ChangeLog
gdb/rs6000-nat.c

index 20631b52d3cabb5f693011e2486f5a0a38440788..0333167456b0828ba52b45fe8388a4208dab1edd 100644 (file)
@@ -1,3 +1,8 @@
+2012-10-02  Joel Brobecker  <brobecker@adacore.com>
+
+       * rs6000-nat.c (add_vmap): Set "last" to "next" after having
+       unref'ed it.
+
 2012-10-01  Andrew Burgess  <aburgess@broadcom.com>
 
        * target.c (simple_search_memory): Include access length in
index 3eb2cd70993e20672d70aebc8e15eb585ce45569..2d2df5bce2da46f18504716cab0e7a97944bdc6d 100644 (file)
@@ -771,6 +771,7 @@ add_vmap (LdInfo *ldi)
 
          next = gdb_bfd_openr_next_archived_file (abfd, last);
          gdb_bfd_unref (last);
+         last = next;
        }
 
       if (!last)