/* Target-dependent code for Solaris x86.
- Copyright 2002, 2003 Free Software Foundation, Inc.
+
+ Copyright (C) 2002, 2003, 2004, 2006, 2007 Free Software Foundation, Inc.
This file is part of GDB.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
+ Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
#include "defs.h"
#include "value.h"
#include "osabi.h"
+#include "gdb_string.h"
+
+#include "sol2-tdep.h"
#include "i386-tdep.h"
+#include "solib-svr4.h"
/* From <ia32/sys/reg.h>. */
static int i386_sol2_gregset_reg_offset[] =
0 * 4 /* %gs */
};
+/* Return whether the frame preceding NEXT_FRAME corresponds to a
+ Solaris sigtramp routine. */
+
static int
-i386_sol2_pc_in_sigtramp (CORE_ADDR pc, char *name)
+i386_sol2_sigtramp_p (struct frame_info *next_frame)
{
- /* Signal handler frames under Solaris 2 are recognized by a return
- address of 0xffffffff. */
- return (pc == 0xffffffff);
+ CORE_ADDR pc = frame_pc_unwind (next_frame);
+ char *name;
+
+ find_pc_partial_function (pc, &name, NULL, NULL);
+ return (name && (strcmp ("sigacthandler", name) == 0
+ || strcmp (name, "ucbsigvechandler") == 0));
}
/* Solaris doesn't have a `struct sigcontext', but it does have a
tdep->sizeof_gregset = 19 * 4;
tdep->sizeof_fpregset = 380;
+ /* Signal trampolines are slightly different from SVR4. */
+ tdep->sigtramp_p = i386_sol2_sigtramp_p;
tdep->sigcontext_addr = i386_sol2_mcontext_addr;
tdep->sc_reg_offset = tdep->gregset_reg_offset;
tdep->sc_num_regs = tdep->gregset_num_regs;
- /* Signal trampolines are slightly different from SVR4. */
- set_gdbarch_pc_in_sigtramp (gdbarch, i386_sol2_pc_in_sigtramp);
+ /* Solaris has SVR4-style shared libraries. */
+ set_gdbarch_skip_solib_resolver (gdbarch, sol2_skip_solib_resolver);
+ set_solib_svr4_fetch_link_map_offsets
+ (gdbarch, svr4_ilp32_fetch_link_map_offsets);
}
\f