aboutsummaryrefslogtreecommitdiff
path: root/gdb/i386-sol2-nat.c
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2004-11-01 21:05:56 +0000
committerJoseph Myers <joseph@codesourcery.com>2004-11-01 21:05:56 +0000
commit0bbc026efac8de9f64a414302cf4f1530260a703 (patch)
treed63833851727ed991c4e191ac03da885a3ebb398 /gdb/i386-sol2-nat.c
parent3d38a0a50c78042b15a3453d07fbd1c5486d2269 (diff)
downloadgdb-0bbc026efac8de9f64a414302cf4f1530260a703.zip
gdb-0bbc026efac8de9f64a414302cf4f1530260a703.tar.gz
gdb-0bbc026efac8de9f64a414302cf4f1530260a703.tar.bz2
* 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.
Diffstat (limited to 'gdb/i386-sol2-nat.c')
-rw-r--r--gdb/i386-sol2-nat.c72
1 files changed, 70 insertions, 2 deletions
diff --git a/gdb/i386-sol2-nat.c b/gdb/i386-sol2-nat.c
index cdfb631..d91d2ba 100644
--- a/gdb/i386-sol2-nat.c
+++ b/gdb/i386-sol2-nat.c
@@ -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 regnum)
/* 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
+}