* ns32k-tdep.c (ns32k_register_byte_32082,

ns32k_register_byte_32382, ns32k_register_raw_size,
ns32k_register_virtual_size, ns32k_register_virtual_type): New
functions.
* config/ns32k/tm-nbsd.h (REGISTER_BYTE): Define as
ns32k_register_byte_32382.
* config/ns32k/tm-umax.h: Update copyright years.
(REGISTER_BYTE): Define as ns32k_register_byte_32082.
(REGISTER_RAW_SIZE): Define as ns32k_register_raw_size.
(REGISTER_VIRTUAL_SIZE): Define as ns32k_register_virtual_size.
(REGISTER_VIRTUAL_TYPE): Define as ns32k_register_virtual_type.
(ns32k_get_enter_addr): Fix prototype.
This commit is contained in:
Jason Thorpe 2002-05-26 17:59:39 +00:00
parent d43efbe328
commit f2c762e031
4 changed files with 81 additions and 39 deletions

View file

@ -1,3 +1,18 @@
2002-05-26 Jason Thorpe <thorpej@wasabisystems.com>
* ns32k-tdep.c (ns32k_register_byte_32082,
ns32k_register_byte_32382, ns32k_register_raw_size,
ns32k_register_virtual_size, ns32k_register_virtual_type): New
functions.
* config/ns32k/tm-nbsd.h (REGISTER_BYTE): Define as
ns32k_register_byte_32382.
* config/ns32k/tm-umax.h: Update copyright years.
(REGISTER_BYTE): Define as ns32k_register_byte_32082.
(REGISTER_RAW_SIZE): Define as ns32k_register_raw_size.
(REGISTER_VIRTUAL_SIZE): Define as ns32k_register_virtual_size.
(REGISTER_VIRTUAL_TYPE): Define as ns32k_register_virtual_type.
(ns32k_get_enter_addr): Fix prototype.
2002-05-26 Jason Thorpe <thorpej@wasabisystems.com> 2002-05-26 Jason Thorpe <thorpej@wasabisystems.com>
* ns32k-tdep.c: Update copyright years. * ns32k-tdep.c: Update copyright years.

View file

@ -49,7 +49,7 @@
/* tm-umax.h assumes a 32082 fpu. We have a 32382 fpu. */ /* tm-umax.h assumes a 32082 fpu. We have a 32382 fpu. */
#undef REGISTER_NAME #undef REGISTER_NAME
#define REGISTER_NAME(REGNUM) ns32k_register_name_32382(REGNUM) #define REGISTER_NAME(REGNUM) ns32k_register_name_32382((REGNUM))
#undef NUM_REGS #undef NUM_REGS
#define NUM_REGS 29 #define NUM_REGS 29
@ -61,18 +61,7 @@
((NUM_REGS - 4) * REGISTER_RAW_SIZE(R0_REGNUM) \ ((NUM_REGS - 4) * REGISTER_RAW_SIZE(R0_REGNUM) \
+ 8 * REGISTER_RAW_SIZE(LP0_REGNUM)) + 8 * REGISTER_RAW_SIZE(LP0_REGNUM))
/* Index within `registers' of the first byte of the space for
register N. */
/* This is a bit yuck. The even numbered double precision floating
point long registers occupy the same space as the even:odd numbered
single precision floating point registers, but the extra 32381 fpu
registers are at the end. Doing it this way is compatable for both
32081 and 32381 equiped machines. */
#undef REGISTER_BYTE #undef REGISTER_BYTE
#define REGISTER_BYTE(N) (((N) < LP0_REGNUM? (N)\ #define REGISTER_BYTE(N) ns32k_register_byte_32382 ((N))
: ((N) - LP0_REGNUM) & 1? (N) - 1 \
: ((N) - LP0_REGNUM + FP0_REGNUM)) * 4)
#endif /* TM_NBSD_H */ #endif /* TM_NBSD_H */

View file

@ -1,5 +1,5 @@
/* Definitions to make GDB run on an encore under umax 4.2 /* Definitions to make GDB run on an encore under umax 4.2
Copyright 1987, 1989, 1991, 1993, 1994, 1998, 1999, 2000, 2001 Copyright 1987, 1989, 1991, 1993, 1994, 1998, 1999, 2000, 2001, 2002
Free Software Foundation, Inc. Free Software Foundation, Inc.
This file is part of GDB. This file is part of GDB.
@ -106,21 +106,15 @@ extern char *ns32k_register_name_32382 (int);
/* Index within `registers' of the first byte of the space for /* Index within `registers' of the first byte of the space for
register N. */ register N. */
extern int ns32k_register_byte_32082 (int);
extern int ns32k_register_byte_32382 (int);
#define REGISTER_BYTE(N) ns32k_register_byte_32082 ((N))
#define REGISTER_BYTE(N) ((N) >= LP0_REGNUM ? \ extern int ns32k_register_raw_size (int);
LP0_REGNUM * 4 + ((N) - LP0_REGNUM) * 8 : (N) * 4) #define REGISTER_RAW_SIZE(N) ns32k_register_raw_size ((N))
/* Number of bytes of storage in the actual machine representation extern int ns32k_register_virtual_size (int);
for register N. On the 32000, all regs are 4 bytes #define REGISTER_VIRTUAL_SIZE(N) ns32k_register_virtual_size ((N))
except for the doubled floating registers. */
#define REGISTER_RAW_SIZE(N) ((N) >= LP0_REGNUM ? 8 : 4)
/* Number of bytes of storage in the program's representation
for register N. On the 32000, all regs are 4 bytes
except for the doubled floating registers. */
#define REGISTER_VIRTUAL_SIZE(N) ((N) >= LP0_REGNUM ? 8 : 4)
/* Largest value REGISTER_RAW_SIZE can have. */ /* Largest value REGISTER_RAW_SIZE can have. */
@ -130,17 +124,8 @@ extern char *ns32k_register_name_32382 (int);
#define MAX_REGISTER_VIRTUAL_SIZE 8 #define MAX_REGISTER_VIRTUAL_SIZE 8
/* Return the GDB type object for the "standard" data type struct type *ns32k_register_virtual_type (int);
of data in register N. */ #define REGISTER_VIRTUAL_TYPE(N) ns32k_register_virtual_type ((N))
#define REGISTER_VIRTUAL_TYPE(N) \
(((N) < FP0_REGNUM) ? \
builtin_type_int : \
((N) < FP0_REGNUM + 8) ? \
builtin_type_float : \
((N) < LP0_REGNUM) ? \
builtin_type_int : \
builtin_type_double)
/* Store the address of the place in which to copy the structure the /* Store the address of the place in which to copy the structure the
subroutine will return. This is called from call_function. subroutine will return. This is called from call_function.
@ -199,7 +184,7 @@ extern char *ns32k_register_name_32382 (int);
Returns positive address > 1 if pc is between enter/exit, Returns positive address > 1 if pc is between enter/exit,
1 if pc before enter or after exit, 0 otherwise. */ 1 if pc before enter or after exit, 0 otherwise. */
extern CORE_ADDR ns32k_get_enter_addr (); extern CORE_ADDR ns32k_get_enter_addr (CORE_ADDR);
/* Return number of args passed to a frame. /* Return number of args passed to a frame.
Can return -1, meaning no way to tell. */ Can return -1, meaning no way to tell. */

View file

@ -64,6 +64,59 @@ ns32k_register_name_32382 (int regno)
return (register_names[regno]); return (register_names[regno]);
} }
int
ns32k_register_byte_32082 (int regno)
{
if (regno >= LP0_REGNUM)
return (LP0_REGNUM * 4) + ((regno - LP0_REGNUM) * 8);
return (regno * 4);
}
int
ns32k_register_byte_32382 (int regno)
{
/* This is a bit yuk. The even numbered double precision floating
point long registers occupy the same space as the even:odd numbered
single precision floating point registers, but the extra 32381 FPU
registers are at the end. Doing it this way is compatible for both
32081 and 32381 equipped machines. */
return ((regno < LP0_REGNUM ? regno
: (regno - LP0_REGNUM) & 1 ? regno - 1
: (regno - LP0_REGNUM + FP0_REGNUM)) * 4);
}
int
ns32k_register_raw_size (int regno)
{
/* All registers are 4 bytes, except for the doubled floating
registers. */
return ((regno >= LP0_REGNUM) ? 8 : 4);
}
int
ns32k_register_virtual_size (int regno)
{
return ((regno >= LP0_REGNUM) ? 8 : 4);
}
struct type *
ns32k_register_virtual_type (int regno)
{
if (regno < FP0_REGNUM)
return (builtin_type_int);
if (regno < FP0_REGNUM + 8)
return (builtin_type_float);
if (regno < LP0_REGNUM)
return (builtin_type_int);
return (builtin_type_double);
}
/* Advance PC across any function entry prologue instructions /* Advance PC across any function entry prologue instructions
to reach some "real" code. */ to reach some "real" code. */