OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.0/] [gdb/] [config/] [m68k/] [tm-linux.h] - Diff between revs 107 and 1765

Only display areas with differences | Details | Blame | View Log

Rev 107 Rev 1765
/* Definitions to target GDB to Linux on m680x0
/* Definitions to target GDB to Linux on m680x0
   Copyright (C) 1996,1998 Free Software Foundation, Inc.
   Copyright (C) 1996,1998 Free Software Foundation, Inc.
 
 
   This file is part of GDB.
   This file is part of GDB.
 
 
   This program is free software; you can redistribute it and/or modify
   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
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.
   (at your option) any later version.
 
 
   This program is distributed in the hope that it will be useful,
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
   GNU General Public License for more details.
 
 
   You should have received a copy of the GNU General Public License
   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   along with this program; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place - Suite 330,
   Foundation, Inc., 59 Temple Place - Suite 330,
   Boston, MA 02111-1307, USA.  */
   Boston, MA 02111-1307, USA.  */
 
 
/* Number of traps that happen between exec'ing the shell to run an
/* Number of traps that happen between exec'ing the shell to run an
   inferior, and when we finally get to the inferior code.  This is 2
   inferior, and when we finally get to the inferior code.  This is 2
   on most implementations.  */
   on most implementations.  */
 
 
#define START_INFERIOR_TRAPS_EXPECTED 2
#define START_INFERIOR_TRAPS_EXPECTED 2
 
 
/* The following definitions are appropriate when using the ELF
/* The following definitions are appropriate when using the ELF
   format, where floating point values are returned in fp0, pointer
   format, where floating point values are returned in fp0, pointer
   values in a0 and other values in d0.  */
   values in a0 and other values in d0.  */
 
 
/* Extract from an array REGBUF containing the (raw) register state a
/* Extract from an array REGBUF containing the (raw) register state a
   function return value of type TYPE, and copy that, in virtual
   function return value of type TYPE, and copy that, in virtual
   format, into VALBUF.  */
   format, into VALBUF.  */
 
 
#define EXTRACT_RETURN_VALUE(TYPE,REGBUF,VALBUF) \
#define EXTRACT_RETURN_VALUE(TYPE,REGBUF,VALBUF) \
{                                                                       \
{                                                                       \
  if (TYPE_CODE (TYPE) == TYPE_CODE_FLT)                                \
  if (TYPE_CODE (TYPE) == TYPE_CODE_FLT)                                \
    {                                                                   \
    {                                                                   \
       REGISTER_CONVERT_TO_VIRTUAL (FP0_REGNUM, TYPE,                   \
       REGISTER_CONVERT_TO_VIRTUAL (FP0_REGNUM, TYPE,                   \
                                    ((char *) (REGBUF)                  \
                                    ((char *) (REGBUF)                  \
                                     + REGISTER_BYTE (FP0_REGNUM)),     \
                                     + REGISTER_BYTE (FP0_REGNUM)),     \
                                    VALBUF);                            \
                                    VALBUF);                            \
    }                                                                   \
    }                                                                   \
  else if (TYPE_CODE (TYPE) == TYPE_CODE_PTR)                           \
  else if (TYPE_CODE (TYPE) == TYPE_CODE_PTR)                           \
    memcpy (VALBUF, (char *) (REGBUF) + REGISTER_BYTE (A0_REGNUM),      \
    memcpy (VALBUF, (char *) (REGBUF) + REGISTER_BYTE (A0_REGNUM),      \
            TYPE_LENGTH (TYPE));                                        \
            TYPE_LENGTH (TYPE));                                        \
  else                                                                  \
  else                                                                  \
    memcpy (VALBUF,                                                     \
    memcpy (VALBUF,                                                     \
            ((char *) (REGBUF)                                          \
            ((char *) (REGBUF)                                          \
             + (TYPE_LENGTH (TYPE) >= 4 ? 0 : 4 - TYPE_LENGTH (TYPE))),  \
             + (TYPE_LENGTH (TYPE) >= 4 ? 0 : 4 - TYPE_LENGTH (TYPE))),  \
            TYPE_LENGTH (TYPE));                                        \
            TYPE_LENGTH (TYPE));                                        \
}
}
 
 
/* Write into appropriate registers a function return value of type
/* Write into appropriate registers a function return value of type
   TYPE, given in virtual format.  */
   TYPE, given in virtual format.  */
 
 
#define STORE_RETURN_VALUE(TYPE,VALBUF) \
#define STORE_RETURN_VALUE(TYPE,VALBUF) \
{                                                                       \
{                                                                       \
  if (TYPE_CODE (TYPE) == TYPE_CODE_FLT)                                \
  if (TYPE_CODE (TYPE) == TYPE_CODE_FLT)                                \
    {                                                                   \
    {                                                                   \
      char raw_buffer[REGISTER_RAW_SIZE (FP0_REGNUM)];                  \
      char raw_buffer[REGISTER_RAW_SIZE (FP0_REGNUM)];                  \
      REGISTER_CONVERT_TO_RAW (TYPE, FP0_REGNUM, VALBUF, raw_buffer);   \
      REGISTER_CONVERT_TO_RAW (TYPE, FP0_REGNUM, VALBUF, raw_buffer);   \
      write_register_bytes (REGISTER_BYTE (FP0_REGNUM),                 \
      write_register_bytes (REGISTER_BYTE (FP0_REGNUM),                 \
                            raw_buffer, TYPE_LENGTH (TYPE));            \
                            raw_buffer, TYPE_LENGTH (TYPE));            \
    }                                                                   \
    }                                                                   \
  else                                                                  \
  else                                                                  \
    {                                                                   \
    {                                                                   \
      if (TYPE_CODE (TYPE) == TYPE_CODE_PTR)                            \
      if (TYPE_CODE (TYPE) == TYPE_CODE_PTR)                            \
        write_register_bytes (REGISTER_BYTE (A0_REGNUM), VALBUF,        \
        write_register_bytes (REGISTER_BYTE (A0_REGNUM), VALBUF,        \
                              TYPE_LENGTH (TYPE));                      \
                              TYPE_LENGTH (TYPE));                      \
      write_register_bytes (0, VALBUF, TYPE_LENGTH (TYPE));              \
      write_register_bytes (0, VALBUF, TYPE_LENGTH (TYPE));              \
    }                                                                   \
    }                                                                   \
}
}
 
 
#include "tm-linux.h"
#include "tm-linux.h"
#include "m68k/tm-m68k.h"
#include "m68k/tm-m68k.h"
 
 
/* Extract from an array REGBUF containing the (raw) register state
/* Extract from an array REGBUF containing the (raw) register state
   the address in which a function should return its structure value,
   the address in which a function should return its structure value,
   as a CORE_ADDR (or an expression that can be used as one).  */
   as a CORE_ADDR (or an expression that can be used as one).  */
 
 
#undef EXTRACT_STRUCT_VALUE_ADDRESS
#undef EXTRACT_STRUCT_VALUE_ADDRESS
#define EXTRACT_STRUCT_VALUE_ADDRESS(REGBUF) \
#define EXTRACT_STRUCT_VALUE_ADDRESS(REGBUF) \
  (*(CORE_ADDR *)((char *) (REGBUF) + REGISTER_BYTE (A0_REGNUM)))
  (*(CORE_ADDR *)((char *) (REGBUF) + REGISTER_BYTE (A0_REGNUM)))
 
 
/* Offsets (in target ints) into jmp_buf.  */
/* Offsets (in target ints) into jmp_buf.  */
 
 
#define JB_ELEMENT_SIZE 4
#define JB_ELEMENT_SIZE 4
#define JB_PC 7
#define JB_PC 7
 
 
/* Figure out where the longjmp will land.  Slurp the args out of the stack.
/* 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 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.
   we extract the pc (JB_PC) that we will land at.  The pc is copied into ADDR.
   This routine returns true on success */
   This routine returns true on success */
 
 
#define GET_LONGJMP_TARGET(ADDR) get_longjmp_target(ADDR)
#define GET_LONGJMP_TARGET(ADDR) get_longjmp_target(ADDR)
 
 
/* Offset to saved PC in sigcontext, from <asm/sigcontext.h>.  */
/* Offset to saved PC in sigcontext, from <asm/sigcontext.h>.  */
#define SIGCONTEXT_PC_OFFSET 26
#define SIGCONTEXT_PC_OFFSET 26
 
 
#undef FRAME_SAVED_PC
#undef FRAME_SAVED_PC
#define FRAME_SAVED_PC(FRAME) \
#define FRAME_SAVED_PC(FRAME) \
  (((FRAME)->signal_handler_caller \
  (((FRAME)->signal_handler_caller \
    ? sigtramp_saved_pc (FRAME) \
    ? sigtramp_saved_pc (FRAME) \
    : read_memory_integer ((FRAME)->frame + 4, 4)))
    : read_memory_integer ((FRAME)->frame + 4, 4)))
 
 
extern CORE_ADDR sigtramp_saved_pc PARAMS ((struct frame_info *));
extern CORE_ADDR sigtramp_saved_pc PARAMS ((struct frame_info *));
 
 
#define IN_SIGTRAMP(pc,name) in_sigtramp (pc)
#define IN_SIGTRAMP(pc,name) in_sigtramp (pc)
extern int in_sigtramp PARAMS ((CORE_ADDR pc));
extern int in_sigtramp PARAMS ((CORE_ADDR pc));
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.