Also recognize __sighndlr on Solaris/x86
authorRainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
Sun, 23 Sep 2018 17:49:14 +0000 (19:49 +0200)
committerRainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
Sun, 23 Sep 2018 17:49:14 +0000 (19:49 +0200)
Unlike Solaris/SPARC, the __sighndlr function isn't recognized as part
of a signal handler, causing a couple of testcases to fail.

The following patch fixes that.  A followup patch will move this to
common code to avoid such unnecessary discrepancies between
Solaris/SPARC and x86 in the future.

While this fixes a couple of backtraces to now correctly print

#1  <signal handler called>

they often fail later with

#2  0x0ff3ffffff00857f in ?? ()
Backtrace stopped: Cannot access memory at address 0xff3000002e0886f

which needs further investigation.

Tested on amd64-pc-solaris2.11 (running the tests with both -m64 and
-m32).

* amd64-sol2-tdep.c (amd64_sol2_sigtramp_p): Also recognize
__sighndlr.
* i386-sol2-tdep.c (i386_sol2_sigtramp_p): Likewise.

gdb/ChangeLog
gdb/amd64-sol2-tdep.c
gdb/i386-sol2-tdep.c

index 9aa3297..686c99a 100644 (file)
@@ -1,3 +1,9 @@
+2018-09-23  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+       * amd64-sol2-tdep.c (amd64_sol2_sigtramp_p): Also recognize
+       __sighndlr.
+       * i386-sol2-tdep.c (i386_sol2_sigtramp_p): Likewise.
+
 2018-08-02  Jon Turney  <jon.turney@dronecode.org.uk>
 
        * windows-nat.c (windows_nat_target::wait): Remove a spurious
index 9504f19..7211186 100644 (file)
@@ -74,7 +74,8 @@ amd64_sol2_sigtramp_p (struct frame_info *this_frame)
 
   find_pc_partial_function (pc, &name, NULL, NULL);
   return (name && (strcmp ("sigacthandler", name) == 0
-                  || strcmp (name, "ucbsigvechandler") == 0));
+                  || strcmp (name, "ucbsigvechandler") == 0
+                  || strcmp (name, "__sighndlr") == 0));
 }
 
 /* Solaris doesn't have a 'struct sigcontext', but it does have a
index ead1dbb..69d6786 100644 (file)
@@ -57,7 +57,8 @@ i386_sol2_sigtramp_p (struct frame_info *this_frame)
 
   find_pc_partial_function (pc, &name, NULL, NULL);
   return (name && (strcmp ("sigacthandler", name) == 0
-                  || strcmp (name, "ucbsigvechandler") == 0));
+                  || strcmp (name, "ucbsigvechandler") == 0
+                  || strcmp (name, "__sighndlr") == 0));
 }
 
 /* Solaris doesn't have a `struct sigcontext', but it does have a