Remove dup inftarg.o from NATDEPFILES.
[deliverable/binutils-gdb.git] / gdb / tm-sparc.h
index 7f0fb4e6fba47f37414e4209556dc7c99d69d696..25fc6d3314097ef48e2aca51f525262fb8b29d48 100644 (file)
@@ -1,6 +1,8 @@
-/* Parameters for target machine of Sun 4, for GDB, the GNU debugger.
-   Copyright (C) 1986, 1987, 1989 Free Software Foundation, Inc.
+/* Target machine sub-parameters for SPARC, for GDB, the GNU debugger.
+   This is included by other tm-*.h files to define SPARC cpu-related info.
+   Copyright 1986, 1987, 1989, 1991, 1992 Free Software Foundation, Inc.
    Contributed by Michael Tiemann (tiemann@mcc.com)
+
 This file is part of GDB.
 
 This program is free software; you can redistribute it and/or modify
@@ -22,28 +24,19 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 /* Floating point is IEEE compatible.  */
 #define IEEE_FLOAT
 
-/* Define this if the C compiler puts an underscore at the front
-   of external names before giving them to the linker.  */
-
-#define NAMES_HAVE_UNDERSCORE
-
-/* Debugger information will be in DBX format.  */
-
-#define READ_DBX_FORMAT
-
 /* When passing a structure to a function, Sun cc passes the address
    in a register, not the structure itself.  It (under SunOS4) creates
    two symbols, so we get a LOC_ARG saying the address is on the stack
    (a lie, and a serious one since we don't know which register to
    use), and a LOC_REGISTER saying that the struct is in a register
    (sort of a lie, but fixable with REG_STRUCT_HAS_ADDR).  Gcc version
-   two (as of 1.92) behaves like sun cc, but I don't know how we can
-   distinguish between gcc version 1 and gcc version 2.
+   two (as of 1.92) behaves like sun cc.  REG_STRUCT_HAS_ADDR is smart
+   enough to distinguish between Sun cc, gcc version 1 and gcc version 2.
 
    This still doesn't work if the argument is not one passed in a
    register (i.e. it's the 7th or later argument).  */
-#define REG_STRUCT_HAS_ADDR(gcc_p) (!(gcc_p))
-#define STRUCT_ARG_SYM_GARBAGE(gcc_p) (!(gcc_p))
+#define REG_STRUCT_HAS_ADDR(gcc_p) (gcc_p != 1)
+#define STRUCT_ARG_SYM_GARBAGE(gcc_p) (gcc_p != 1)
 
 /* If Pcc says that a parameter is a short, it's a short.  This is
    because the parameter does get passed in in a register as an int,
@@ -84,16 +77,12 @@ extern CORE_ADDR skip_prologue ();
    encodes the structure size being returned.  If we detect such
    a fake insn, step past it.  */
 
-#define PC_ADJUST(pc) ((read_memory_integer (pc + 8, 4) & 0xfffffe00) == 0 ? \
-                      pc+12 : pc+8)
+#define PC_ADJUST(pc) sparc_pc_adjust(pc)
+extern CORE_ADDR sparc_pc_adjust();
 
 #define SAVED_PC_AFTER_CALL(frame) PC_ADJUST (read_register (RP_REGNUM))
 
-/* Address of the end of stack space.  We get this from the system
-   include files. */
-#include <sys/types.h>
-#include <machine/vmparam.h>
-#define STACK_END_ADDR USRSTACK
+/* Stack grows downward.  */
 
 #define INNER_THAN <
 
@@ -144,7 +133,7 @@ extern CORE_ADDR skip_prologue ();
   "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",      \
   "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",      \
                                                                 \
-  "y", "psr", "wim", "tbr", "pc", "npc", "fpsr", "cpsr" };
+  "y", "psr", "wim", "tbr", "pc", "npc", "fpsr", "cpsr" }
 
 /* Register numbers of various important registers.
    Note that some of these values are "real" register numbers,
@@ -229,13 +218,13 @@ extern CORE_ADDR skip_prologue ();
    to virtual format for register REGNUM.  */
 
 #define REGISTER_CONVERT_TO_VIRTUAL(REGNUM,FROM,TO) \
-{ bcopy ((FROM), (TO), 4); }
+{ memcpy ((TO), (FROM), 4); }
 
 /* Convert data from virtual format for register REGNUM
    to raw format for register REGNUM.  */
 
 #define REGISTER_CONVERT_TO_RAW(REGNUM,FROM,TO)        \
-{ bcopy ((FROM), (TO), 4); }
+{ memcpy ((TO), (FROM), 4); }
 
 /* Return the GDB type object for the "standard" data type
    of data in register N.  */
@@ -263,11 +252,13 @@ extern CORE_ADDR skip_prologue ();
   {                                                                       \
     if (TYPE_CODE (TYPE) == TYPE_CODE_FLT)                                \
       {                                                                           \
-       bcopy (((int *)(REGBUF))+FP0_REGNUM,                               \
-              (VALBUF), TYPE_LENGTH(TYPE));                               \
+       memcpy ((VALBUF), ((int *)(REGBUF))+FP0_REGNUM, TYPE_LENGTH(TYPE));\
       }                                                                           \
     else                                                                  \
-      bcopy (((int *)(REGBUF))+8, (VALBUF), TYPE_LENGTH (TYPE));           \
+      memcpy ((VALBUF),                                                           \
+             (char *)(REGBUF) + 4 * 8 +                                   \
+             (TYPE_LENGTH(TYPE) >= 4 ? 0 : 4 - TYPE_LENGTH(TYPE)),        \
+             TYPE_LENGTH(TYPE));                                          \
   }
 
 /* Write into appropriate registers a function return value
@@ -292,29 +283,16 @@ extern CORE_ADDR skip_prologue ();
 
 #define EXTRACT_STRUCT_VALUE_ADDRESS(REGBUF) \
   (sparc_extract_struct_value_address (REGBUF))
-CORE_ADDR sparc_extract_struct_value_address (
-#ifdef __STDC__
-                                             char [REGISTER_BYTES]
-#endif
-                                             );
+
+extern CORE_ADDR
+sparc_extract_struct_value_address PARAMS ((char [REGISTER_BYTES]));
 
 \f
 /* Describe the pointer in each stack frame to the previous stack frame
    (its caller).  */
 
-/* If you're not compiling this on a sun, you'll have to get a copy
-   of <sun4/reg.h> (also known as <machine/reg.h>).  */
-#include <sun4/reg.h>
-
 /* FRAME_CHAIN takes a frame's nominal address
-   and produces the frame's chain-pointer.
-
-   FRAME_CHAIN_COMBINE takes the chain pointer and the frame's nominal address
-   and produces the nominal address of the caller frame.
-
-   However, if FRAME_CHAIN_VALID returns zero,
-   it means the given frame is the outermost one and has no caller.
-   In that case, FRAME_CHAIN_COMBINE is not used.  */
+   and produces the frame's chain-pointer. */
 
 /* In the case of the Sun 4, the frame-chain's nominal address
    is held in the frame pointer register.
@@ -337,7 +315,7 @@ CORE_ADDR sparc_extract_struct_value_address (
    Otherwise the bottom of this frame is the top of the next frame.  */
 
 #define EXTRA_FRAME_INFO       FRAME_ADDR bottom;
-#define INIT_EXTRA_FRAME_INFO(fci)  \
+#define INIT_EXTRA_FRAME_INFO(fromleaf, fci)  \
   (fci)->bottom =                                      \
    ((fci)->next ?                                      \
     ((fci)->frame == (fci)->next_frame ?               \
@@ -347,11 +325,6 @@ CORE_ADDR sparc_extract_struct_value_address (
 #define FRAME_CHAIN(thisframe) (sparc_frame_chain (thisframe))
 CORE_ADDR sparc_frame_chain ();
 
-#define FRAME_CHAIN_VALID(chain, thisframe) \
-  (chain != 0 && (outside_startup_file (FRAME_SAVED_PC (thisframe))))
-
-#define FRAME_CHAIN_COMBINE(chain, thisframe) (chain)
-
 /* Define other aspects of the stack frame.  */
 
 /* A macro that tells us whether the function invocation represented
@@ -593,3 +566,17 @@ extern void single_step ();
     }                                  \
   }
 
+/* Optimization for storing registers to the inferior.  The hook
+   DO_DEFERRED_STORES
+   actually executes any deferred stores.  It is called any time
+   we are going to proceed the child, or read its registers.
+   The hook CLEAR_DEFERRED_STORES is called when we want to throw
+   away the inferior process, e.g. when it dies or we kill it.
+   FIXME, this does not handle remote debugging cleanly.  */
+
+extern int deferred_stores;
+#define        DO_DEFERRED_STORES      \
+  if (deferred_stores)         \
+    target_store_registers (-2);
+#define        CLEAR_DEFERRED_STORES   \
+  deferred_stores = 0;
This page took 0.025519 seconds and 4 git commands to generate.