aboutsummaryrefslogtreecommitdiff
path: root/gdb/config/a29k/tm-vx29k.h
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/config/a29k/tm-vx29k.h')
-rw-r--r--gdb/config/a29k/tm-vx29k.h460
1 files changed, 230 insertions, 230 deletions
diff --git a/gdb/config/a29k/tm-vx29k.h b/gdb/config/a29k/tm-vx29k.h
index 8aee1dd..40c6689 100644
--- a/gdb/config/a29k/tm-vx29k.h
+++ b/gdb/config/a29k/tm-vx29k.h
@@ -1,230 +1,230 @@
-/* Target machine description for VxWorks on the 29k, for GDB, the GNU debugger.
- Copyright 1994, 1995, 1998, 1999, 2000 Free Software Foundation, Inc.
- Contributed by Cygnus Support.
-
- 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 "regcache.h"
-#include "value.h"
-#include "a29k/tm-a29k.h"
-#include "tm-vxworks.h"
-
-/* Number of registers in a ptrace_getregs call. */
-
-#define VX_NUM_REGS (NUM_REGS)
-
-/* Number of registers in a ptrace_getfpregs call. */
-
-/* #define VX_SIZE_FPREGS */
-
-/* This is almost certainly the wrong place for this: */
-#define LR2_REGNUM 34
-
-
-/* Vxworks has its own CALL_DUMMY since it manages breakpoints in the kernel */
-
-#undef CALL_DUMMY
-
-/* Replace the breakpoint instruction in the CALL_DUMMY with a nop.
- For Vxworks, the breakpoint is set and deleted by calls to
- CALL_DUMMY_BREAK_SET and CALL_DUMMY_BREAK_DELETE. */
-
-#error "This file is broken. GDB does not define HOST_BYTE_ORDER."
-#if TARGET_BYTE_ORDER == HOST_BYTE_ORDER
-#define CALL_DUMMY {0x0400870f,\
- 0x36008200|(MSP_HW_REGNUM), \
- 0x15000040|(MSP_HW_REGNUM<<8)|(MSP_HW_REGNUM<<16), \
- 0x03ff80ff, 0x02ff80ff, 0xc8008080, 0x70400101, 0x70400101}
-#else /* Byte order differs. */
-#define CALL_DUMMY {0x0f870004,\
- 0x00820036|(MSP_HW_REGNUM << 24), \
- 0x40000015|(MSP_HW_REGNUM<<8)|(MSP_HW_REGNUM<<16), \
- 0xff80ff03, 0xff80ff02, 0x808000c8, 0x01014070, 0x01014070}
-#endif /* Byte order differs. */
-
-
-/* For the basic CALL_DUMMY definitions, see "tm-29k.h." We use the
- same CALL_DUMMY code, but define FIX_CALL_DUMMY (and related macros)
- locally to handle remote debugging of VxWorks targets. The difference
- is in the setting and clearing of the breakpoint at the end of the
- CALL_DUMMY code fragment; under VxWorks, we can't simply insert a
- breakpoint instruction into the code, since that would interfere with
- the breakpoint management mechanism on the target.
- Note that CALL_DUMMY is a piece of code that is used to call any C function
- thru VxGDB */
-
-/* The offset of the instruction within the CALL_DUMMY code where we
- want the inferior to stop after the function call has completed.
- call_function_by_hand () sets a breakpoint here (via CALL_DUMMY_BREAK_SET),
- which POP_FRAME later deletes (via CALL_DUMMY_BREAK_DELETE). */
-
-#define CALL_DUMMY_STOP_OFFSET (7 * 4)
-
-/* The offset of the first instruction of the CALL_DUMMY code fragment
- relative to the frame pointer for a dummy frame. This is equal to
- the size of the CALL_DUMMY plus the arg_slop area size (see the diagram
- in "tm-29k.h"). */
-/* PAD : the arg_slop area size doesn't appear to me to be useful since, the
- call dummy code no longer modify the msp. See below. This must be checked. */
-
-#define CALL_DUMMY_OFFSET_IN_FRAME (CALL_DUMMY_LENGTH + 16 * 4)
-
-/* Insert the specified number of args and function address
- into a CALL_DUMMY sequence stored at DUMMYNAME, replace the third
- instruction (add msp, msp, 16*4) with a nop, and leave the final nop.
- We can't keep using a CALL_DUMMY that modify the msp since, for VxWorks,
- CALL_DUMMY is stored in the Memory Stack. Adding 16 words to the msp
- would then make possible for the inferior to overwrite the CALL_DUMMY code,
- thus creating a lot of trouble when exiting the inferior to come back in
- a CALL_DUMMY code that no longer exists... Furthermore, ESF are also stored
- from the msp in the memory stack. If msp is set higher than the dummy code,
- an ESF may clobber this code. */
-
-#if TARGET_BYTE_ORDER == BFD_ENDIAN_BIG
-#define NOP_INSTR 0x70400101
-#else /* Target is little endian */
-#define NOP_INSTR 0x01014070
-#endif
-
-#undef FIX_CALL_DUMMY
-#define FIX_CALL_DUMMY(dummyname, pc, fun, nargs, args, type, gcc_p) \
- { \
- *(int *)((char *)dummyname + 8) = NOP_INSTR; \
- STUFF_I16((char *)dummyname + CONST_INSN, fun); \
- STUFF_I16((char *)dummyname + CONST_INSN + 4, fun >> 16); \
- }
-
-/* For VxWorks, CALL_DUMMY must be stored in the stack of the task that is
- being debugged and executed "in the context of" this task */
-
-#undef CALL_DUMMY_LOCATION
-#define CALL_DUMMY_LOCATION ON_STACK
-
-/* Set or delete a breakpoint at the location within a CALL_DUMMY code
- fragment where we want the target program to stop after the function
- call is complete. CALL_DUMMY_ADDR is the address of the first
- instruction in the CALL_DUMMY. DUMMY_FRAME_ADDR is the value of the
- frame pointer in the dummy frame.
-
- NOTE: in the both of the following definitions, we take advantage of
- knowledge of the implementation of the target breakpoint operation,
- in that we pass a null pointer as the second argument. It seems
- reasonable to assume that any target requiring the use of
- CALL_DUMMY_BREAK_{SET,DELETE} will not store the breakpoint
- shadow contents in GDB; in any case, this assumption is vaild
- for all VxWorks-related targets. */
-
-#define CALL_DUMMY_BREAK_SET(call_dummy_addr) \
- target_insert_breakpoint ((call_dummy_addr) + CALL_DUMMY_STOP_OFFSET, \
- (char *) 0)
-
-#define CALL_DUMMY_BREAK_DELETE(dummy_frame_addr) \
- target_remove_breakpoint ((dummy_frame_addr) - (CALL_DUMMY_OFFSET_IN_FRAME \
- - CALL_DUMMY_STOP_OFFSET), \
- (char *) 0)
-
-/* Return nonzero if the pc is executing within a CALL_DUMMY frame. */
-
-#define PC_IN_CALL_DUMMY(pc, sp, frame_address) \
- ((pc) >= (sp) \
- && (pc) <= (sp) + CALL_DUMMY_OFFSET_IN_FRAME + CALL_DUMMY_LENGTH)
-
-/* Defining this prevents us from trying to pass a structure-valued argument
- to a function called via the CALL_DUMMY mechanism. This is not handled
- properly in call_function_by_hand (), and the fix might require re-writing
- the CALL_DUMMY handling for all targets (at least, a clean solution
- would probably require this). Arguably, this should go in "tm-29k.h"
- rather than here. */
-
-#define STRUCT_VAL_ARGS_UNSUPPORTED
-
-#define BKPT_OFFSET (7 * 4)
-#define BKPT_INSTR 0x72500101
-
-#undef FIX_CALL_DUMMY
-#define FIX_CALL_DUMMY(dummyname, pc, fun, nargs, args, type, gcc_p) \
- {\
- STUFF_I16((char *)dummyname + CONST_INSN, fun);\
- STUFF_I16((char *)dummyname + CONST_INSN + 4, fun >> 16);\
- *(int *)((char *)dummyname + BKPT_OFFSET) = BKPT_INSTR;\
- }
-
-
-/* Offsets into jmp_buf. They are derived from VxWorks' REG_SET struct
- (see VxWorks' setjmp.h). Note that Sun2, Sun3 and SunOS4 and VxWorks have
- different REG_SET structs, hence different layouts for the jmp_buf struct.
- Only JB_PC is needed for getting the saved PC value. */
-
-#define JB_ELEMENT_SIZE 4 /* size of each element in jmp_buf */
-#define JB_PC 3 /* offset of pc (pc1) in jmp_buf */
-
-/* Figure out where the longjmp will land. We expect that we have just entered
- longjmp and haven't yet setup the stack frame, so the args are still in the
- output regs. lr2 (LR2_REGNUM) points at 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 *);
-
-/* VxWorks adjusts the PC after a breakpoint has been hit. */
-
-#undef DECR_PC_AFTER_BREAK
-#define DECR_PC_AFTER_BREAK 0
-
-/* Do whatever promotions are appropriate on a value being returned
- from a function. VAL is the user-supplied value, and FUNC_TYPE
- is the return type of the function if known, else 0.
-
- For the Am29k, as far as I understand, if the function return type is known,
- cast the value to that type; otherwise, ensure that integer return values
- fill all of gr96.
-
- This definition really belongs in "tm-29k.h", since it applies
- to most Am29K-based systems; but once moved into that file, it might
- need to be redefined for all Am29K-based targets that also redefine
- STORE_RETURN_VALUE. For now, to be safe, we define it here. */
-
-#define PROMOTE_RETURN_VALUE(val, func_type) \
- do { \
- if (func_type) \
- val = value_cast (func_type, val); \
- if ((TYPE_CODE (VALUE_TYPE (val)) == TYPE_CODE_INT \
- || TYPE_CODE (VALUE_TYPE (val)) == TYPE_CODE_ENUM) \
- && TYPE_LENGTH (VALUE_TYPE (val)) < REGISTER_RAW_SIZE (0)) \
- val = value_cast (builtin_type_int, val); \
- } while (0)
-
-extern int vx29k_frame_chain_valid (CORE_ADDR, struct frame_info *);
-#define FRAME_CHAIN_VALID(chain, thisframe) vx29k_frame_chain_valid (chain, thisframe)
-
-extern CORE_ADDR frame_saved_call_site ();
-
-#undef PREPARE_TO_INIT_FRAME_INFO
-#define PREPARE_TO_INIT_FRAME_INFO(fci) do { \
- long current_msp = read_register (MSP_REGNUM); \
- if (PC_IN_CALL_DUMMY (fci->pc, current_msp, 0)) \
- { \
- fci->rsize = DUMMY_FRAME_RSIZE; \
- fci->msize = 0; \
- fci->saved_msp = \
- read_register_stack_integer (fci->frame + DUMMY_FRAME_RSIZE - 4, 4); \
- fci->flags |= (TRANSPARENT|MFP_USED); \
- return; \
- } \
- } while (0)
+/* OBSOLETE /* Target machine description for VxWorks on the 29k, for GDB, the GNU debugger. */
+/* OBSOLETE Copyright 1994, 1995, 1998, 1999, 2000 Free Software Foundation, Inc. */
+/* OBSOLETE Contributed by Cygnus Support. */
+/* OBSOLETE */
+/* OBSOLETE This file is part of GDB. */
+/* OBSOLETE */
+/* OBSOLETE This program is free software; you can redistribute it and/or modify */
+/* OBSOLETE it under the terms of the GNU General Public License as published by */
+/* OBSOLETE the Free Software Foundation; either version 2 of the License, or */
+/* OBSOLETE (at your option) any later version. */
+/* OBSOLETE */
+/* OBSOLETE This program is distributed in the hope that it will be useful, */
+/* OBSOLETE but WITHOUT ANY WARRANTY; without even the implied warranty of */
+/* OBSOLETE MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
+/* OBSOLETE GNU General Public License for more details. */
+/* OBSOLETE */
+/* OBSOLETE You should have received a copy of the GNU General Public License */
+/* OBSOLETE along with this program; if not, write to the Free Software */
+/* OBSOLETE Foundation, Inc., 59 Temple Place - Suite 330, */
+/* OBSOLETE Boston, MA 02111-1307, USA. */ */
+/* OBSOLETE */
+/* OBSOLETE #include "regcache.h" */
+/* OBSOLETE #include "value.h" */
+/* OBSOLETE #include "a29k/tm-a29k.h" */
+/* OBSOLETE #include "tm-vxworks.h" */
+/* OBSOLETE */
+/* OBSOLETE /* Number of registers in a ptrace_getregs call. */ */
+/* OBSOLETE */
+/* OBSOLETE #define VX_NUM_REGS (NUM_REGS) */
+/* OBSOLETE */
+/* OBSOLETE /* Number of registers in a ptrace_getfpregs call. */ */
+/* OBSOLETE */
+/* OBSOLETE /* #define VX_SIZE_FPREGS */ */
+/* OBSOLETE */
+/* OBSOLETE /* This is almost certainly the wrong place for this: */ */
+/* OBSOLETE #define LR2_REGNUM 34 */
+/* OBSOLETE */
+/* OBSOLETE */
+/* OBSOLETE /* Vxworks has its own CALL_DUMMY since it manages breakpoints in the kernel */ */
+/* OBSOLETE */
+/* OBSOLETE #undef CALL_DUMMY */
+/* OBSOLETE */
+/* OBSOLETE /* Replace the breakpoint instruction in the CALL_DUMMY with a nop. */
+/* OBSOLETE For Vxworks, the breakpoint is set and deleted by calls to */
+/* OBSOLETE CALL_DUMMY_BREAK_SET and CALL_DUMMY_BREAK_DELETE. */ */
+/* OBSOLETE */
+/* OBSOLETE #error "This file is broken. GDB does not define HOST_BYTE_ORDER." */
+/* OBSOLETE #if TARGET_BYTE_ORDER == HOST_BYTE_ORDER */
+/* OBSOLETE #define CALL_DUMMY {0x0400870f,\ */
+/* OBSOLETE 0x36008200|(MSP_HW_REGNUM), \ */
+/* OBSOLETE 0x15000040|(MSP_HW_REGNUM<<8)|(MSP_HW_REGNUM<<16), \ */
+/* OBSOLETE 0x03ff80ff, 0x02ff80ff, 0xc8008080, 0x70400101, 0x70400101} */
+/* OBSOLETE #else /* Byte order differs. */ */
+/* OBSOLETE #define CALL_DUMMY {0x0f870004,\ */
+/* OBSOLETE 0x00820036|(MSP_HW_REGNUM << 24), \ */
+/* OBSOLETE 0x40000015|(MSP_HW_REGNUM<<8)|(MSP_HW_REGNUM<<16), \ */
+/* OBSOLETE 0xff80ff03, 0xff80ff02, 0x808000c8, 0x01014070, 0x01014070} */
+/* OBSOLETE #endif /* Byte order differs. */ */
+/* OBSOLETE */
+/* OBSOLETE */
+/* OBSOLETE /* For the basic CALL_DUMMY definitions, see "tm-29k.h." We use the */
+/* OBSOLETE same CALL_DUMMY code, but define FIX_CALL_DUMMY (and related macros) */
+/* OBSOLETE locally to handle remote debugging of VxWorks targets. The difference */
+/* OBSOLETE is in the setting and clearing of the breakpoint at the end of the */
+/* OBSOLETE CALL_DUMMY code fragment; under VxWorks, we can't simply insert a */
+/* OBSOLETE breakpoint instruction into the code, since that would interfere with */
+/* OBSOLETE the breakpoint management mechanism on the target. */
+/* OBSOLETE Note that CALL_DUMMY is a piece of code that is used to call any C function */
+/* OBSOLETE thru VxGDB */ */
+/* OBSOLETE */
+/* OBSOLETE /* The offset of the instruction within the CALL_DUMMY code where we */
+/* OBSOLETE want the inferior to stop after the function call has completed. */
+/* OBSOLETE call_function_by_hand () sets a breakpoint here (via CALL_DUMMY_BREAK_SET), */
+/* OBSOLETE which POP_FRAME later deletes (via CALL_DUMMY_BREAK_DELETE). */ */
+/* OBSOLETE */
+/* OBSOLETE #define CALL_DUMMY_STOP_OFFSET (7 * 4) */
+/* OBSOLETE */
+/* OBSOLETE /* The offset of the first instruction of the CALL_DUMMY code fragment */
+/* OBSOLETE relative to the frame pointer for a dummy frame. This is equal to */
+/* OBSOLETE the size of the CALL_DUMMY plus the arg_slop area size (see the diagram */
+/* OBSOLETE in "tm-29k.h"). */ */
+/* OBSOLETE /* PAD : the arg_slop area size doesn't appear to me to be useful since, the */
+/* OBSOLETE call dummy code no longer modify the msp. See below. This must be checked. */ */
+/* OBSOLETE */
+/* OBSOLETE #define CALL_DUMMY_OFFSET_IN_FRAME (CALL_DUMMY_LENGTH + 16 * 4) */
+/* OBSOLETE */
+/* OBSOLETE /* Insert the specified number of args and function address */
+/* OBSOLETE into a CALL_DUMMY sequence stored at DUMMYNAME, replace the third */
+/* OBSOLETE instruction (add msp, msp, 16*4) with a nop, and leave the final nop. */
+/* OBSOLETE We can't keep using a CALL_DUMMY that modify the msp since, for VxWorks, */
+/* OBSOLETE CALL_DUMMY is stored in the Memory Stack. Adding 16 words to the msp */
+/* OBSOLETE would then make possible for the inferior to overwrite the CALL_DUMMY code, */
+/* OBSOLETE thus creating a lot of trouble when exiting the inferior to come back in */
+/* OBSOLETE a CALL_DUMMY code that no longer exists... Furthermore, ESF are also stored */
+/* OBSOLETE from the msp in the memory stack. If msp is set higher than the dummy code, */
+/* OBSOLETE an ESF may clobber this code. */ */
+/* OBSOLETE */
+/* OBSOLETE #if TARGET_BYTE_ORDER == BFD_ENDIAN_BIG */
+/* OBSOLETE #define NOP_INSTR 0x70400101 */
+/* OBSOLETE #else /* Target is little endian */ */
+/* OBSOLETE #define NOP_INSTR 0x01014070 */
+/* OBSOLETE #endif */
+/* OBSOLETE */
+/* OBSOLETE #undef FIX_CALL_DUMMY */
+/* OBSOLETE #define FIX_CALL_DUMMY(dummyname, pc, fun, nargs, args, type, gcc_p) \ */
+/* OBSOLETE { \ */
+/* OBSOLETE *(int *)((char *)dummyname + 8) = NOP_INSTR; \ */
+/* OBSOLETE STUFF_I16((char *)dummyname + CONST_INSN, fun); \ */
+/* OBSOLETE STUFF_I16((char *)dummyname + CONST_INSN + 4, fun >> 16); \ */
+/* OBSOLETE } */
+/* OBSOLETE */
+/* OBSOLETE /* For VxWorks, CALL_DUMMY must be stored in the stack of the task that is */
+/* OBSOLETE being debugged and executed "in the context of" this task */ */
+/* OBSOLETE */
+/* OBSOLETE #undef CALL_DUMMY_LOCATION */
+/* OBSOLETE #define CALL_DUMMY_LOCATION ON_STACK */
+/* OBSOLETE */
+/* OBSOLETE /* Set or delete a breakpoint at the location within a CALL_DUMMY code */
+/* OBSOLETE fragment where we want the target program to stop after the function */
+/* OBSOLETE call is complete. CALL_DUMMY_ADDR is the address of the first */
+/* OBSOLETE instruction in the CALL_DUMMY. DUMMY_FRAME_ADDR is the value of the */
+/* OBSOLETE frame pointer in the dummy frame. */
+/* OBSOLETE */
+/* OBSOLETE NOTE: in the both of the following definitions, we take advantage of */
+/* OBSOLETE knowledge of the implementation of the target breakpoint operation, */
+/* OBSOLETE in that we pass a null pointer as the second argument. It seems */
+/* OBSOLETE reasonable to assume that any target requiring the use of */
+/* OBSOLETE CALL_DUMMY_BREAK_{SET,DELETE} will not store the breakpoint */
+/* OBSOLETE shadow contents in GDB; in any case, this assumption is vaild */
+/* OBSOLETE for all VxWorks-related targets. */ */
+/* OBSOLETE */
+/* OBSOLETE #define CALL_DUMMY_BREAK_SET(call_dummy_addr) \ */
+/* OBSOLETE target_insert_breakpoint ((call_dummy_addr) + CALL_DUMMY_STOP_OFFSET, \ */
+/* OBSOLETE (char *) 0) */
+/* OBSOLETE */
+/* OBSOLETE #define CALL_DUMMY_BREAK_DELETE(dummy_frame_addr) \ */
+/* OBSOLETE target_remove_breakpoint ((dummy_frame_addr) - (CALL_DUMMY_OFFSET_IN_FRAME \ */
+/* OBSOLETE - CALL_DUMMY_STOP_OFFSET), \ */
+/* OBSOLETE (char *) 0) */
+/* OBSOLETE */
+/* OBSOLETE /* Return nonzero if the pc is executing within a CALL_DUMMY frame. */ */
+/* OBSOLETE */
+/* OBSOLETE #define PC_IN_CALL_DUMMY(pc, sp, frame_address) \ */
+/* OBSOLETE ((pc) >= (sp) \ */
+/* OBSOLETE && (pc) <= (sp) + CALL_DUMMY_OFFSET_IN_FRAME + CALL_DUMMY_LENGTH) */
+/* OBSOLETE */
+/* OBSOLETE /* Defining this prevents us from trying to pass a structure-valued argument */
+/* OBSOLETE to a function called via the CALL_DUMMY mechanism. This is not handled */
+/* OBSOLETE properly in call_function_by_hand (), and the fix might require re-writing */
+/* OBSOLETE the CALL_DUMMY handling for all targets (at least, a clean solution */
+/* OBSOLETE would probably require this). Arguably, this should go in "tm-29k.h" */
+/* OBSOLETE rather than here. */ */
+/* OBSOLETE */
+/* OBSOLETE #define STRUCT_VAL_ARGS_UNSUPPORTED */
+/* OBSOLETE */
+/* OBSOLETE #define BKPT_OFFSET (7 * 4) */
+/* OBSOLETE #define BKPT_INSTR 0x72500101 */
+/* OBSOLETE */
+/* OBSOLETE #undef FIX_CALL_DUMMY */
+/* OBSOLETE #define FIX_CALL_DUMMY(dummyname, pc, fun, nargs, args, type, gcc_p) \ */
+/* OBSOLETE {\ */
+/* OBSOLETE STUFF_I16((char *)dummyname + CONST_INSN, fun);\ */
+/* OBSOLETE STUFF_I16((char *)dummyname + CONST_INSN + 4, fun >> 16);\ */
+/* OBSOLETE *(int *)((char *)dummyname + BKPT_OFFSET) = BKPT_INSTR;\ */
+/* OBSOLETE } */
+/* OBSOLETE */
+/* OBSOLETE */
+/* OBSOLETE /* Offsets into jmp_buf. They are derived from VxWorks' REG_SET struct */
+/* OBSOLETE (see VxWorks' setjmp.h). Note that Sun2, Sun3 and SunOS4 and VxWorks have */
+/* OBSOLETE different REG_SET structs, hence different layouts for the jmp_buf struct. */
+/* OBSOLETE Only JB_PC is needed for getting the saved PC value. */ */
+/* OBSOLETE */
+/* OBSOLETE #define JB_ELEMENT_SIZE 4 /* size of each element in jmp_buf */ */
+/* OBSOLETE #define JB_PC 3 /* offset of pc (pc1) in jmp_buf */ */
+/* OBSOLETE */
+/* OBSOLETE /* Figure out where the longjmp will land. We expect that we have just entered */
+/* OBSOLETE longjmp and haven't yet setup the stack frame, so the args are still in the */
+/* OBSOLETE output regs. lr2 (LR2_REGNUM) points at the jmp_buf structure from which we */
+/* OBSOLETE extract the pc (JB_PC) that we will land at. The pc is copied into ADDR. */
+/* OBSOLETE This routine returns true on success */ */
+/* OBSOLETE */
+/* OBSOLETE #define GET_LONGJMP_TARGET(ADDR) get_longjmp_target(ADDR) */
+/* OBSOLETE extern int get_longjmp_target (CORE_ADDR *); */
+/* OBSOLETE */
+/* OBSOLETE /* VxWorks adjusts the PC after a breakpoint has been hit. */ */
+/* OBSOLETE */
+/* OBSOLETE #undef DECR_PC_AFTER_BREAK */
+/* OBSOLETE #define DECR_PC_AFTER_BREAK 0 */
+/* OBSOLETE */
+/* OBSOLETE /* Do whatever promotions are appropriate on a value being returned */
+/* OBSOLETE from a function. VAL is the user-supplied value, and FUNC_TYPE */
+/* OBSOLETE is the return type of the function if known, else 0. */
+/* OBSOLETE */
+/* OBSOLETE For the Am29k, as far as I understand, if the function return type is known, */
+/* OBSOLETE cast the value to that type; otherwise, ensure that integer return values */
+/* OBSOLETE fill all of gr96. */
+/* OBSOLETE */
+/* OBSOLETE This definition really belongs in "tm-29k.h", since it applies */
+/* OBSOLETE to most Am29K-based systems; but once moved into that file, it might */
+/* OBSOLETE need to be redefined for all Am29K-based targets that also redefine */
+/* OBSOLETE STORE_RETURN_VALUE. For now, to be safe, we define it here. */ */
+/* OBSOLETE */
+/* OBSOLETE #define PROMOTE_RETURN_VALUE(val, func_type) \ */
+/* OBSOLETE do { \ */
+/* OBSOLETE if (func_type) \ */
+/* OBSOLETE val = value_cast (func_type, val); \ */
+/* OBSOLETE if ((TYPE_CODE (VALUE_TYPE (val)) == TYPE_CODE_INT \ */
+/* OBSOLETE || TYPE_CODE (VALUE_TYPE (val)) == TYPE_CODE_ENUM) \ */
+/* OBSOLETE && TYPE_LENGTH (VALUE_TYPE (val)) < REGISTER_RAW_SIZE (0)) \ */
+/* OBSOLETE val = value_cast (builtin_type_int, val); \ */
+/* OBSOLETE } while (0) */
+/* OBSOLETE */
+/* OBSOLETE extern int vx29k_frame_chain_valid (CORE_ADDR, struct frame_info *); */
+/* OBSOLETE #define FRAME_CHAIN_VALID(chain, thisframe) vx29k_frame_chain_valid (chain, thisframe) */
+/* OBSOLETE */
+/* OBSOLETE extern CORE_ADDR frame_saved_call_site (); */
+/* OBSOLETE */
+/* OBSOLETE #undef PREPARE_TO_INIT_FRAME_INFO */
+/* OBSOLETE #define PREPARE_TO_INIT_FRAME_INFO(fci) do { \ */
+/* OBSOLETE long current_msp = read_register (MSP_REGNUM); \ */
+/* OBSOLETE if (PC_IN_CALL_DUMMY (fci->pc, current_msp, 0)) \ */
+/* OBSOLETE { \ */
+/* OBSOLETE fci->rsize = DUMMY_FRAME_RSIZE; \ */
+/* OBSOLETE fci->msize = 0; \ */
+/* OBSOLETE fci->saved_msp = \ */
+/* OBSOLETE read_register_stack_integer (fci->frame + DUMMY_FRAME_RSIZE - 4, 4); \ */
+/* OBSOLETE fci->flags |= (TRANSPARENT|MFP_USED); \ */
+/* OBSOLETE return; \ */
+/* OBSOLETE } \ */
+/* OBSOLETE } while (0) */