fix m68k-linux build

This commit is contained in:
Daniel Jacobowitz 2001-07-11 18:39:12 +00:00
parent 216246961f
commit f175af9818
3 changed files with 92 additions and 6 deletions

View File

@ -1,3 +1,15 @@
2001-07-11 Daniel Jacobowitz <drow@mvista.com>
From Michael Fedrowitz <michael.fedrowitz@informatik.uni-ulm.de>:
* config/m68k/linux.mh: Remove core-regset.o.
* m68klinux-nat.c: Fix comment.
(supply_gregset): Change argument to elf_gregset_t *.
(supply_fpregset): Change argument to elf_fpregset_t *.
(fetch_core_registers): New function.
(linux_elf_core_fns): Define.
(_initialize_m68k_linux_nat): New function.
2001-07-11 Andrew Cagney <ac131313@redhat.com>
* configure.tgt: Mark d10v as pure multi-arch.

View File

@ -5,6 +5,6 @@ XDEPFILES=
NAT_FILE= nm-linux.h
NATDEPFILES= infptrace.o inftarg.o fork-child.o \
corelow.o core-aout.o core-regset.o m68klinux-nat.o linux-thread.o
corelow.o core-aout.o m68klinux-nat.o linux-thread.o
GDBSERVER_DEPFILES= low-linux.o

View File

@ -66,9 +66,9 @@ m68k_linux_register_u_addr (int blockend, int regnum)
return (blockend + 4 * regmap[regnum]);
}
/* Given a pointer to a general register set in /proc format (gregset_t *),
unpack the register contents and supply them as gdb's idea of the current
register values. */
/* Given a pointer to a general register set in /proc format
(elf_gregset_t *), unpack the register contents and supply
them as gdb's idea of the current register values. */
/* Note both m68k-tdep.c and m68klinux-nat.c contain definitions
@ -85,7 +85,7 @@ m68k_linux_register_u_addr (int blockend, int regnum)
#include "gregset.h"
void
supply_gregset (gregset_t *gregsetp)
supply_gregset (elf_gregset_t *gregsetp)
{
int regi;
@ -100,7 +100,7 @@ supply_gregset (gregset_t *gregsetp)
idea of the current floating point register values. */
void
supply_fpregset (fpregset_t *fpregsetp)
supply_fpregset (elf_fpregset_t *fpregsetp)
{
int regi;
@ -112,6 +112,62 @@ supply_fpregset (fpregset_t *fpregsetp)
}
#endif
/* Interpreting register set info found in core files. */
/* Provide registers to GDB from a core file.
(We can't use the generic version of this function in
core-regset.c, because we need to use elf_gregset_t instead of
gregset_t.)
CORE_REG_SECT points to an array of bytes, which are the contents
of a `note' from a core file which BFD thinks might contain
register contents. CORE_REG_SIZE is its size.
WHICH says which register set corelow suspects this is:
0 --- the general-purpose register set, in elf_gregset_t format
2 --- the floating-point register set, in elf_fpregset_t format
REG_ADDR isn't used on Linux. */
static void
fetch_core_registers (char *core_reg_sect, unsigned core_reg_size,
int which, CORE_ADDR reg_addr)
{
elf_gregset_t gregset;
elf_fpregset_t fpregset;
switch (which)
{
case 0:
if (core_reg_size != sizeof (gregset))
warning ("Wrong size gregset in core file.");
else
{
memcpy (&gregset, core_reg_sect, sizeof (gregset));
supply_gregset (&gregset);
}
break;
case 2:
if (core_reg_size != sizeof (fpregset))
warning ("Wrong size fpregset in core file.");
else
{
memcpy (&fpregset, core_reg_sect, sizeof (fpregset));
supply_fpregset (&fpregset);
}
break;
default:
/* We've covered all the kinds of registers we know about here,
so this must be something we wouldn't know what to do with
anyway. Just ignore it. */
break;
}
}
int
@ -153,3 +209,21 @@ in_sigtramp (CORE_ADDR pc)
return 0;
}
/* Register that we are able to handle Linux ELF core file formats. */
static struct core_fns linux_elf_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_m68k_linux_nat ()
{
add_core_fns (&linux_elf_core_fns);
}