* sparc-tdep.c, lynx-nat.c, config/sparc/tm-sparc.h,

config/sparc/tm-sparclynx.h:  Move defs of FRAME_SAVED_I0/L0 to
	tm-sparc.h so they can be overridden if necessary.
This commit is contained in:
Stu Grossman 1994-01-22 08:42:14 +00:00
parent eae821453c
commit 8bf94f44bc
5 changed files with 37 additions and 15 deletions

View file

@ -1,3 +1,9 @@
Sat Jan 22 00:34:47 1994 Stu Grossman (grossman at cygnus.com)
* sparc-tdep.c, lynx-nat.c, config/sparc/tm-sparc.h,
config/sparc/tm-sparclynx.h: Move defs of FRAME_SAVED_I0/L0 to
tm-sparc.h so they can be overridden if necessary.
Fri Jan 21 17:49:28 1994 Stu Grossman (grossman at cygnus.com)
* lynx-nat.c: Add Sparc support.

View file

@ -346,10 +346,18 @@ CORE_ADDR sparc_frame_chain ();
#define FRAMELESS_FUNCTION_INVOCATION(FI, FRAMELESS) \
(FRAMELESS) = frameless_look_for_prologue(FI)
/* The location of I0 w.r.t SP. This is actually dependent on how the system's
window overflow/underflow routines are written. Most vendors save the L regs
followed by the I regs (at the higher address). Some vendors get it wrong.
*/
#define FRAME_SAVED_L0 0
#define FRAME_SAVED_I0 (8 * REGISTER_RAW_SIZE (L0_REGNUM))
/* Where is the PC for a specific frame */
#define FRAME_SAVED_PC(FRAME) frame_saved_pc (FRAME)
CORE_ADDR frame_saved_pc ();
#define FRAME_SAVED_PC(FRAME) sparc_frame_saved_pc (FRAME)
CORE_ADDR sparc_frame_saved_pc ();
/* If the argument is on the stack, it will be here. */
#define FRAME_ARGS_ADDRESS(fi) ((fi)->frame)

View file

@ -25,4 +25,12 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
/* Use generic Sparc definitions. */
#include "sparc/tm-sparc.h"
/* Lynx does this backwards from everybody else */
#undef FRAME_SAVED_I0
#undef FRAME_SAVED_L0
#define FRAME_SAVED_I0 0
#define FRAME_SAVED_L0 (8 * REGISTER_RAW_SIZE (I0_REGNUM))
#endif /* TM_SPARCLYNX_H */

View file

@ -235,14 +235,14 @@ fetch_inferior_registers (regno)
sp = read_register (SP_REGNUM);
target_xfer_memory (sp, &registers[REGISTER_BYTE(I0_REGNUM)],
target_xfer_memory (sp + FRAME_SAVED_I0,
&registers[REGISTER_BYTE(I0_REGNUM)],
8 * REGISTER_RAW_SIZE (I0_REGNUM), 0);
for (i = I0_REGNUM; i <= I7_REGNUM; i++)
register_valid[i] = 1;
sp += 8 * REGISTER_RAW_SIZE (I0_REGNUM);
target_xfer_memory (sp, &registers[REGISTER_BYTE(L0_REGNUM)],
target_xfer_memory (sp + FRAME_SAVED_L0,
&registers[REGISTER_BYTE(L0_REGNUM)],
8 * REGISTER_RAW_SIZE (L0_REGNUM), 0);
for (i = L0_REGNUM; i <= L0_REGNUM + 7; i++)
register_valid[i] = 1;
@ -329,10 +329,12 @@ store_inferior_registers (regno)
{
if (!register_valid[L0_REGNUM+5])
abort();
target_xfer_memory (sp, &registers[REGISTER_BYTE (I0_REGNUM)],
target_xfer_memory (sp + FRAME_SAVED_I0,
&registers[REGISTER_BYTE (I0_REGNUM)],
8 * REGISTER_RAW_SIZE (I0_REGNUM), 1);
sp += 8 * REGISTER_RAW_SIZE (I0_REGNUM);
target_xfer_memory (sp, &registers[REGISTER_BYTE (L0_REGNUM)],
target_xfer_memory (sp + FRAME_SAVED_L0,
&registers[REGISTER_BYTE (L0_REGNUM)],
8 * REGISTER_RAW_SIZE (L0_REGNUM), 1);
}
else if (regno >= L0_REGNUM && regno <= I7_REGNUM)
@ -341,9 +343,10 @@ store_inferior_registers (regno)
abort();
if (regno >= L0_REGNUM && regno <= L0_REGNUM + 7)
regoffset = REGISTER_BYTE (regno) - REGISTER_BYTE (L0_REGNUM)
+ 8 * REGISTER_RAW_SIZE (I0_REGNUM);
+ FRAME_SAVED_L0;
else
regoffset = REGISTER_BYTE (regno) - REGISTER_BYTE (I0_REGNUM);
regoffset = REGISTER_BYTE (regno) - REGISTER_BYTE (I0_REGNUM)
+ FRAME_SAVED_I0;
target_xfer_memory (sp + regoffset, &registers[REGISTER_BYTE (regno)],
REGISTER_RAW_SIZE (regno), 1);
}

View file

@ -131,9 +131,6 @@ single_step (ignore)
}
}
#define FRAME_SAVED_L0 0 /* Byte offset from SP */
#define FRAME_SAVED_I0 (8 * REGISTER_RAW_SIZE (0)) /* Byte offset from SP */
CORE_ADDR
sparc_frame_chain (thisframe)
FRAME thisframe;
@ -161,7 +158,7 @@ sparc_extract_struct_value_address (regbuf)
/* Find the pc saved in frame FRAME. */
CORE_ADDR
frame_saved_pc (frame)
sparc_frame_saved_pc (frame)
FRAME frame;
{
char buf[MAX_REGISTER_RAW_SIZE];