This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [hpux] Improve sigtramp frame identification


> Date: Sun, 11 Dec 2005 22:39:12 +0800
> From: Randolph Chung <randolph@tausq.org>
> 
> > Hmm, here's an alternative approach: if we're in an export stub, look
> > if the stub leads us to a function that has HP_UX_interrupt_marker set
> > in its unwind record.  This makes us read an instruction from the
> > inferior, but it should be pretty robust.
> > 
> > ok?
> 
> Hrm, this seems to assume that you are sitting at a specific insn of the 
> export stub when doing unwinding. We should be able to unwind from any 
> insn in the export stub, right?

Uh, yes, you're right.  The attached patch works indeed better.  That
bit ok now?

> > Now that signal trampolines get detected again on HP-UX 10.20, I
> > noticed another recent change that seems to have broken things. Your
> > recent overhaul of hppa_hpux_sigtramp_frame_unwind_cache added these
> > two lines:
> > 
> >   info->saved_regs[HPPA_PCOQ_HEAD_REGNUM].addr = 
> >     info->saved_regs[HPPA_RP_REGNUM].addr;
> > 
> > This breaks stuff, since at least on HP-UX 10.20 %pcoqh as read from
> > the signal state is correct.  And I have a hard time believing that
> > this would be different on HP-UX 11.xx.  Can you explain why you added
> > this?
> 
> You are right, I shouldn't have added that. I thought this fixed a 
> problem with signal frame unwinding when I was looking at 
> hppa64-hp-hpux11.11, but actually I think something else is broken. 
> Sorry for not testing this more thoroughly before committing. I'll back 
> out that change tomorrow.

Thanks!

Mark


Index: hppa-hpux-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/hppa-hpux-tdep.c,v
retrieving revision 1.45
diff -u -p -r1.45 hppa-hpux-tdep.c
--- hppa-hpux-tdep.c	19 Nov 2005 12:55:55 -0000	1.45
+++ hppa-hpux-tdep.c	11 Dec 2005 19:14:14 -0000
@@ -1233,9 +1233,6 @@ hppa_hpux_sigtramp_frame_unwind_cache (s
 
   /* TODO: fp regs */
 
-  info->saved_regs[HPPA_PCOQ_HEAD_REGNUM].addr = 
-    info->saved_regs[HPPA_RP_REGNUM].addr;
-
   info->base = frame_unwind_register_unsigned (next_frame, HPPA_SP_REGNUM);
 
   return info;
@@ -1279,6 +1276,22 @@ hppa_hpux_sigtramp_unwind_sniffer (struc
 
   u = find_unwind_entry (pc);
 
+  /* If this is an export stub, try to get the unwind descriptor for
+     the actual function itself.  */
+  if (u && u->stub_unwind.stub_type == EXPORT)
+    {
+      gdb_byte buf[HPPA_INSN_SIZE];
+      unsigned long insn;
+
+      if (!safe_frame_unwind_memory (next_frame, u->region_start,
+				     buf, sizeof buf))
+	return NULL;
+
+      insn = extract_unsigned_integer (buf, sizeof buf);
+      if ((insn & 0xffe0e000) == 0xe8400000)
+	u = find_unwind_entry(u->region_start + hppa_extract_17 (insn) + 8);
+    }
+
   if (u && u->HP_UX_interrupt_marker)
     return &hppa_hpux_sigtramp_frame_unwind;
 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]