#define GDB_MULTI_ARCH GDB_MULTI_ARCH_PARTIAL
#ifndef GDB_TARGET_IS_SPARC64
#define GDB_TARGET_IS_SPARC64 1
#endif
#include "sparc/tm-sparc.h"
#if !defined (GDB_MULTI_ARCH) || (GDB_MULTI_ARCH == 0)
#ifndef DO_CALL_DUMMY_ON_STACK
#undef CALL_DUMMY
#define CALL_DUMMY {0}
#undef CALL_DUMMY_LENGTH
#define CALL_DUMMY_LENGTH 0
#undef CALL_DUMMY_CALL_OFFSET
#define CALL_DUMMY_CALL_OFFSET 0
#undef CALL_DUMMY_START_OFFSET
#define CALL_DUMMY_START_OFFSET 0
#undef CALL_DUMMY_BREAKPOINT_OFFSET
#define CALL_DUMMY_BREAKPOINT_OFFSET 0
#undef CALL_DUMMY_BREAKPOINT_OFFSET_P
#define CALL_DUMMY_BREAKPOINT_OFFSET_P 1
#undef CALL_DUMMY_LOCATION
#define CALL_DUMMY_LOCATION AT_ENTRY_POINT
#undef DEPRECATED_PC_IN_CALL_DUMMY
#define DEPRECATED_PC_IN_CALL_DUMMY(pc, sp, frame_address) deprecated_pc_in_call_dummy_at_entry_point (pc, sp, frame_address)
#undef CALL_DUMMY_STACK_ADJUST
#define CALL_DUMMY_STACK_ADJUST 128
#undef SIZEOF_CALL_DUMMY_WORDS
#define SIZEOF_CALL_DUMMY_WORDS 0
#undef CALL_DUMMY_ADDRESS
#define CALL_DUMMY_ADDRESS() entry_point_address()
#undef FIX_CALL_DUMMY
#define FIX_CALL_DUMMY(DUMMYNAME, PC, FUN, NARGS, ARGS, TYPE, GCC_P)
#undef PUSH_RETURN_ADDRESS
#define PUSH_RETURN_ADDRESS(PC, SP) sparc_at_entry_push_return_address (PC, SP)
extern CORE_ADDR sparc_at_entry_push_return_address (CORE_ADDR pc,
CORE_ADDR sp);
#undef STORE_STRUCT_RETURN
#define STORE_STRUCT_RETURN(ADDR, SP) \
sparc_at_entry_store_struct_return (ADDR, SP)
extern void sparc_at_entry_store_struct_return (CORE_ADDR addr, CORE_ADDR sp);
#else
#undef CALL_DUMMY
#define CALL_DUMMY { 0x9de3bec0fd3fa7f7LL, 0xf93fa7eff53fa7e7LL,\
0xf13fa7dfed3fa7d7LL, 0xe93fa7cfe53fa7c7LL,\
0xe13fa7bfdd3fa7b7LL, 0xd93fa7afd53fa7a7LL,\
0xd13fa79fcd3fa797LL, 0xc93fa78fc53fa787LL,\
0xc13fa77fcc3fa777LL, 0xc83fa76fc43fa767LL,\
0xc03fa75ffc3fa757LL, 0xf83fa74ff43fa747LL,\
0xf03fa73f01000000LL, 0x0100000001000000LL,\
0x0100000091580000LL, 0xd027a72b93500000LL,\
0xd027a72791480000LL, 0xd027a72391400000LL,\
0xd027a71fda5ba8a7LL, 0xd85ba89fd65ba897LL,\
0xd45ba88fd25ba887LL, 0x9fc02000d05ba87fLL,\
0x0100000091d02001LL, 0x0100000001000000LL }
#undef CALL_DUMMY_STACK_ADJUST
#define CALL_DUMMY_STACK_ADJUST 128
#undef CALL_DUMMY_LENGTH
#define CALL_DUMMY_LENGTH 192
#undef CALL_DUMMY_START_OFFSET
#define CALL_DUMMY_START_OFFSET 148
#undef CALL_DUMMY_CALL_OFFSET
#define CALL_DUMMY_CALL_OFFSET (CALL_DUMMY_START_OFFSET + (5 * 4))
#undef CALL_DUMMY_BREAKPOINT_OFFSET
#define CALL_DUMMY_BREAKPOINT_OFFSET (CALL_DUMMY_START_OFFSET + (8 * 4))
#undef CALL_DUMMY_BREAKPOINT_OFFSET_P
#define CALL_DUMMY_BREAKPOINT_OFFSET_P 1
#undef CALL_DUMMY_LOCATION
#define CALL_DUMMY_LOCATION ON_STACK
#undef DEPRECATED_PC_IN_CALL_DUMMY
#define DEPRECATED_PC_IN_CALL_DUMMY(pc, sp, frame_address) deprecated_pc_in_call_dummy_on_stack (pc, sp, frame_address)
#undef FIX_CALL_DUMMY
#define FIX_CALL_DUMMY(dummyname, pc, fun, nargs, args, type, gcc_p) \
sparc_fix_call_dummy (dummyname, pc, fun, type, gcc_p)
void sparc_fix_call_dummy (char *dummy, CORE_ADDR pc, CORE_ADDR fun,
struct type *value_type, int using_gcc);
#undef SIZEOF_CALL_DUMMY_WORDS
#undef PUSH_RETURN_ADDRESS
#undef CALL_DUMMY_ADDRESS
#undef STORE_STRUCT_RETURN
#endif
#undef USE_STRUCT_CONVENTION
#define USE_STRUCT_CONVENTION(gcc_p, type) (TYPE_LENGTH (type) > 32)
CORE_ADDR sparc64_push_arguments (int,
struct value **, CORE_ADDR, int, CORE_ADDR);
#undef PUSH_ARGUMENTS
#define PUSH_ARGUMENTS(A,B,C,D,E) \
(sparc64_push_arguments ((A), (B), (C), (D), (E)))
#undef STORE_STRUCT_RETURN
#define STORE_STRUCT_RETURN(ADDR, SP) \
{ target_write_memory ((SP)+(16*8), (char *)&(ADDR), 8); }
#undef STACK_ALIGN
#define STACK_ALIGN(ADDR) (((ADDR) + 15 ) & -16)
#undef REGISTER_NAMES
#define REGISTER_NAMES \
{ "g0", "g1", "g2", "g3", "g4", "g5", "g6", "g7", \
"o0", "o1", "o2", "o3", "o4", "o5", "sp", "o7", \
"l0", "l1", "l2", "l3", "l4", "l5", "l6", "l7", \
"i0", "i1", "i2", "i3", "i4", "i5", "fp", "i7", \
\
"f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", \
"f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", \
"f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23", \
"f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31", \
"f32", "f34", "f36", "f38", "f40", "f42", "f44", "f46", \
"f48", "f50", "f52", "f54", "f56", "f58", "f60", "f62", \
\
"pc", "npc", "ccr", "fsr", "fprs", "y", "asi", \
"ver", "tick", "pil", "pstate", \
"tstate", "tba", "tl", "tt", "tpc", "tnpc", "wstate", \
"cwp", "cansave", "canrestore", "cleanwin", "otherwin", \
"asr16", "asr17", "asr18", "asr19", "asr20", "asr21", \
"asr22", "asr23", "asr24", "asr25", "asr26", "asr27", \
"asr28", "asr29", "asr30", "asr31", \
\
"icc", "xcc", "fcc0", "fcc1", "fcc2", "fcc3" \
}
#undef REG_STRUCT_HAS_ADDR
#define REG_STRUCT_HAS_ADDR(gcc_p,type) (TYPE_LENGTH (type) > 32)
extern CORE_ADDR sparc64_read_sp ();
extern CORE_ADDR sparc64_read_fp ();
extern void sparc64_write_sp (CORE_ADDR);
#define TARGET_READ_SP() (sparc64_read_sp ())
#define TARGET_READ_FP() (sparc64_read_fp ())
#define TARGET_WRITE_SP(X) (sparc64_write_sp (X))
#undef DEPRECATED_EXTRACT_RETURN_VALUE
#define DEPRECATED_EXTRACT_RETURN_VALUE(TYPE,REGBUF,VALBUF) \
sp64_extract_return_value(TYPE, REGBUF, VALBUF, 0)
extern void sp64_extract_return_value (struct type *, char[], char *, int);
#if 0
#define G0_REGNUM 0
#define G1_REGNUM 1
#define O0_REGNUM 8
#define SP_REGNUM 14
#define RP_REGNUM 15
#define O7_REGNUM 15
#define L0_REGNUM 16
#define I0_REGNUM 24
#define FP_REGNUM 30
#define I7_REGNUM 31
#define FP0_REGNUM 32
#endif
#undef Y_REGNUM
#undef PS_REGNUM
#undef WIM_REGNUM
#undef TBR_REGNUM
#undef PC_REGNUM
#undef NPC_REGNUM
#undef FPS_REGNUM
#undef CPS_REGNUM
#define C0_REGNUM 80
#define PC_REGNUM (C0_REGNUM + 0)
#define NPC_REGNUM (C0_REGNUM + 1)
#define CCR_REGNUM (C0_REGNUM + 2)
#define FSR_REGNUM (C0_REGNUM + 3)
#define FPRS_REGNUM (C0_REGNUM + 4)
#define Y_REGNUM (C0_REGNUM + 5)
#define ASI_REGNUM (C0_REGNUM + 6)
#define VER_REGNUM (C0_REGNUM + 7)
#define TICK_REGNUM (C0_REGNUM + 8)
#define PIL_REGNUM (C0_REGNUM + 9)
#define PSTATE_REGNUM (C0_REGNUM + 10)
#define TSTATE_REGNUM (C0_REGNUM + 11)
#define TBA_REGNUM (C0_REGNUM + 12)
#define TL_REGNUM (C0_REGNUM + 13)
#define TT_REGNUM (C0_REGNUM + 14)
#define TPC_REGNUM (C0_REGNUM + 15)
#define TNPC_REGNUM (C0_REGNUM + 16)
#define WSTATE_REGNUM (C0_REGNUM + 17)
#define CWP_REGNUM (C0_REGNUM + 18)
#define CANSAVE_REGNUM (C0_REGNUM + 19)
#define CANRESTORE_REGNUM (C0_REGNUM + 20)
#define CLEANWIN_REGNUM (C0_REGNUM + 21)
#define OTHERWIN_REGNUM (C0_REGNUM + 22)
#define ASR_REGNUM(n) (C0_REGNUM+(23-16)+(n))
#define ICC_REGNUM (C0_REGNUM + 39)
#define XCC_REGNUM (C0_REGNUM + 40)
#define FCC0_REGNUM (C0_REGNUM + 41)
#define FCC1_REGNUM (C0_REGNUM + 42)
#define FCC2_REGNUM (C0_REGNUM + 43)
#define FCC3_REGNUM (C0_REGNUM + 44)
#undef NUM_REGS
#define NUM_REGS 125
#undef REGISTER_BYTES
#define REGISTER_BYTES (32*8+32*8+45*8)
#undef REGISTER_BYTE
#define REGISTER_BYTE(N) \
((N) < 32 ? (N)*8 \
: (N) < 64 ? 32*8 + ((N)-32)*4 \
: (N) < C0_REGNUM ? 32*8 + 32*4 + ((N)-64)*8 \
: 64*8 + ((N)-C0_REGNUM)*8)
#undef REGISTER_SIZE
#define REGISTER_SIZE 8
#undef REGISTER_RAW_SIZE
#define REGISTER_RAW_SIZE(N) \
((N) < 32 ? 8 : (N) < 64 ? 4 : 8)
#undef REGISTER_VIRTUAL_SIZE
#define REGISTER_VIRTUAL_SIZE(N) \
((N) < 32 ? 8 : (N) < 64 ? 4 : 8)
#undef MAX_REGISTER_RAW_SIZE
#define MAX_REGISTER_RAW_SIZE 8
#undef MAX_REGISTER_VIRTUAL_SIZE
#define MAX_REGISTER_VIRTUAL_SIZE 8
#undef REGISTER_VIRTUAL_TYPE
#define REGISTER_VIRTUAL_TYPE(N) \
((N) < 32 ? builtin_type_long_long \
: (N) < 64 ? builtin_type_float \
: (N) < 80 ? builtin_type_double \
: builtin_type_long_long)
#undef TARGET_PTR_BIT
#define TARGET_PTR_BIT 64
#undef TARGET_LONG_BIT
#define TARGET_LONG_BIT 64
#undef TARGET_LONG_LONG_BIT
#define TARGET_LONG_LONG_BIT 64
#undef FRAME_ARGS_SKIP
#define FRAME_ARGS_SKIP 136
#endif
#define JB_ELEMENT_SIZE 8
#define JB_ONSSTACK 0
#define JB_SIGMASK 1
#define JB_SP 2
#define JB_PC 3
#define JB_NPC 4
#define JB_PSR 5
#define JB_G1 6
#define JB_O0 7
#define JB_WBCNT 8
extern int get_longjmp_target (CORE_ADDR *);
#define GET_LONGJMP_TARGET(ADDR) get_longjmp_target(ADDR)
#undef TM_PRINT_INSN_MACH
#define TM_PRINT_INSN_MACH bfd_mach_sparc_v9a