Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: "Joseph S. Myers" <joseph@codesourcery.com>
To: Andrew Cagney <cagney@gnu.org>
Cc: Mark Kettenis <kettenis@gnu.org>, gdb-patches@gcc.gnu.org
Subject: Re: Patch to support AMD64 Solaris 10
Date: Mon, 01 Nov 2004 20:08:00 -0000	[thread overview]
Message-ID: <Pine.LNX.4.61.0411012006460.8637@digraph.polyomino.org.uk> (raw)
In-Reply-To: <41866793.1070102@gnu.org>

On Mon, 1 Nov 2004, Andrew Cagney wrote:

> The only thing really blocking this patch is ``deprecation''.  And there, the
> same patch minus the TM file would be acceptable (such a GDB would even build
> and to a point work) (notice how test results are not one of the acceptance
> criteria ;-).
> 
> Joseph, can you submit an up-to-date patch _minus_ the TM file I'll approve
> it?  By getting that committed we can get the bulk of the patch off the table.
> Then we can follow up with smaller patches addressing each of the remaining
> problems.  First with the missing multi-arch macros, and second with any
> concerns with *-nat files.

Here is a patch reformatted as requested and without the 
DEPRECATED_TM_FILE setting.

-- 
Joseph S. Myers
joseph@codesourcery.com

2004-11-01  Joseph S. Myers  <joseph@codesourcery.com>

	* Makefile.in (ALLDEPFILES): Add amd64-sol2-tdep.c.
	(amd64-sol2-tdep.o): Add dependencies.
	* amd64-sol2-tdep.c, config/i386/sol2-64.mh,
	config/i386/sol2-64.mt: New files.
	* i386-sol2-nat.c (amd64_sol2_gregset64_reg_offset,
	amd64_sol2_gregset32_reg_offset, _initialize_amd64_sol2_nat): New.
	(supply_gregset): Correct order of arguments to
	amd64_supply_native_gregset.
	(fill_gregset): Correct order of arguments to
	amd64_collect_native_gregset.
	* configure.host (i[34567]86-*-solaris2.1[0-9]*): Add new case.
	* configure.tgt (i[34567]86-*-solaris2.1[0-9]*): Likewise.
	* configure.in (*-*-solaris2.[[6789]]): Add *-*-solaris2.1[[0-9]]
	for definition of NEW_PROC_API.
	* configure: Regenerate.

diff -rupN gdb/Makefile.in gdb-new/Makefile.in
--- gdb/Makefile.in	2004-10-31 10:13:00.000000000 +0000
+++ gdb-new/Makefile.in	2004-10-31 20:17:27.000000000 +0000
@@ -1360,6 +1360,7 @@ ALLDEPFILES = \
 	amd64nbsd-nat.c amd64nbsd-tdep.c \
 	amd64obsd-nat.c amd64obsd-tdep.c \
 	amd64-linux-nat.c amd64-linux-tdep.c \
+	amd64-sol2-tdep.c \
 	arm-linux-nat.c arm-linux-tdep.c arm-tdep.c \
 	armnbsd-nat.c armnbsd-tdep.c \
 	avr-tdep.c \
@@ -1694,6 +1695,9 @@ amd64obsd-tdep.o: amd64obsd-tdep.c $(def
 	$(symtab_h) $(objfiles_h) $(osabi_h) $(regset_h) $(target_h) \
 	$(gdb_assert_h) $(gdb_string_h) $(amd64_tdep_h) $(i387_tdep_h) \
 	$(solib_svr4_h)
+amd64-sol2-tdep.o: amd64-sol2-tdep.c $(defs_h) $(frame_h) $(gdbcore_h) \
+	$(regcache_h) $(osabi_h) $(symtab_h) $(gdb_string_h) $(amd64_tdep_h) \
+	$(solib_svr4_h)
 amd64-tdep.o: amd64-tdep.c $(defs_h) $(arch_utils_h) $(block_h) \
 	$(dummy_frame_h) $(frame_h) $(frame_base_h) $(frame_unwind_h) \
 	$(inferior_h) $(gdbcmd_h) $(gdbcore_h) $(objfiles_h) $(regcache_h) \
diff -rupN gdb/amd64-sol2-tdep.c gdb-new/amd64-sol2-tdep.c
--- gdb/amd64-sol2-tdep.c	1970-01-01 00:00:00.000000000 +0000
+++ gdb-new/amd64-sol2-tdep.c	2004-11-01 16:54:02.000000000 +0000
@@ -0,0 +1,125 @@
+/* Target-dependent code for AMD64 Solaris.
+
+   Copyright 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+   Contributed by Joseph Myers, CodeSourcery, LLC.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   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.  */
+
+#include "defs.h"
+#include "frame.h"
+#include "gdbcore.h"
+#include "regcache.h"
+#include "osabi.h"
+#include "symtab.h"
+
+#include "gdb_string.h"
+
+#include "amd64-tdep.h"
+#include "solib-svr4.h"
+
+/* Mapping between the general-purpose registers in gregset_t format
+   and GDB's register cache layout.  */
+
+/* From <sys/regset.h>.  */
+static int amd64_sol2_gregset_reg_offset[] = {
+  14 * 8,			/* %rax */
+  11 * 8,			/* %rbx */
+  13 * 8,			/* %rcx */
+  12 * 8,			/* %rdx */
+  9 * 8,			/* %rsi */
+  8 * 8,			/* %rdi */
+  10 * 8,			/* %rbp */
+  20 * 8,			/* %rsp */
+  7 * 8,			/* %r8 ... */
+  6 * 8,
+  5 * 8,
+  4 * 8,
+  3 * 8,
+  2 * 8,
+  1 * 8,
+  0 * 8,			/* ... %r15 */
+  17 * 8,			/* %rip */
+  16 * 8,			/* %eflags */
+  18 * 8,			/* %cs */
+  21 * 8,			/* %ss */
+  25 * 8,			/* %ds */
+  24 * 8,			/* %es */
+  22 * 8,			/* %fs */
+  23 * 8			/* %gs */
+};
+\f
+
+/* Return whether the frame preceding NEXT_FRAME corresponds to a
+   Solaris sigtramp routine.  */
+
+static int
+amd64_sol2_sigtramp_p (struct frame_info *next_frame)
+{
+  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
+   'mcontext_t' that contains the saved set of machine registers.  */
+
+static CORE_ADDR
+amd64_sol2_mcontext_addr (struct frame_info *next_frame)
+{
+  CORE_ADDR sp, ucontext_addr;
+
+  sp = frame_unwind_register_unsigned (next_frame, AMD64_RSP_REGNUM);
+  ucontext_addr = get_frame_memory_unsigned (next_frame, sp + 8, 8);
+
+  return ucontext_addr + 72;
+}
+
+static void
+amd64_sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
+{
+  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+
+  tdep->gregset_reg_offset = amd64_sol2_gregset_reg_offset;
+  tdep->gregset_num_regs = ARRAY_SIZE (amd64_sol2_gregset_reg_offset);
+  tdep->sizeof_gregset = 28 * 8;
+
+  amd64_init_abi (info, gdbarch);
+
+  tdep->sigtramp_p = amd64_sol2_sigtramp_p;
+  tdep->sigcontext_addr = amd64_sol2_mcontext_addr;
+  tdep->sc_reg_offset = tdep->gregset_reg_offset;
+  tdep->sc_num_regs = tdep->gregset_num_regs;
+
+  /* Solaris uses SVR4-style shared libraries.  */
+  set_solib_svr4_fetch_link_map_offsets
+    (gdbarch, svr4_lp64_fetch_link_map_offsets);
+}
+\f
+
+/* Provide a prototype to silence -Wmissing-prototypes.  */
+extern void _initialize_amd64_sol2_tdep (void);
+
+void
+_initialize_amd64_sol2_tdep (void)
+{
+  gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64,
+			  GDB_OSABI_SOLARIS, amd64_sol2_init_abi);
+}
diff -rupN gdb/config/i386/sol2-64.mh gdb-new/config/i386/sol2-64.mh
--- gdb/config/i386/sol2-64.mh	1970-01-01 00:00:00.000000000 +0000
+++ gdb-new/config/i386/sol2-64.mh	2004-10-31 20:18:47.000000000 +0000
@@ -0,0 +1,4 @@
+# Host: Solaris x86_64
+NATDEPFILES= fork-child.o amd64-nat.o i386v4-nat.o i386-sol2-nat.o \
+	procfs.o proc-api.o proc-events.o proc-flags.o proc-why.o gcore.o
+NAT_FILE= nm-i386sol2.h
diff -rupN gdb/config/i386/sol2-64.mt gdb-new/config/i386/sol2-64.mt
--- gdb/config/i386/sol2-64.mt	1970-01-01 00:00:00.000000000 +0000
+++ gdb-new/config/i386/sol2-64.mt	2004-11-01 16:50:18.000000000 +0000
@@ -0,0 +1,3 @@
+# Target: Solaris x86_64
+TDEPFILES= i386-tdep.o i387-tdep.o amd64-tdep.o amd64-sol2-tdep.o \
+	i386-sol2-tdep.o corelow.o solib.o solib-svr4.o
diff -rupN gdb/configure.host gdb-new/configure.host
--- gdb/configure.host	2004-10-24 00:03:16.000000000 +0000
+++ gdb-new/configure.host	2004-10-31 20:19:23.000000000 +0000
@@ -77,6 +77,7 @@ i[34567]86-*-openbsd*)	gdb_host=obsd ;;
 i[34567]86-*-sco3.2v5*)	gdb_host=i386sco5 ;;
 i[34567]86-*-sco3.2v4*)	gdb_host=i386sco4 ;;
 i[34567]86-*-sco*)	gdb_host=i386sco ;;
+i[34567]86-*-solaris2.1[0-9]*)	gdb_host=sol2-64 ;;
 i[34567]86-*-solaris*)	gdb_host=i386sol2 ;;
 i[34567]86-*-sysv4.2*)	gdb_host=i386v42mp ;;
 i[34567]86-*-sysv4*)	gdb_host=i386v4 ;;
diff -rupN gdb/configure.in gdb-new/configure.in
--- gdb/configure.in	2004-10-11 08:48:32.000000000 +0000
+++ gdb-new/configure.in	2004-10-31 20:19:23.000000000 +0000
@@ -725,7 +725,7 @@ if test "${target}" = "${host}"; then
   *-*-unixware* | *-*-sysv4.2* | *-*-sysv5* | *-*-interix* )
       AC_DEFINE(NEW_PROC_API)
       ;;
-  *-*-solaris2.[[6789]])
+  *-*-solaris2.[[6789]] | *-*-solaris2.1[[0-9]])
       AC_DEFINE(NEW_PROC_API)
       ;;
   mips-sgi-irix5*)
diff -rupN gdb/configure.tgt gdb-new/configure.tgt
--- gdb/configure.tgt	2004-10-24 00:03:16.000000000 +0000
+++ gdb-new/configure.tgt	2004-10-31 20:19:23.000000000 +0000
@@ -89,6 +89,7 @@ i[34567]86-*-netbsd* | i[34567]86-*-knet
 i[34567]86-*-openbsd*)	gdb_target=obsd ;;
 i[34567]86-*-nto*)	gdb_target=nto ;;
 i[34567]86-*-lynxos*)	gdb_target=i386lynx ;;
+i[34567]86-*-solaris2.1[0-9]*)	gdb_target=sol2-64 ;;
 i[34567]86-*-solaris*)	gdb_target=i386sol2 ;;
 i[34567]86-*-linux*)	gdb_target=linux
 			build_gdbserver=yes
diff -rupN gdb/i386-sol2-nat.c gdb-new/i386-sol2-nat.c
--- gdb/i386-sol2-nat.c	2004-10-31 20:05:01.000000000 +0000
+++ gdb-new/i386-sol2-nat.c	2004-11-01 16:54:02.000000000 +0000
@@ -46,10 +46,62 @@
 #include "amd64-nat.h"
 #include "amd64-tdep.h"
 
+/* Mapping between the general-purpose registers in gregset_t format
+   and GDB's register cache layout.  */
+
+/* From <sys/regset.h>.  */
+static int amd64_sol2_gregset64_reg_offset[] = {
+  14 * 8,			/* %rax */
+  11 * 8,			/* %rbx */
+  13 * 8,			/* %rcx */
+  12 * 8,			/* %rdx */
+  9 * 8,			/* %rsi */
+  8 * 8,			/* %rdi */
+  10 * 8,			/* %rbp */
+  20 * 8,			/* %rsp */
+  7 * 8,			/* %r8 ... */
+  6 * 8,
+  5 * 8,
+  4 * 8,
+  3 * 8,
+  2 * 8,
+  1 * 8,
+  0 * 8,			/* ... %r15 */
+  17 * 8,			/* %rip */
+  16 * 8,			/* %eflags */
+  18 * 8,			/* %cs */
+  21 * 8,			/* %ss */
+  25 * 8,			/* %ds */
+  24 * 8,			/* %es */
+  22 * 8,			/* %fs */
+  23 * 8			/* %gs */
+};
+
+/* 32-bit registers are provided by Solaris in 64-bit format, so just
+   give a subset of the list above.  */
+static int amd64_sol2_gregset32_reg_offset[] = {
+  14 * 8,			/* %eax */
+  13 * 8,			/* %ecx */
+  12 * 8,			/* %edx */
+  11 * 8,			/* %ebx */
+  20 * 8,			/* %esp */
+  10 * 8,			/* %ebp */
+  9 * 8,			/* %esi */
+  8 * 8,			/* %edi */
+  17 * 8,			/* %eip */
+  16 * 8,			/* %eflags */
+  18 * 8,			/* %cs */
+  21 * 8,			/* %ss */
+  25 * 8,			/* %ds */
+  24 * 8,			/* %es */
+  22 * 8,			/* %fs */
+  23 * 8			/* %gs */
+};
+
 void
 supply_gregset (prgregset_t *gregs)
 {
-  amd64_supply_native_gregset (current_regcache, -1, gregs);
+  amd64_supply_native_gregset (current_regcache, gregs, -1);
 }
 
 void
@@ -61,7 +113,7 @@ supply_fpregset (prfpregset_t *fpregs)
 void
 fill_gregset (prgregset_t *gregs, int regnum)
 {
-  amd64_collect_native_gregset (current_regcache, regnum, gregs);
+  amd64_collect_native_gregset (current_regcache, gregs, regnum);
 }
 
 void
@@ -75,3 +127,19 @@ fill_fpregset (prfpregset_t *fpregs, int
 /* For 32-bit Solaris x86, we use the Unix SVR4 code in i386v4-nat.c.  */
 
 #endif
+
+/* Provide a prototype to silence -Wmissing-prototypes.  */
+extern void _initialize_amd64_sol2_nat (void);
+
+void
+_initialize_amd64_sol2_nat (void)
+{
+#if defined (PR_MODEL_NATIVE) && (PR_MODEL_NATIVE == PR_MODEL_LP64)
+  amd64_native_gregset32_reg_offset = amd64_sol2_gregset32_reg_offset;
+  amd64_native_gregset32_num_regs =
+    ARRAY_SIZE (amd64_sol2_gregset32_reg_offset);
+  amd64_native_gregset64_reg_offset = amd64_sol2_gregset64_reg_offset;
+  amd64_native_gregset64_num_regs =
+    ARRAY_SIZE (amd64_sol2_gregset64_reg_offset);
+#endif
+}


  reply	other threads:[~2004-11-01 20:08 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-10-25 17:48 Joseph S. Myers
2004-10-25 19:39 ` Andrew Cagney
2004-10-25 19:55 ` Mark Kettenis
2004-10-25 22:03   ` Joseph S. Myers
2004-10-26 19:44   ` Joseph S. Myers
2004-10-26 20:50     ` Mark Kettenis
2004-10-30 19:57       ` Mark Kettenis
2004-10-30 20:01         ` Joseph S. Myers
2004-11-01 16:43 ` Andrew Cagney
2004-11-01 20:08   ` Joseph S. Myers [this message]
2004-11-01 20:34     ` Mark Kettenis

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Pine.LNX.4.61.0411012006460.8637@digraph.polyomino.org.uk \
    --to=joseph@codesourcery.com \
    --cc=cagney@gnu.org \
    --cc=gdb-patches@gcc.gnu.org \
    --cc=kettenis@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox