breakpoint.c: fix libc probe scan when no get_longjmp_target exists.
authorTiago Stürmer Daitx <tdaitx@linux.vnet.ibm.com>
Fri, 1 Nov 2013 16:41:37 +0000 (11:41 -0500)
committerTiago Stürmer Daitx <tdaitx@linux.vnet.ibm.com>
Fri, 1 Nov 2013 16:41:37 +0000 (11:41 -0500)
As discussed on the GDB ML[1], libc probes for longjmp were not being
loaded if a custom <arch>_get_longjmp_target function was not
implemented.

This is trivially fixed by moving the 'if (!gdbarch_get_longjmp_target_p
(gdbarch))' down, just bellow libc probe code and above the per-objfile
cache lookup.

While the condition could also be removed altogether with no
side-effects, it is in fact an optimization to avoid searching for
symbols if the arch doesn't provide support for get_longjmp_target().

This has been tested on PPC and PPC64.

[1] https://sourceware.org/ml/gdb/2013-10/msg00191.html

gdb/
2013-11-01  Tiago Stürmer Daitx  <tdaitx@linux.vnet.ibm.com>

        * breakpoint.c (create_longjmp_master_breakpoint): Allow libc
        probe scan even when the arch provides no get_longjmp_target.

gdb/ChangeLog
gdb/breakpoint.c

index 60a2bd91a68fc60a96a686e37e501f8d0de179f6..2d6a7517999f0dbceb65a72128917924228600de 100644 (file)
@@ -1,3 +1,8 @@
+2013-11-01  Tiago Stürmer Daitx  <tdaitx@linux.vnet.ibm.com>
+
+       * breakpoint.c (create_longjmp_master_breakpoint): Allow libc
+       probe scan even when the arch provides no get_longjmp_target.
+
 2013-10-31  Pedro Alves  <palves@redhat.com>
 
        * infrun.c (handle_syscall_event): Don't set or clear stop_signal.
index 1782c99ea15f22cecfab8ef2378750f8e3384eb8..ffe73fdc4ecfa0bc4127e3e598b9bef7ea28a6bc 100644 (file)
@@ -3226,8 +3226,6 @@ create_longjmp_master_breakpoint (void)
       struct breakpoint_objfile_data *bp_objfile_data;
 
       gdbarch = get_objfile_arch (objfile);
-      if (!gdbarch_get_longjmp_target_p (gdbarch))
-       continue;
 
       bp_objfile_data = get_breakpoint_objfile_data (objfile);
 
@@ -3277,6 +3275,9 @@ create_longjmp_master_breakpoint (void)
          continue;
        }
 
+      if (!gdbarch_get_longjmp_target_p (gdbarch))
+       continue;
+
       for (i = 0; i < NUM_LONGJMP_NAMES; i++)
        {
          struct breakpoint *b;