* sysdeps/unix/sysv/linux/mips/profil-counter: New. * sysdeps/unix/sysv/linux/mips...
authorAlexandre Oliva <aoliva@redhat.com>
Sun, 13 Apr 2003 11:36:32 +0000 (11:36 +0000)
committerAlexandre Oliva <aoliva@redhat.com>
Sun, 13 Apr 2003 11:36:32 +0000 (11:36 +0000)
2003-04-13  Alexandre Oliva  <aoliva@redhat.com>

* sysdeps/unix/sysv/linux/mips/profil-counter: New.
* sysdeps/unix/sysv/linux/mips/sigcontextinfo.h: Port to n32/n64.
* sysdeps/unix/sysv/linux/mips/bits/sigcontext.h: New.
* sysdeps/unix/sysv/linux/mips/sys/ucontext.h: Port to n32/n64.
(mcontext_t): Make it match the 32-bit mips kernel in o32.
* sysdeps/unix/sysv/linux/mips/sys/user.h: Bring in constants from
the mips and mips64 headers.
(struct user): Port to n32/n64.

ChangeLog
sysdeps/unix/sysv/linux/mips/bits/sigcontext.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/mips/profil-counter.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/mips/sigcontextinfo.h
sysdeps/unix/sysv/linux/mips/sys/ucontext.h
sysdeps/unix/sysv/linux/mips/sys/user.h

index 95c952a143035a1cf00d76ab7771fd97ee6ac2e5..a3cb9025661b4e61db7a73b2c579ed7c4572ba88 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2003-04-13  Alexandre Oliva  <aoliva@redhat.com>
+
+       * sysdeps/unix/sysv/linux/mips/profil-counter: New.
+       * sysdeps/unix/sysv/linux/mips/sigcontextinfo.h: Port to n32/n64.
+       * sysdeps/unix/sysv/linux/mips/bits/sigcontext.h: New.
+       * sysdeps/unix/sysv/linux/mips/sys/ucontext.h: Port to n32/n64.
+       (mcontext_t): Make it match the 32-bit mips kernel in o32.
+       * sysdeps/unix/sysv/linux/mips/sys/user.h: Bring in constants from
+       the mips and mips64 headers.
+       (struct user): Port to n32/n64.
+
 2003-04-12  Ulrich Drepper  <drepper@redhat.com>
 
        * sysdeps/generic/dl-tls.c (_dl_allocate_tls_init): Add cast to
diff --git a/sysdeps/unix/sysv/linux/mips/bits/sigcontext.h b/sysdeps/unix/sysv/linux/mips/bits/sigcontext.h
new file mode 100644 (file)
index 0000000..888c05f
--- /dev/null
@@ -0,0 +1,103 @@
+/* Copyright (C) 1996, 1997, 1998, 2003 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H
+# error "Never use <bits/sigcontext.h> directly; include <signal.h> instead."
+#endif
+
+#ifndef sigcontext_struct
+/* Kernel headers before 2.1.1 define a struct sigcontext_struct, but
+   we need sigcontext.  */
+# define sigcontext_struct sigcontext
+
+/* # include <asm/sigcontext.h> */
+/* Instead of including the kernel header, that will vary depending on
+   whether the 32- or the 64-bit kernel is installed, we paste the
+   contents here.  In case you're wondering about the different
+   licenses, the fact that the file is pasted, instead of included,
+   doesn't really make any difference for the program that includes
+   this header.  */
+#if _MIPS_SIM == _MIPS_SIM_ABI32
+/*
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Copyright (C) 1996, 1997, 2000 by Ralf Baechle
+ */
+#ifndef _ASM_SIGCONTEXT_H
+#define _ASM_SIGCONTEXT_H
+
+/*
+ * Keep this struct definition in sync with the sigcontext fragment
+ * in arch/mips/tools/offset.c
+ */
+struct sigcontext {
+       unsigned int       sc_regmask;          /* Unused */
+       unsigned int       sc_status;
+       unsigned long long sc_pc;
+       unsigned long long sc_regs[32];
+       unsigned long long sc_fpregs[32];
+       unsigned int       sc_ownedfp;          /* Unused */
+       unsigned int       sc_fpc_csr;
+       unsigned int       sc_fpc_eir;          /* Unused */
+       unsigned int       sc_used_math;
+       unsigned int       sc_ssflags;          /* Unused */
+       unsigned long long sc_mdhi;
+       unsigned long long sc_mdlo;
+
+       unsigned int       sc_cause;            /* Unused */
+       unsigned int       sc_badvaddr;         /* Unused */
+
+       unsigned long      sc_sigset[4];        /* kernel's sigset_t */
+};
+
+#endif /* _ASM_SIGCONTEXT_H */
+#else /* _MIPS_SIM != _MIPS_SIM_ABI32 */
+/*
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Copyright (C) 1996, 1997, 1999 by Ralf Baechle
+ * Copyright (C) 1999 Silicon Graphics, Inc.
+ */
+#ifndef _ASM_SIGCONTEXT_H
+#define _ASM_SIGCONTEXT_H
+
+/*
+ * Keep this struct definition in sync with the sigcontext fragment
+ * in arch/mips/tools/offset.c
+ */
+struct sigcontext {
+       unsigned long long sc_regs[32];
+       unsigned long long sc_fpregs[32];
+       unsigned long long sc_mdhi;
+       unsigned long long sc_mdlo;
+       unsigned long long sc_pc;
+       unsigned int       sc_status;
+       unsigned int       sc_fpc_csr;
+       unsigned int       sc_fpc_eir;
+       unsigned int       sc_used_math;
+       unsigned int       sc_cause;
+       unsigned int       sc_badvaddr;
+};
+
+#endif /* _ASM_SIGCONTEXT_H */
+#endif /* _MIPS_SIM != _MIPS_SIM_ABI32 */
+#endif
diff --git a/sysdeps/unix/sysv/linux/mips/profil-counter.h b/sysdeps/unix/sysv/linux/mips/profil-counter.h
new file mode 100644 (file)
index 0000000..8a6a0bc
--- /dev/null
@@ -0,0 +1,2 @@
+/* We can use the ix86 version.  */
+#include <sysdeps/unix/sysv/linux/i386/profil-counter.h>
index a51c6f043c197c7e58fd391c1da200f708749f23..3ab6d99e757c2979141fe89674e3031a5bbcc56b 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2001, 2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Andreas Jaeger <aj@suse.de>, 2000.
 
@@ -18,6 +18,8 @@
    02111-1307 USA.  */
 
 
+#if _MIPS_SIM == _MIPS_SIM_ABI32
+
 #define SIGCONTEXT unsigned long _code, struct sigcontext *
 #define SIGCONTEXT_EXTRA_ARGS _code,
 #define GET_PC(ctx)    ((void *) ctx->sc_pc)
 #define GET_STACK(ctx) ((void *) ctx->sc_regs[29])
 #define CALL_SIGHANDLER(handler, signo, ctx) \
   (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx))
+
+#else
+
+#define SIGCONTEXT unsigned long _code, ucontext_t *
+#define SIGCONTEXT_EXTRA_ARGS _code,
+#define GET_PC(ctx)    ((void *) ctx->uc_mcontext.pc)
+#define GET_FRAME(ctx) ((void *) ctx->uc_mcontext.gregs[30])
+#define GET_STACK(ctx) ((void *) ctx->uc_mcontext.gregs[29])
+#define CALL_SIGHANDLER(handler, signo, ctx) \
+  (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx))
+
+#endif
index 9d80b4086a57fb970928da2c5b8792c24fe7b460..66c729a4f9f964cbefaca420e00600a8af6b78d9 100644 (file)
 #include <bits/sigcontext.h>
 
 
-/* Type for general register.  */
-#if defined _ABIN32 && _MIPS_SIM == _ABIN32
+/* Type for general register.  Even in o32 we assume 64-bit registers,
+   like the kernel.  */
 __extension__ typedef unsigned long long int greg_t;
-#else
-typedef unsigned long int greg_t;
-#endif
 
 /* Number of general registers.  */
-#define NGREG  37
-#define NFPREG 33
+#define NGREG  32
+#define NFPREG 32
 
 /* Container for all general registers.  */
-/* gregset_t must be an array.  The below declared array corresponds to:
-typedef struct gregset {
-       greg_t  g_regs[32];
-       greg_t  g_hi;
-       greg_t  g_lo;
-       greg_t  g_pad[3];
-} gregset_t;  */
 typedef greg_t gregset_t[NGREG];
 
 /* Container for all FPU registers.  */
 typedef struct fpregset {
        union {
-               double  fp_dregs[32];
+               double  fp_dregs[NFPREG];
                struct {
                        float           _fp_fregs;
                        unsigned int    _fp_pad;
-               } fp_fregs[32];
+               } fp_fregs[NFPREG];
        } fp_r;
-       unsigned int    fp_csr;
-       unsigned int    fp_pad;
 } fpregset_t;
 
 
 /* Context to describe whole processor state.  */
+#if _MIPS_SIM == _MIPS_SIM_ABI32
+/* Earlier versions of glibc for mips had an entirely different
+   definition of mcontext_t, that didn't even resemble the
+   corresponding kernel data structure.  Since all legitimate uses of
+   ucontext_t in glibc mustn't have accessed anything beyond
+   uc_mcontext and, even then, taking a pointer to it, casting it to
+   sigcontext_t, and accessing it as such, which is what it has always
+   been, this can still be rectified.  Fortunately, makecontext,
+   [gs]etcontext et all have never been implemented.  */
+typedef struct
+  {
+    unsigned int regmask;
+    unsigned int status;
+    greg_t pc;
+    gregset_t gregs;
+    fpregset_t fpregs;
+    unsigned int fp_owned;
+    unsigned int fpc_csr;
+    unsigned int fpc_eir;
+    unsigned int used_math;
+    unsigned int ssflags;
+    greg_t mdhi;
+    greg_t mdlo;
+    unsigned int cause;
+    unsigned int badvaddr;
+  } mcontext_t;
+#else
 typedef struct
   {
     gregset_t gregs;
     fpregset_t fpregs;
+    greg_t mdhi;
+    greg_t mdlo;
+    greg_t pc;
+    unsigned int status;
+    unsigned int fpc_csr;
+    unsigned int fpc_eir;
+    unsigned int used_math;
+    unsigned int cause;
+    unsigned int badvaddr;
   } mcontext_t;
+#endif
 
 /* Userlevel context.  */
 typedef struct ucontext
index 21f7b28ca1975485b73abacb50038300acf1b953..8b21ff27865c32e08e245497605eebb0139ff7d9 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
    too much into it.  Don't use it for anything other than GDB unless
    you know what you are doing.  */
 
-#include <asm/reg.h>
+/* #include <asm/reg.h> */
+/* Instead of including the kernel header, that will vary depending on
+   whether the 32- or the 64-bit kernel is installed, we paste its
+   contents here.  Note that the fact that the file is inline here,
+   instead of included separately, doesn't change in any way the
+   licensing status of a program that includes user.h.  Since this is
+   for gdb alone, and gdb is GPLed, no surprises here.  */
+#if _MIPS_SIM == _MIPS_SIM_ABI32
+/*
+ * Various register offset definitions for debuggers, core file
+ * examiners and whatnot.
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Copyright (C) 1995, 1999 by Ralf Baechle
+ */
+#ifndef __ASM_MIPS_REG_H
+#define __ASM_MIPS_REG_H
+
+/*
+ * This defines/structures correspond to the register layout on stack -
+ * if the order here is changed, it needs to be updated in
+ * include/asm-mips/stackframe.h
+ */
+#define EF_REG0                        6
+#define EF_REG1                        7
+#define EF_REG2                        8
+#define EF_REG3                        9
+#define EF_REG4                        10
+#define EF_REG5                        11
+#define EF_REG6                        12
+#define EF_REG7                        13
+#define EF_REG8                        14
+#define EF_REG9                        15
+#define EF_REG10               16
+#define EF_REG11               17
+#define EF_REG12               18
+#define EF_REG13               19
+#define EF_REG14               20
+#define EF_REG15               21
+#define EF_REG16               22
+#define EF_REG17               23
+#define EF_REG18               24
+#define EF_REG19               25
+#define EF_REG20               26
+#define EF_REG21               27
+#define EF_REG22               28
+#define EF_REG23               29
+#define EF_REG24               30
+#define EF_REG25               31
+/*
+ * k0/k1 unsaved
+ */
+#define EF_REG28               34
+#define EF_REG29               35
+#define EF_REG30               36
+#define EF_REG31               37
+
+/*
+ * Saved special registers
+ */
+#define EF_LO                  38
+#define EF_HI                  39
+
+#define EF_CP0_EPC             40
+#define EF_CP0_BADVADDR                41
+#define EF_CP0_STATUS          42
+#define EF_CP0_CAUSE           43
+
+#define EF_SIZE                        180     /* size in bytes */
+
+#endif /* __ASM_MIPS_REG_H */
+
+#else /* _MIPS_SIM != _MIPS_SIM_ABI32 */
+
+/*
+ * Various register offset definitions for debuggers, core file
+ * examiners and whatnot.
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Copyright (C) 1995, 1999 Ralf Baechle
+ * Copyright (C) 1995, 1999 Silicon Graphics
+ */
+#ifndef _ASM_REG_H
+#define _ASM_REG_H
+
+/*
+ * This defines/structures correspond to the register layout on stack -
+ * if the order here is changed, it needs to be updated in
+ * include/asm-mips/stackframe.h
+ */
+#define EF_REG0                         0
+#define EF_REG1                         1
+#define EF_REG2                         2
+#define EF_REG3                         3
+#define EF_REG4                         4
+#define EF_REG5                         5
+#define EF_REG6                         6
+#define EF_REG7                         7
+#define EF_REG8                         8
+#define EF_REG9                         9
+#define EF_REG10               10
+#define EF_REG11               11
+#define EF_REG12               12
+#define EF_REG13               13
+#define EF_REG14               14
+#define EF_REG15               15
+#define EF_REG16               16
+#define EF_REG17               17
+#define EF_REG18               18
+#define EF_REG19               19
+#define EF_REG20               20
+#define EF_REG21               21
+#define EF_REG22               22
+#define EF_REG23               23
+#define EF_REG24               24
+#define EF_REG25               25
+/*
+ * k0/k1 unsaved
+ */
+#define EF_REG28               28
+#define EF_REG29               29
+#define EF_REG30               30
+#define EF_REG31               31
+
+/*
+ * Saved special registers
+ */
+#define EF_LO                  32
+#define EF_HI                  33
+
+#define EF_CP0_EPC             34
+#define EF_CP0_BADVADDR                35
+#define EF_CP0_STATUS          36
+#define EF_CP0_CAUSE           37
+
+#define EF_SIZE                        304     /* size in bytes */
+
+#endif /* _ASM_REG_H */
+
+#endif /* _MIPS_SIM != _MIPS_SIM_ABI32 */
+
+#if _MIPS_SIM == _MIPS_SIM_ABI32
 
 struct user
 {
@@ -40,6 +187,24 @@ struct user
   char         u_comm[32];             /* user command name */
 };
 
+#else
+
+struct user {
+  __extension__ unsigned long  regs[EF_SIZE/8+64]; /* integer and fp regs */
+  __extension__ unsigned long  u_tsize;        /* text size (pages) */
+  __extension__ unsigned long  u_dsize;        /* data size (pages) */
+  __extension__ unsigned long  u_ssize;        /* stack size (pages) */
+  __extension__ unsigned long long start_code; /* text starting address */
+  __extension__ unsigned long long start_data; /* data starting address */
+  __extension__ unsigned long long start_stack;        /* stack starting address */
+  __extension__ long long      signal;         /* signal causing core dump */
+  __extension__ unsigned long long u_ar0;      /* help gdb find registers */
+  __extension__ unsigned long long magic;      /* identifies a core file */
+  char         u_comm[32];             /* user command name */
+};
+
+#endif
+
 #define PAGE_SHIFT             12
 #define PAGE_SIZE              (1UL << PAGE_SHIFT)
 #define PAGE_MASK              (~(PAGE_SIZE-1))