* [rfa/i387] Eliminate HOST_*_FORMAT from i387-tdep.c
@ 2001-06-29 9:53 Andrew Cagney
2001-07-01 5:56 ` Mark Kettenis
0 siblings, 1 reply; 8+ messages in thread
From: Andrew Cagney @ 2001-06-29 9:53 UTC (permalink / raw)
To: gdb-patches
Hello,
Very similar to my ARM tweek, this patch replaces a use of
HOST_LONG_DOUBLE_FORMAT with more generic code.
There isn't a loss of precision since extract_floating() on i386 native
should still do a memcopy().
Andrew
(Disclaimers about testing apply, it does compile :-/ ).
From ac131313@cygnus.com Fri Jun 29 10:23:00 2001
From: Andrew Cagney <ac131313@cygnus.com>
To: gdb-patches@sources.redhat.com
Subject: [rfc/rfa] Almost eliminate HOST_{FLOAT,DOUBLE,...}_FORMAT
Date: Fri, 29 Jun 2001 10:23:00 -0000
Message-id: <3B3CB989.1000706@cygnus.com>
X-SW-Source: 2001-06/msg00531.html
Content-length: 788
Hello,
Attached is a revised patch to defs.h and findvar.c to reduce the
dependency on host floating point formats.
This patch changes GDB so that, if the host configury didn't specify the
floating point format, it will fall back immediatly to floatformat_*().
Previously, GDB would assume that the HOST had IEEE FP and try to use
that.
For hosts that don't specify a HOST_*_FORMAT, this will mean a loss of
FP precision when using GDB :-/
As an accidental side effect, this eliminates the problem where, if the
the host/target both forgot to specify their long-double format/size,
the code would assume that they were identical and do really bizare things.
Andrew
PS: If you haven't figured it out, I'm tring to eliminate xm.h and
(gasp) nm.h for at least one platform.
From ac131313@cygnus.com Fri Jun 29 10:51:00 2001
From: Andrew Cagney <ac131313@cygnus.com>
To: gdb-patches@sources.redhat.com
Subject: [rfa] NetBSD/PowerPC doesn't need xm.h
Date: Fri, 29 Jun 2001 10:51:00 -0000
Message-id: <3B3CC000.7040700@cygnus.com>
X-SW-Source: 2001-06/msg00532.html
Content-length: 375
Hello,
Assuming that the other patches are accepted, this patch removes xm.h
from the NetBSD/PowerPC host configuration.
This is probably a good host/target to work with since it isn't
mainstream and consequently won't hurt anything like the more important
GNU systems.
Ok?
Andrew
PS: There are several follow-on's to this - HOST_BYTE_ORDER can also be
eliminated.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [rfa/i387] Eliminate HOST_*_FORMAT from i387-tdep.c
2001-06-29 9:53 [rfa/i387] Eliminate HOST_*_FORMAT from i387-tdep.c Andrew Cagney
@ 2001-07-01 5:56 ` Mark Kettenis
2001-07-02 8:55 ` Jim Blandy
2001-07-04 12:18 ` Andrew Cagney
0 siblings, 2 replies; 8+ messages in thread
From: Mark Kettenis @ 2001-07-01 5:56 UTC (permalink / raw)
To: Andrew Cagney; +Cc: gdb-patches
Andrew Cagney <ac131313@cygnus.com> writes:
> Hello,
>
> Very similar to my ARM tweek, this patch replaces a use of
> HOST_LONG_DOUBLE_FORMAT with more generic code.
>
> There isn't a loss of precision since extract_floating() on i386 native
> should still do a memcopy().
Hmm, the new code seems to assume that
TARGET_LONG_DOUBLE_FORMAT == &floatformat_i387_ext
This isn't true for OSF/1, but that target doesn't use this code (and
probably doesn't compile anyway). Nevertheless, I think you should
add a
gdb_assert (TARGET_LONG_DOUBLE_FORMAT == &floatformat_i387_ext);
instead of, or in addition to the
gdb_assert (FPU_REG_RAW_SIZE < len);
Consider it approved with that change.
Oh, and I believe the GNU coding standards demand two spaces after a
full stop, even at the end of a comment.
Mark
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [rfa/i387] Eliminate HOST_*_FORMAT from i387-tdep.c
2001-07-01 5:56 ` Mark Kettenis
@ 2001-07-02 8:55 ` Jim Blandy
2001-07-03 12:26 ` Russ Allbery
2001-07-04 12:18 ` Andrew Cagney
1 sibling, 1 reply; 8+ messages in thread
From: Jim Blandy @ 2001-07-02 8:55 UTC (permalink / raw)
To: Mark Kettenis; +Cc: Andrew Cagney, gdb-patches
Mark Kettenis <kettenis@science.uva.nl> writes:
> Oh, and I believe the GNU coding standards demand two spaces after a
> full stop, even at the end of a comment.
I didn't know that was part of the standard, but I can give the
rationale:
The Emacs forward- and backward-sentence commands (M-e and M-a) expect
to see two spaces after a full stop, to help them distinguish a period
after an abbreviation from a period marking the end of a sentence.
It's really handy to have those commands work on comments.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [rfa/i387] Eliminate HOST_*_FORMAT from i387-tdep.c
2001-07-02 8:55 ` Jim Blandy
@ 2001-07-03 12:26 ` Russ Allbery
0 siblings, 0 replies; 8+ messages in thread
From: Russ Allbery @ 2001-07-03 12:26 UTC (permalink / raw)
To: gdb-patches
Jim Blandy <jimb@zwingli.cygnus.com> writes:
> Mark Kettenis <kettenis@science.uva.nl> writes:
>> Oh, and I believe the GNU coding standards demand two spaces after a
>> full stop, even at the end of a comment.
> I didn't know that was part of the standard, but I can give the
> rationale:
> The Emacs forward- and backward-sentence commands (M-e and M-a) expect
> to see two spaces after a full stop, to help them distinguish a period
> after an abbreviation from a period marking the end of a sentence.
> It's really handy to have those commands work on comments.
Yup. < http://www.gnu.org/prep/standards_23.html#SEC23 >, paragraph five.
--
Russ Allbery (rra@stanford.edu) < http://www.eyrie.org/~eagle/ >
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [rfa/i387] Eliminate HOST_*_FORMAT from i387-tdep.c
2001-07-01 5:56 ` Mark Kettenis
2001-07-02 8:55 ` Jim Blandy
@ 2001-07-04 12:18 ` Andrew Cagney
2001-07-04 14:13 ` Mark Kettenis
1 sibling, 1 reply; 8+ messages in thread
From: Andrew Cagney @ 2001-07-04 12:18 UTC (permalink / raw)
To: Mark Kettenis; +Cc: gdb-patches
Thanks! I've checked in the attatched. It added a few more comments
and the suggested assertion. (and ``. '' :-)
Andrew
From dmj+@andrew.cmu.edu Wed Jul 04 12:19:00 2001
From: Daniel Jacobowitz <dmj+@andrew.cmu.edu>
To: gdb-patches@sources.redhat.com
Subject: [RFA] The MIPS/Linux port
Date: Wed, 04 Jul 2001 12:19:00 -0000
Message-id: <20010704121952.A17445@nevyn.them.org>
X-SW-Source: 2001-07/msg00055.html
Content-length: 22994
Like any new port, this is dependent on a fair number of other sources. If
you actually want it to work, for instance, you'll need:
- A recent CVS kernel from oss.sgi.com, to have ptrace behave right in the
first place.
- A patch I posted there which is still being considered, if you want to
debug programs that use the FPU and not have them become completely
confused.
- A compiler/assembler that emit debug info we can cope with. GCC 2.95.2
and binutils 2.10.91.* are fairly good for this. Note that:
* the mdebug information emitted when you use GCC 3.0 crashes gdb; I
posted a patch for this a week ago and got no comments.
* the stabs-in-elf emitted by recent binutils is not compatible with
the way any GCC version emits stabs for mips; this needs to be
addressed in either binutils or gcc, and HJ posted a potential patch
for it two days ago.
* Dwarf2 debugging does not appear to work properly; I'll look into
it once the dust settles a little.
The only outstanding gdb patches on which this one really depends are the
two mips-tdep.c patches posted today. I also have a few more for ABI issues
which still need some tweaking.
I imagine I break multi-arch in all sorts of unpleasant ways, etc. etc. I'd
like to get this in and then fix it up, if possible; it's a little on the
large side :) I imagine it'll take a couple iterations anyway, though.
Comments welcome! (approval even more so)
--
Daniel Jacobowitz Carnegie Mellon University
MontaVista Software Debian GNU/Linux Developer
2001-07-04 Daniel Jacobowitz <drow@mvista.com>
* mips-linux-tdep.c: New file.
* mips-linux-nat.c: New file.
* config/mips/linux.mh: New file.
* config/mips/linux.mt: New file.
* config/mips/xm-linux.h: New file.
* config/mips/nm-linux.h: New file.
* config/mips/tm-linux.h: New file.
* configure.host: Recognize mips*-*-linux.
* configure.tgt: Likewise.
Index: gdb/mips-linux-tdep.c
===================================================================
RCS file: N/A
diff -u /dev/null gdb/mips-linux-tdep.c
--- /dev/null Wed Dec 31 16:00:00 1969
+++ gdb/mips-linux-tdep.c Mon Jun 11 16:01:57 2001
@@ -0,0 +1,332 @@
+/* Low level MIPS/Linux interface, for GDB ELF core debugging.
+ Copyright 1996, 2001 Free Software Foundation, Inc.
+ Contributed by David S. Miller (davem@caip.rutgers.edu) at
+ Rutgers University CAIP Research Center.
+
+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 "gdbcore.h"
+#include "target.h"
+#include "solib-svr4.h"
+
+/* From <asm/elf.h> */
+#define ELF_NGREG 45
+#define ELF_NFPREG 33
+
+typedef unsigned char elf_greg_t[4];
+typedef elf_greg_t elf_gregset_t[ELF_NGREG];
+
+typedef unsigned char elf_fpreg_t[8];
+typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
+
+/* 0 - 31 are integer registers, 32 - 63 are fp registers. */
+#define FPR_BASE 32
+#define PC 64
+#define CAUSE 65
+#define BADVADDR 66
+#define MMHI 67
+#define MMLO 68
+#define FPC_CSR 69
+#define FPC_EIR 70
+
+#define EF_REG0 6
+#define EF_REG31 37
+#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 */
+
+/* Figure out where the longjmp will land.
+ We expect the first arg to be a pointer to the jmp_buf structure from which
+ we extract the pc (JB_PC) that we will land at. The pc is copied into PC.
+ This routine returns true on success. */
+
+int
+get_longjmp_target (pc)
+ CORE_ADDR *pc;
+{
+ CORE_ADDR jb_addr;
+ char buf[TARGET_PTR_BIT / TARGET_CHAR_BIT];
+
+ jb_addr = read_register (A0_REGNUM);
+
+ if (target_read_memory (jb_addr + JB_PC * JB_ELEMENT_SIZE, buf,
+ TARGET_PTR_BIT / TARGET_CHAR_BIT))
+ return 0;
+
+ *pc = extract_address (buf, TARGET_PTR_BIT / TARGET_CHAR_BIT);
+
+ return 1;
+}
+
+
+/*
+ * See the comment in m68k-tdep.c regarding the utility of these functions.
+ *
+ * These definitions are from the MIPS SVR4 ABI, so they may work for
+ * any MIPS SVR4 target.
+ */
+
+void
+supply_gregset (gregsetp)
+ elf_gregset_t *gregsetp;
+{
+ int regi;
+ elf_greg_t *regp = *gregsetp;
+ static char zerobuf[MAX_REGISTER_RAW_SIZE] = {0};
+
+ for (regi = EF_REG0; regi <= EF_REG31; regi++)
+ supply_register ((regi - EF_REG0), (char *)(regp + regi));
+
+ supply_register (LO_REGNUM, (char *)(regp + EF_LO));
+ supply_register (HI_REGNUM, (char *)(regp + EF_HI));
+
+ supply_register (PC_REGNUM, (char *)(regp + EF_CP0_EPC));
+ supply_register (BADVADDR_REGNUM, (char *)(regp + EF_CP0_BADVADDR));
+ supply_register (PS_REGNUM, (char *)(regp + EF_CP0_STATUS));
+ supply_register (CAUSE_REGNUM, (char *)(regp + EF_CP0_CAUSE));
+
+ /* Fill inaccessible registers with zero. */
+ supply_register (FP_REGNUM, zerobuf);
+ supply_register (UNUSED_REGNUM, zerobuf);
+ for (regi = FIRST_EMBED_REGNUM; regi < LAST_EMBED_REGNUM; regi++)
+ supply_register (regi, zerobuf);
+}
+
+void
+fill_gregset (gregsetp, regno)
+ elf_gregset_t *gregsetp;
+ int regno;
+{
+ int regi;
+ elf_greg_t *regp = *gregsetp;
+
+ memset ((char *) regp, 0, sizeof (elf_gregset_t));
+
+#define fill(regp, regi, offset) \
+ memcpy((char *)((regp) + (offset)), \
+ ®isters[REGISTER_BYTE (regi)], \
+ sizeof (elf_greg_t))
+
+ for (regi = EF_REG0; regi <= EF_REG31; regi++)
+ fill (regp, regi - EF_REG0, regi);
+
+ fill (regp, LO_REGNUM, EF_LO);
+ fill (regp, HI_REGNUM, EF_HI);
+
+ fill (regp, PC_REGNUM, EF_CP0_EPC);
+ fill (regp, BADVADDR_REGNUM, EF_CP0_BADVADDR);
+ fill (regp, PS_REGNUM, EF_CP0_STATUS);
+ fill (regp, CAUSE_REGNUM, EF_CP0_CAUSE);
+#undef fill
+}
+
+/* Now we do the same thing for floating-point registers.
+ * We don't bother to condition on FP0_REGNUM since any
+ * reasonable MIPS configuration has an R3010 in it.
+ *
+ * Again, see the comments in m68k-tdep.c.
+ */
+
+void
+supply_fpregset (fpregsetp)
+ elf_fpregset_t *fpregsetp;
+{
+ register int regi;
+ static char zerobuf[MAX_REGISTER_RAW_SIZE] = {0};
+
+ for (regi = 0; regi < 32; regi++)
+ supply_register (FP0_REGNUM + regi,
+ (char *)(*fpregsetp + regi));
+
+ supply_register (FCRCS_REGNUM, (char *)(*fpregsetp + 32));
+
+ /* FIXME: how can we supply FCRIR_REGNUM? The ABI doesn't tell us. */
+ supply_register (FCRIR_REGNUM, zerobuf);
+}
+
+void
+fill_fpregset (fpregsetp, regno)
+ elf_fpregset_t *fpregsetp;
+ int regno;
+{
+ int regi;
+ char *from, *to;
+
+ for (regi = 0; regi < 32; regi++)
+ {
+ if ((regno == -1) || (regno == FP0_REGNUM + regi))
+ {
+ from = (char *) ®isters[REGISTER_BYTE (regi + FP0_REGNUM)];
+ to = (char *) (*fpregsetp + regi);
+ memcpy (to, from, REGISTER_RAW_SIZE (regi));
+ }
+ }
+
+ if ((regno == -1) || (regno == FCRCS_REGNUM))
+ {
+ from = (char *) ®isters[REGISTER_BYTE (FCRCS_REGNUM)];
+ to = (char *) (*fpregsetp + 32);
+ memcpy (to, from, REGISTER_RAW_SIZE (FCRCS_REGNUM));
+ }
+}
+
+/* Map gdb internal register number to ptrace ``address''.
+ These ``addresses'' are defined in <asm/ptrace.h> */
+
+#define REGISTER_PTRACE_ADDR(regno) \
+ (regno < 32 ? regno \
+ : (regno >= FP0_REGNUM && regno < FP0_REGNUM + 32) ? \
+ FPR_BASE + (regno - FP0_REGNUM) \
+ : regno == PC_REGNUM ? PC \
+ : regno == CAUSE_REGNUM ? CAUSE \
+ : regno == BADVADDR_REGNUM ? BADVADDR \
+ : regno == LO_REGNUM ? MMLO \
+ : regno == HI_REGNUM ? MMHI \
+ : regno == FCRCS_REGNUM ? FPC_CSR \
+ : regno == FCRIR_REGNUM ? FPC_EIR \
+ : 0)
+
+/* Return the ptrace ``address'' of register REGNO. */
+
+CORE_ADDR
+register_addr (regno, blockend)
+ int regno;
+ CORE_ADDR blockend;
+{
+ int regaddr;
+
+ if (regno < 0 || regno >= NUM_REGS)
+ error ("Bogon register number %d.", regno);
+
+ regaddr = REGISTER_PTRACE_ADDR (regno);
+
+ if (regno != 0 && regaddr == 0)
+ error ("Unknowable register number %d.", regno);
+
+ return regaddr;
+}
+
+static void fetch_core_registers PARAMS ((char *, unsigned, int, CORE_ADDR));
+
+void _initialize_core_regset PARAMS ((void));
+
+/*
+ Use a local version of this function to get the correct types for regsets.
+*/
+
+static void
+fetch_core_registers (core_reg_sect, core_reg_size, which, reg_addr)
+ char *core_reg_sect;
+ unsigned core_reg_size;
+ int which;
+ CORE_ADDR reg_addr; /* Unused in this version */
+{
+ elf_gregset_t gregset;
+ elf_fpregset_t fpregset;
+
+ if (which == 0)
+ {
+ if (core_reg_size != sizeof (gregset))
+ {
+ warning ("wrong size gregset struct in core file");
+ }
+ else
+ {
+ memcpy ((char *) &gregset, core_reg_sect, sizeof (gregset));
+ supply_gregset (&gregset);
+ }
+ }
+ else if (which == 2)
+ {
+ if (core_reg_size != sizeof (fpregset))
+ {
+ warning ("wrong size fpregset struct in core file");
+ }
+ else
+ {
+ memcpy ((char *) &fpregset, core_reg_sect, sizeof (fpregset));
+ supply_fpregset (&fpregset);
+ }
+ }
+}
+\f
+
+/* Register that we are able to handle ELF file formats using standard
+ procfs "regset" structures. */
+
+static struct core_fns regset_core_fns =
+{
+ bfd_target_elf_flavour, /* core_flavour */
+ default_check_format, /* check_format */
+ default_core_sniffer, /* core_sniffer */
+ fetch_core_registers, /* core_read_registers */
+ NULL /* next */
+};
+
+void
+_initialize_core_regset ()
+{
+ add_core_fns (®set_core_fns);
+}
+
+
+/* Fetch (and possibly build) an appropriate link_map_offsets
+ structure for native Linux/MIPS targets using the struct offsets
+ defined in link.h (but without actual reference to that file).
+
+ This makes it possible to access Linux/MIPS shared libraries from a
+ GDB that was not built on an Linux/MIPS host (for cross debugging). */
+
+struct link_map_offsets *
+mips_linux_svr4_fetch_link_map_offsets (void)
+{
+ static struct link_map_offsets lmo;
+ static struct link_map_offsets *lmp = NULL;
+
+ if (lmp == NULL)
+ {
+ lmp = &lmo;
+
+ lmo.r_debug_size = 8; /* The actual size is 20 bytes, but
+ this is all we need. */
+ lmo.r_map_offset = 4;
+ lmo.r_map_size = 4;
+
+ lmo.link_map_size = 20;
+
+ lmo.l_addr_offset = 0;
+ lmo.l_addr_size = 4;
+
+ lmo.l_name_offset = 4;
+ lmo.l_name_size = 4;
+
+ lmo.l_next_offset = 12;
+ lmo.l_next_size = 4;
+
+ lmo.l_prev_offset = 16;
+ lmo.l_prev_size = 4;
+ }
+
+ return lmp;
+}
Index: gdb/mips-linux-nat.c
===================================================================
RCS file: N/A
diff -u /dev/null gdb/mips-linux-nat.c
--- /dev/null Wed Dec 31 16:00:00 1969
+++ gdb/mips-linux-nat.c Mon Jun 11 16:01:57 2001
@@ -0,0 +1,31 @@
+/* Low level MIPS/Linux interface, for GDB when running native.
+ Copyright 1996, 2001 Free Software Foundation, Inc.
+ Contributed by David S. Miller (davem@caip.rutgers.edu) at
+ Rutgers University CAIP Research Center.
+
+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 <sys/user.h>
+
+/* Return the size of the user struct. */
+
+int
+kernel_u_size (void)
+{
+ return (sizeof (struct user));
+}
+
Index: gdb/config/mips/xm-linux.h
===================================================================
RCS file: N/A
diff -u /dev/null gdb/config/mips/xm-linux.h
--- /dev/null Wed Dec 31 16:00:00 1969
+++ gdb/config/mips/xm-linux.h Mon Jun 11 16:01:57 2001
@@ -0,0 +1,43 @@
+/* Definitions for Linux/MIPS hosting support.
+
+Copyright (C) 1996, 2001 Free Software Foundation, Inc.
+
+Contributed by David S. Miller (davem@caip.rutgers.edu) at
+Rutgers University CAIP Research Center.
+
+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. */
+
+#ifndef XM_MIPSLINUX_H
+#define XM_MIPSLINUX_H
+
+#ifndef HOST_BYTE_ORDER
+#include <endian.h>
+#if __BYTE_ORDER == __BIG_ENDIAN
+#define HOST_BYTE_ORDER BIG_ENDIAN
+#else
+#define HOST_BYTE_ORDER LITTLE_ENDIAN
+#endif
+#endif
+
+#define HAVE_TERMIOS
+
+#define NEED_POSIX_SETPGID
+
+/* Need R_OK etc, but USG isn't defined. */
+#include <unistd.h>
+
+#endif /* XM_MIPSLINUX_H */
Index: gdb/config/mips/tm-linux.h
===================================================================
RCS file: N/A
diff -u /dev/null gdb/config/mips/tm-linux.h
--- /dev/null Wed Dec 31 16:00:00 1969
+++ gdb/config/mips/tm-linux.h Thu Jun 14 22:51:24 2001
@@ -0,0 +1,89 @@
+/* Definitions to make GDB run on a MIPS box under Linux. The
+ definitions here are used when the _target_ system is running Linux.
+ Copyright 1996, 2001 Free Software Foundation, Inc.
+
+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. */
+
+#ifndef TM_MIPSLINUX_H
+#define TM_MIPSLINUX_H
+
+#include "mips/tm-mips.h"
+
+/* We don't want to inherit tm-mips.h's shared library trampoline code. */
+
+#undef IN_SOLIB_CALL_TRAMPOLINE
+#undef IN_SOLIB_RETURN_TRAMPOLINE
+#undef SKIP_TRAMPOLINE_CODE
+#undef IGNORE_HELPER_CALL
+
+/* FIXME: Do not include "tm-linux.h", because we do not want the host's
+ <signal.h>. Instead, copy the non-signal bits for now. */
+
+/* We need this file for the SOLIB_TRAMPOLINE stuff. */
+
+#include "tm-sysv4.h"
+
+/* We define SVR4_SHARED_LIBS unconditionally, on the assumption that
+ link.h is available on all linux platforms. For I386 and SH3/4,
+ we hard-code the information rather than use link.h anyway (for
+ the benefit of cross-debugging). We may move to doing that for
+ other architectures as well. */
+
+#define SVR4_SHARED_LIBS
+#include "solib.h" /* Support for shared libraries. */
+
+/* End from "tm-linux.h". */
+
+/* There's an E_MIPS_ABI_O32 flag in e_flags, but we don't use it - in
+ fact, using it may violate o32. */
+#define MIPS_DEFAULT_ABI MIPS_ABI_O32
+
+/* Linux/MIPS has __SIGRTMAX == 127. */
+
+#define REALTIME_LO 32
+#define REALTIME_HI 128
+
+/* Use target_specific function to define link map offsets. */
+
+extern struct link_map_offsets *mips_linux_svr4_fetch_link_map_offsets (void);
+#define SVR4_FETCH_LINK_MAP_OFFSETS() mips_linux_svr4_fetch_link_map_offsets ()
+
+/* Details about jmp_buf. */
+
+#define JB_ELEMENT_SIZE 4
+#define JB_PC 0
+
+/* Figure out where the longjmp will land. Slurp the args out of the
+ stack. We expect the first arg to be a pointer to the jmp_buf
+ structure from which we extract the pc (JB_PC) that we will land
+ at. The pc is copied into ADDR. This routine returns true on
+ success. */
+
+#define GET_LONGJMP_TARGET(ADDR) get_longjmp_target(ADDR)
+extern int get_longjmp_target (CORE_ADDR *);
+
+/* Just like the Sparc, we do single stepping in software, this
+ feature does _not_ belong in the kernel as far as I'm concerned. */
+#define SOFTWARE_SINGLE_STEP_P() 1
+extern void mips_software_single_step PARAMS ((unsigned int, int));
+#define SOFTWARE_SINGLE_STEP(sig,bp_p) mips_software_single_step (sig, bp_p)
+
+/* XXX TODO */
+#undef IN_SIGTRAMP
+#define IN_SIGTRAMP(pc, name) (0)
+
+#endif /* TM_MIPSLINUX_H */
Index: gdb/config/mips/nm-linux.h
===================================================================
RCS file: N/A
diff -u /dev/null gdb/config/mips/nm-linux.h
--- /dev/null Wed Dec 31 16:00:00 1969
+++ gdb/config/mips/nm-linux.h Tue Jul 3 15:23:44 2001
@@ -0,0 +1,68 @@
+/* Definitions for native support of Linux/MIPS.
+
+Copyright (C) 1996, 2001 Free Software Foundation, Inc.
+
+Contributed by David S. Miller (davem@caip.rutgers.edu) at
+Rutgers University CAIP Research Center.
+
+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. */
+
+#ifndef NM_MIPSLINUX_H
+#define NM_MIPSLINUX_H
+
+#define MIPS_GNULINUX_TARGET
+
+#include "nm-linux.h"
+
+/* Return sizeof user struct to callers in less machine dependent
+ routines. */
+extern int kernel_u_size (void);
+#define KERNEL_U_SIZE kernel_u_size()
+
+/* ptrace register ``addresses'' are absolute. */
+#define U_REGS_OFFSET 0
+
+#define PTRACE_ARG3_TYPE long
+
+/* ptrace transfers longs */
+#define PTRACE_XFER_TYPE long
+
+#define REGISTER_U_ADDR(addr, blockend, regno) (addr) = mips_register_addr ((regno),(blockend))
+
+/* Pseudo registers and processor status / zero */
+#define CANNOT_FETCH_REGISTER(regno) \
+ ((regno) == PS_REGNUM || (regno) == ZERO_REGNUM || (regno) >= FP_REGNUM)
+#define CANNOT_STORE_REGISTER(regno) \
+ ((regno) == PS_REGNUM || (regno) == ZERO_REGNUM || (regno) >= FP_REGNUM \
+ || (regno) == BADVADDR_REGNUM || (regno) == CAUSE_REGNUM || (regno) == FCRIR_REGNUM)
+
+/* FIXME: This should be moved to ../nm-linux.h once we have converted all
+ Linux targets to use the new threads stuff (without the #undef of
+ course). */
+extern int lin_lwp_prepare_to_proceed (void);
+#undef PREPARE_TO_PROCEED
+#define PREPARE_TO_PROCEED(select_it) lin_lwp_prepare_to_proceed ()
+
+extern void lin_lwp_attach_lwp (ptid_t ptid, int verbose);
+#define ATTACH_LWP(ptid, verbose) lin_lwp_attach_lwp ((ptid), (verbose))
+
+#include <signal.h>
+
+extern void lin_thread_get_thread_signals (sigset_t *mask);
+#define GET_THREAD_SIGNALS(mask) lin_thread_get_thread_signals (mask)
+
+#endif /* NM_MIPSLINUX_H */
Index: gdb/config/mips/linux.mh
===================================================================
RCS file: N/A
diff -u /dev/null gdb/config/mips/linux.mh
--- /dev/null Wed Dec 31 16:00:00 1969
+++ gdb/config/mips/linux.mh Mon Jun 11 16:01:57 2001
@@ -0,0 +1,8 @@
+# Host: Big-endian MIPS running Linux
+XDEPFILES=
+XM_FILE= xm-linux.h
+NAT_FILE= nm-linux.h
+NATDEPFILES= infptrace.o inftarg.o fork-child.o mips-linux-nat.o \
+ thread-db.o lin-lwp.o proc-service.o
+
+LOADLIBES = -ldl -rdynamic
Index: gdb/config/mips/linux.mt
===================================================================
RCS file: N/A
diff -u /dev/null gdb/config/mips/linux.mt
--- /dev/null Wed Dec 31 16:00:00 1969
+++ gdb/config/mips/linux.mt Mon Jun 11 16:01:57 2001
@@ -0,0 +1,8 @@
+# Target: Big-endian MIPS
+TDEPFILES= mips-tdep.o mips-linux-tdep.o corelow.o solib.o solib-svr4.o solib-legacy.o
+TM_FILE= tm-linux.h
+
+GDBSERVER_DEPFILES= low-linux.o
+
+SIM_OBS = remote-sim.o
+SIM = ../sim/mips/libsim.a
Index: gdb/configure.host
===================================================================
RCS file: /cvs/src/src/gdb/configure.host,v
retrieving revision 1.22
diff -u -p -r1.22 configure.host
--- gdb/configure.host 2001/06/15 19:23:45 1.22
+++ gdb/configure.host 2001/07/04 19:02:27
@@ -16,6 +16,7 @@ hppa*) gdb_host_cpu=pa ;;
i[3456]86*) gdb_host_cpu=i386 ;;
m68*) gdb_host_cpu=m68k ;;
m88*) gdb_host_cpu=m88k ;;
+mips*) gdb_host_cpu=mips ;;
powerpc*) gdb_host_cpu=powerpc ;;
sparc64) gdb_host_cpu=sparc ;;
s390*) gdb_host_cpu=s390 ;;
@@ -118,6 +119,7 @@ mips-sgi-irix4*) gdb_host=irix4 ;;
mips-sgi-irix5*) gdb_host=irix5 ;;
mips-sgi-irix6*) gdb_host=irix6 ;;
mips-sony-*) gdb_host=news-mips ;;
+mips*-*-linux*) gdb_host=linux ;;
mips-*-mach3*) gdb_host=mipsm3 ;;
mips-*-sysv4*) gdb_host=mipsv4 ;;
mips-*-sysv*) gdb_host=riscos ;;
Index: gdb/configure.tgt
===================================================================
RCS file: /cvs/src/src/gdb/configure.tgt,v
retrieving revision 1.30
diff -u -p -r1.30 configure.tgt
--- gdb/configure.tgt 2001/06/15 19:23:45 1.30
+++ gdb/configure.tgt 2001/07/04 19:02:27
@@ -211,6 +211,7 @@ mips*-sgi-irix5*) gdb_target=irix5 ;;
mips*-sgi-irix6*) gdb_target=irix6 ;;
mips*-sgi-*) gdb_target=irix3 ;;
mips*-sony-*) gdb_target=bigmips ;;
+mips*-*-linux*) gdb_target=linux ;;
mips*-*-mach3*) gdb_target=mipsm3 ;;
mips*-*-sysv4*) gdb_target=mipsv4 ;;
mips*-*-sysv*) gdb_target=bigmips ;;
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [rfa/i387] Eliminate HOST_*_FORMAT from i387-tdep.c
2001-07-04 12:18 ` Andrew Cagney
@ 2001-07-04 14:13 ` Mark Kettenis
0 siblings, 0 replies; 8+ messages in thread
From: Mark Kettenis @ 2001-07-04 14:13 UTC (permalink / raw)
To: ac131313; +Cc: gdb-patches
Date: Wed, 04 Jul 2001 15:18:17 -0400
From: Andrew Cagney <ac131313@cygnus.com>
Thanks! I've checked in the attatched. It added a few more comments
and the suggested assertion. (and ``. '' :-)
Did you? Sorry, I couldn't resist :-).
Index: ChangeLog
from Mark Kettenis <kettenis@gnu.org>
* i387-tdep.c (print_i387_value): Add extra space after final full
stop in comment.
Index: i387-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/i387-tdep.c,v
retrieving revision 1.10
diff -u -p -r1.10 i387-tdep.c
--- i387-tdep.c 2001/07/04 19:19:58 1.10
+++ i387-tdep.c 2001/07/04 21:11:01
@@ -168,7 +168,7 @@ print_i387_value (char *raw)
gdb_assert (TARGET_LONG_DOUBLE_FORMAT == &floatformat_i387_ext);
/* Take care of the padding. FP reg is 80 bits. The same value in
- memory is 96 bits. */
+ memory is 96 bits. */
gdb_assert (FPU_REG_RAW_SIZE < len);
memcpy (&tmp, raw, FPU_REG_RAW_SIZE);
memset (&tmp + FPU_REG_RAW_SIZE, 0, len - FPU_REG_RAW_SIZE);
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [rfa/i387] Eliminate HOST_*_FORMAT from i387-tdep.c
2001-07-06 5:52 Michael Elizabeth Chastain
@ 2001-07-06 6:16 ` Eli Zaretskii
0 siblings, 0 replies; 8+ messages in thread
From: Eli Zaretskii @ 2001-07-06 6:16 UTC (permalink / raw)
To: chastain; +Cc: ac131313, gdb-patches
> From: Michael Elizabeth Chastain <chastain@cygnus.com>
> Date: Fri, 6 Jul 2001 05:52:43 -0700
>
> I tested this on native Red Hat Linux 7 with gcc 3.0 with the test
> script gdb.base/default.exp. Without the patch, gdb crashes on
> an "info float" command.
>
> OK to apply?
Looks like an obvious fix to me.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [rfa/i387] Eliminate HOST_*_FORMAT from i387-tdep.c
@ 2001-07-06 5:52 Michael Elizabeth Chastain
2001-07-06 6:16 ` Eli Zaretskii
0 siblings, 1 reply; 8+ messages in thread
From: Michael Elizabeth Chastain @ 2001-07-06 5:52 UTC (permalink / raw)
To: ac131313; +Cc: gdb-patches
Jump back, this new code has a pointer glitch. I think it needs
this patch.
I tested this on native Red Hat Linux 7 with gcc 3.0 with the test
script gdb.base/default.exp. Without the patch, gdb crashes on
an "info float" command.
OK to apply?
MichaelC
===
Index: i387-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/i387-tdep.c,v
retrieving revision 1.11
diff -c -1 -0 -p -r1.11 i387-tdep.c
*** gdb/i387-tdep.c 2001/07/04 21:14:05 1.11
--- gdb/i387-tdep.c 2001/07/06 12:47:00
*************** print_i387_value (char *raw)
*** 163,184 ****
DOUBLEST value;
int len = TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT;
char *tmp = alloca (len);
/* This code only works on targets where ... */
gdb_assert (TARGET_LONG_DOUBLE_FORMAT == &floatformat_i387_ext);
/* Take care of the padding. FP reg is 80 bits. The same value in
memory is 96 bits. */
gdb_assert (FPU_REG_RAW_SIZE < len);
! memcpy (&tmp, raw, FPU_REG_RAW_SIZE);
! memset (&tmp + FPU_REG_RAW_SIZE, 0, len - FPU_REG_RAW_SIZE);
/* Extract the value as a DOUBLEST. */
/* Use extract_floating() rather than floatformat_to_doublest().
The latter is lossy in nature. Once GDB gets a host/target
independent and non-lossy FP it will become possible to bypass
extract_floating() and call floatformat*() directly. Note also
the assumptions about TARGET_LONG_DOUBLE above. */
value = extract_floating (tmp, len);
/* We try to print 19 digits. The last digit may or may not contain
--- 163,184 ----
DOUBLEST value;
int len = TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT;
char *tmp = alloca (len);
/* This code only works on targets where ... */
gdb_assert (TARGET_LONG_DOUBLE_FORMAT == &floatformat_i387_ext);
/* Take care of the padding. FP reg is 80 bits. The same value in
memory is 96 bits. */
gdb_assert (FPU_REG_RAW_SIZE < len);
! memcpy (tmp, raw, FPU_REG_RAW_SIZE);
! memset (tmp + FPU_REG_RAW_SIZE, 0, len - FPU_REG_RAW_SIZE);
/* Extract the value as a DOUBLEST. */
/* Use extract_floating() rather than floatformat_to_doublest().
The latter is lossy in nature. Once GDB gets a host/target
independent and non-lossy FP it will become possible to bypass
extract_floating() and call floatformat*() directly. Note also
the assumptions about TARGET_LONG_DOUBLE above. */
value = extract_floating (tmp, len);
/* We try to print 19 digits. The last digit may or may not contain
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2001-07-06 6:16 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-06-29 9:53 [rfa/i387] Eliminate HOST_*_FORMAT from i387-tdep.c Andrew Cagney
2001-07-01 5:56 ` Mark Kettenis
2001-07-02 8:55 ` Jim Blandy
2001-07-03 12:26 ` Russ Allbery
2001-07-04 12:18 ` Andrew Cagney
2001-07-04 14:13 ` Mark Kettenis
2001-07-06 5:52 Michael Elizabeth Chastain
2001-07-06 6:16 ` Eli Zaretskii
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox