Also recognize __sighndlr on Solaris/x86

Message ID yddzhwdhci3.fsf@CeBiTec.Uni-Bielefeld.DE
State New
Headers show
Series
  • Also recognize __sighndlr on Solaris/x86
Related show

Commit Message

Rainer Orth Sept. 19, 2018, 12:56 p.m.
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).  Ok for master?

	Rainer

-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University


2018-06-13  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.

Comments

Simon Marchi Sept. 23, 2018, 4:03 p.m. | #1
On 2018-09-19 8:56 a.m., Rainer Orth wrote:
> 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).  Ok for master?

> 

> 	Rainer

> 


I noticed this had not been replied to, this LGTM.  I don't know much about
Solaris, but I trust that you know what you are talking about :) and this
looks pretty straightforward.

Simon
Rainer Orth Sept. 23, 2018, 6:11 p.m. | #2
Hi Simon,

> I noticed this had not been replied to, this LGTM.  I don't know much about

> Solaris, but I trust that you know what you are talking about :) and this

> looks pretty straightforward.


just a bit ;-)  I recognized that __sighndlr stuff from my work on the
libgcc unwinder (libgcc/config/{i386,sparc}/sol2-unwind.h) some time ago.

Thanks.
	Rainer

-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University

Patch

# HG changeset patch
# Parent  1ad27f17a78c023a92269db8c9fd70f6bc9ba6de
Also recognize __sighndlr on Solaris/x86

diff --git a/gdb/amd64-sol2-tdep.c b/gdb/amd64-sol2-tdep.c
--- a/gdb/amd64-sol2-tdep.c
+++ b/gdb/amd64-sol2-tdep.c
@@ -74,7 +74,8 @@  amd64_sol2_sigtramp_p (struct frame_info
 
   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
diff --git a/gdb/i386-sol2-tdep.c b/gdb/i386-sol2-tdep.c
--- a/gdb/i386-sol2-tdep.c
+++ b/gdb/i386-sol2-tdep.c
@@ -57,7 +57,8 @@  i386_sol2_sigtramp_p (struct frame_info 
 
   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