* defs.h: Move definitions of TARGET_*_BIT after include of tm.h.

The old way (using #undef in tm.h) was ugly and asking for
	trouble, because it makes it possible for some file to use the
	wrong definition.  Move definition of HOST_CHAR_BIT after definition
	of TARGET_CHAR_BIT.
	* config/alpha/tm-alpha.h, config/h8300/tm-h8300.h,
	config/h8500/tm-h8500.h, config/z8k/tm-z8k.h: Don't undef TARGET_*_BIT
	before defining them.
This commit is contained in:
Jim Kingdon 1993-12-25 18:44:22 +00:00
parent 504ccfd788
commit 04f566a356
6 changed files with 170 additions and 134 deletions

View File

@ -1,5 +1,14 @@
Sat Dec 25 09:50:29 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
* defs.h: Move definitions of TARGET_*_BIT after include of tm.h.
The old way (using #undef in tm.h) was ugly and asking for
trouble, because it makes it possible for some file to use the
wrong definition. Move definition of HOST_CHAR_BIT after definition
of TARGET_CHAR_BIT.
* config/alpha/tm-alpha.h, config/h8300/tm-h8300.h,
config/h8500/tm-h8500.h, config/z8k/tm-z8k.h: Don't undef TARGET_*_BIT
before defining them.
* mdebugread.c: Change the builtin_type_* in this file to
mdebug_type_* and make them static. Use TYPE_CODE_ERROR for
complex and float decimal.

View File

@ -27,11 +27,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
/* Redefine some target bit sizes from the default. */
#undef TARGET_LONG_BIT
#define TARGET_LONG_BIT 64
#undef TARGET_LONG_LONG_BIT
#define TARGET_LONG_LONG_BIT 64
#undef TARGET_PTR_BIT
#define TARGET_PTR_BIT 64
/* Floating point is IEEE compliant */
@ -167,21 +164,34 @@ alpha_saved_pc_after_call PARAMS ((struct frame_info *));
#define MAX_REGISTER_VIRTUAL_SIZE 8
/* Nonzero if register N requires conversion
from raw format to virtual format. */
from raw format to virtual format.
The alpha needs a conversion between register and memory format if
the register is a floating point register and
memory format is float, as the register format must be double
or
memory format is an integer with 4 bytes or less, as the representation
of integers in floating point registers is different. */
#define REGISTER_CONVERTIBLE(N) 0
#define REGISTER_CONVERTIBLE(N) ((N) >= FP0_REGNUM && (N) < FP0_REGNUM + 32)
/* Convert data from raw format for register REGNUM
to virtual format for register REGNUM. */
/* Convert data from raw format for register REGNUM in buffer FROM
to virtual format with type TYPE in buffer TO. */
#define REGISTER_CONVERT_TO_VIRTUAL(REGNUM,FROM,TO) \
memcpy ((TO), (FROM), 8);
#define REGISTER_CONVERT_TO_VIRTUAL(REGNUM, TYPE, FROM, TO) \
alpha_register_convert_to_virtual (REGNUM, TYPE, FROM, TO)
#ifdef __STDC__
struct type;
#endif
extern void
alpha_register_convert_to_virtual PARAMS ((int, struct type *, char *, char *));
/* Convert data from virtual format for register REGNUM
to raw format for register REGNUM. */
/* Convert data from virtual format with type TYPE in buffer FROM
to raw format for register REGNUM in buffer TO. */
#define REGISTER_CONVERT_TO_RAW(REGNUM,FROM,TO) \
memcpy ((TO), (FROM), 8);
#define REGISTER_CONVERT_TO_RAW(TYPE, REGNUM, FROM, TO) \
alpha_register_convert_to_raw (TYPE, REGNUM, FROM, TO)
extern void
alpha_register_convert_to_raw PARAMS ((struct type *, int, char *, char *));
/* Return the GDB type object for the "standard" data type
of data in register N. */
@ -201,9 +211,6 @@ alpha_saved_pc_after_call PARAMS ((struct frame_info *));
#define EXTRACT_RETURN_VALUE(TYPE,REGBUF,VALBUF) \
alpha_extract_return_value(TYPE, REGBUF, VALBUF)
#ifdef __STDC__
struct type;
#endif
extern void
alpha_extract_return_value PARAMS ((struct type *, char *, char *));
@ -257,11 +264,22 @@ alpha_frame_chain PARAMS ((struct frame_info *));
extern CORE_ADDR
alpha_frame_saved_pc PARAMS ((struct frame_info *));
/* The offsets for the arguments and locals are off a virtual pointer
to the argument transfer area. The argument transfer area is immediately
below the virtual frame pointer, its size is in localoff from the PDR. */
/* The alpha has two different virtual pointers for arguments and locals.
#define FRAME_ARGS_ADDRESS(fi) ((fi)->frame - (fi)->localoff)
The virtual argument pointer is pointing to the bottom of the argument
transfer area, which is located immediately below the virtual frame
pointer. Its size is fixed for the native compiler, it is either zero
(for the no arguments case) or large enough to hold all argument registers.
gcc uses a variable sized argument transfer area. As it has
to stay compatible with the native debugging tools it has to use the same
virtual argument pointer and adjust the argument offsets accordingly.
The virtual local pointer is localoff bytes below the virtual frame
pointer, the value of localoff is obtained from the PDR. */
#define ALPHA_NUM_ARG_REGS 6
#define FRAME_ARGS_ADDRESS(fi) ((fi)->frame - (ALPHA_NUM_ARG_REGS * 8))
#define FRAME_LOCALS_ADDRESS(fi) ((fi)->frame - (fi)->localoff)

View File

@ -47,11 +47,9 @@ extern void init_extra_frame_info ();
#define IEEE_FLOAT
/* Define the bit, byte, and word ordering of the machine. */
#define TARGET_BYTE_ORDER BIG_ENDIAN
#undef TARGET_INT_BIT
#define TARGET_INT_BIT 16
#undef TARGET_LONG_BIT
#define TARGET_LONG_BIT 32
#undef TARGET_PTR_BIT
#define TARGET_PTR_BIT (h8300hmode ? 32:16)
/* Offset from address of function to start of its code.

View File

@ -27,13 +27,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#define TARGET_BYTE_ORDER BIG_ENDIAN
#undef TARGET_INT_BIT
#define TARGET_INT_BIT 16
#undef TARGET_LONG_BIT
#define TARGET_LONG_BIT 32
#undef TARGET_PTR_BIT
#define TARGET_PTR_BIT (minimum_mode ? 16 : 32)

View File

@ -19,11 +19,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#define IEEE_FLOAT 1
#undef TARGET_INT_BIT
#undef TARGET_LONG_BIT
#undef TARGET_SHORT_BIT
#undef TARGET_PTR_BIT
#define TARGET_SHORT_BIT 16
#define TARGET_INT_BIT 16
#define TARGET_LONG_BIT 32

View File

@ -28,7 +28,11 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include "ansidecl.h"
/* An address in the program being debugged. Host byte order. */
#ifndef CORE_ADDR_TYPE
typedef unsigned int CORE_ADDR;
#else
typedef CORE_ADDR_TYPE CORE_ADDR;
#endif
#define min(a, b) ((a) < (b) ? (a) : (b))
#define max(a, b) ((a) > (b) ? (a) : (b))
@ -217,15 +221,39 @@ wrap_here PARAMS ((char *));
extern void
reinitialize_more_filter PARAMS ((void));
typedef FILE GDB_FILE;
#define gdb_stdout stdout
#define gdb_stderr stderr
extern int
print_insn PARAMS ((CORE_ADDR, FILE *));
print_insn PARAMS ((CORE_ADDR, GDB_FILE *));
extern void
fputs_filtered PARAMS ((const char *, FILE *));
gdb_flush PARAMS ((GDB_FILE *));
extern GDB_FILE *
gdb_fopen PARAMS ((char * name, char * mode));
extern void
fputs_filtered PARAMS ((const char *, GDB_FILE *));
extern void
fputs_unfiltered PARAMS ((const char *, GDB_FILE *));
extern void
fputc_unfiltered PARAMS ((int, GDB_FILE *));
extern void
putc_unfiltered PARAMS ((int));
#define putchar_unfiltered(C) putc_unfiltered(C)
extern void
puts_filtered PARAMS ((char *));
extern void
puts_unfiltered PARAMS ((char *));
extern void
vprintf_filtered ();
@ -245,19 +273,31 @@ extern void
printfi_filtered ();
extern void
print_spaces PARAMS ((int, FILE *));
vprintf_unfiltered ();
extern void
print_spaces_filtered PARAMS ((int, FILE *));
vfprintf_unfiltered ();
extern void
fprintf_unfiltered ();
extern void
printf_unfiltered ();
extern void
print_spaces PARAMS ((int, GDB_FILE *));
extern void
print_spaces_filtered PARAMS ((int, GDB_FILE *));
extern char *
n_spaces PARAMS ((int));
extern void
gdb_printchar PARAMS ((int, FILE *, int));
gdb_printchar PARAMS ((int, GDB_FILE *, int));
extern void
fprintf_symbol_filtered PARAMS ((FILE *, char *, enum language, int));
fprintf_symbol_filtered PARAMS ((GDB_FILE *, char *, enum language, int));
extern void
perror_with_name PARAMS ((char *));
@ -303,10 +343,10 @@ extern void
set_next_address PARAMS ((CORE_ADDR));
extern void
print_address_symbolic PARAMS ((CORE_ADDR, FILE *, int, char *));
print_address_symbolic PARAMS ((CORE_ADDR, GDB_FILE *, int, char *));
extern void
print_address PARAMS ((CORE_ADDR, FILE *));
print_address PARAMS ((CORE_ADDR, GDB_FILE *));
/* From source.c */
@ -462,62 +502,6 @@ enum val_prettyprint
#define LONG_MAX ((long)(ULONG_MAX >> 1)) /* 0x7FFFFFFF for 32-bits */
#endif
/* Number of bits in a char or unsigned char for the target machine.
Just like CHAR_BIT in <limits.h> but describes the target machine. */
#if !defined (TARGET_CHAR_BIT)
#define TARGET_CHAR_BIT 8
#endif
/* Number of bits in a short or unsigned short for the target machine. */
#if !defined (TARGET_SHORT_BIT)
#define TARGET_SHORT_BIT (sizeof (short) * TARGET_CHAR_BIT)
#endif
/* Number of bits in an int or unsigned int for the target machine. */
#if !defined (TARGET_INT_BIT)
#define TARGET_INT_BIT (sizeof (int) * TARGET_CHAR_BIT)
#endif
/* Number of bits in a long or unsigned long for the target machine. */
#if !defined (TARGET_LONG_BIT)
#define TARGET_LONG_BIT (sizeof (long) * TARGET_CHAR_BIT)
#endif
/* Number of bits in a long long or unsigned long long for the target machine. */
#if !defined (TARGET_LONG_LONG_BIT)
#define TARGET_LONG_LONG_BIT (2 * TARGET_LONG_BIT)
#endif
/* Number of bits in a float for the target machine. */
#if !defined (TARGET_FLOAT_BIT)
#define TARGET_FLOAT_BIT (sizeof (float) * TARGET_CHAR_BIT)
#endif
/* Number of bits in a double for the target machine. */
#if !defined (TARGET_DOUBLE_BIT)
#define TARGET_DOUBLE_BIT (sizeof (double) * TARGET_CHAR_BIT)
#endif
/* Number of bits in a long double for the target machine. */
#if !defined (TARGET_LONG_DOUBLE_BIT)
#define TARGET_LONG_DOUBLE_BIT (2 * TARGET_DOUBLE_BIT)
#endif
/* Number of bits in a "complex" for the target machine. */
#if !defined (TARGET_COMPLEX_BIT)
#define TARGET_COMPLEX_BIT (2 * TARGET_FLOAT_BIT)
#endif
/* Number of bits in a "double complex" for the target machine. */
#if !defined (TARGET_DOUBLE_COMPLEX_BIT)
#define TARGET_DOUBLE_COMPLEX_BIT (2 * TARGET_DOUBLE_BIT)
#endif
/* Number of bits in a pointer for the target machine */
#if !defined (TARGET_PTR_BIT)
#define TARGET_PTR_BIT TARGET_INT_BIT
#endif
/* Default to support for "long long" if the host compiler being used is gcc.
Config files must define CC_HAS_LONG_LONG to use other host compilers
that are capable of supporting "long long", and to cause gdb to use that
@ -562,17 +546,6 @@ enum val_prettyprint
# endif
#endif
/* If we picked up a copy of CHAR_BIT from a configuration file
(which may get it by including <limits.h>) then use it to set
the number of bits in a host char. If not, use the same size
as the target. */
#if defined (CHAR_BIT)
#define HOST_CHAR_BIT CHAR_BIT
#else
#define HOST_CHAR_BIT TARGET_CHAR_BIT
#endif
/* Assorted functions we can declare, now that const and volatile are
defined. */
@ -719,7 +692,7 @@ psignal PARAMS ((unsigned, const char *));
#endif
extern int
fclose PARAMS ((FILE *stream)); /* 4.9.5.1 */
fclose PARAMS ((GDB_FILE *stream)); /* 4.9.5.1 */
extern void
perror PARAMS ((const char *)); /* 4.9.10.4 */
@ -809,6 +782,73 @@ strerror PARAMS ((int)); /* 4.11.6.2 */
#include "tm.h"
/* Number of bits in a char or unsigned char for the target machine.
Just like CHAR_BIT in <limits.h> but describes the target machine. */
#if !defined (TARGET_CHAR_BIT)
#define TARGET_CHAR_BIT 8
#endif
/* Number of bits in a short or unsigned short for the target machine. */
#if !defined (TARGET_SHORT_BIT)
#define TARGET_SHORT_BIT (2 * TARGET_CHAR_BIT)
#endif
/* Number of bits in an int or unsigned int for the target machine. */
#if !defined (TARGET_INT_BIT)
#define TARGET_INT_BIT (4 * TARGET_CHAR_BIT)
#endif
/* Number of bits in a long or unsigned long for the target machine. */
#if !defined (TARGET_LONG_BIT)
#define TARGET_LONG_BIT (4 * TARGET_CHAR_BIT)
#endif
/* Number of bits in a long long or unsigned long long for the target machine. */
#if !defined (TARGET_LONG_LONG_BIT)
#define TARGET_LONG_LONG_BIT (2 * TARGET_LONG_BIT)
#endif
/* Number of bits in a float for the target machine. */
#if !defined (TARGET_FLOAT_BIT)
#define TARGET_FLOAT_BIT (4 * TARGET_CHAR_BIT)
#endif
/* Number of bits in a double for the target machine. */
#if !defined (TARGET_DOUBLE_BIT)
#define TARGET_DOUBLE_BIT (8 * TARGET_CHAR_BIT)
#endif
/* Number of bits in a long double for the target machine. */
#if !defined (TARGET_LONG_DOUBLE_BIT)
#define TARGET_LONG_DOUBLE_BIT (2 * TARGET_DOUBLE_BIT)
#endif
/* Number of bits in a "complex" for the target machine. */
#if !defined (TARGET_COMPLEX_BIT)
#define TARGET_COMPLEX_BIT (2 * TARGET_FLOAT_BIT)
#endif
/* Number of bits in a "double complex" for the target machine. */
#if !defined (TARGET_DOUBLE_COMPLEX_BIT)
#define TARGET_DOUBLE_COMPLEX_BIT (2 * TARGET_DOUBLE_BIT)
#endif
/* Number of bits in a pointer for the target machine */
#if !defined (TARGET_PTR_BIT)
#define TARGET_PTR_BIT TARGET_INT_BIT
#endif
/* If we picked up a copy of CHAR_BIT from a configuration file
(which may get it by including <limits.h>) then use it to set
the number of bits in a host char. If not, use the same size
as the target. */
#if defined (CHAR_BIT)
#define HOST_CHAR_BIT CHAR_BIT
#else
#define HOST_CHAR_BIT TARGET_CHAR_BIT
#endif
/* The bit byte-order has to do just with numbering of bits in
debugging symbols and such. Conceptually, it's quite separate
from byte/word byte order. */
@ -823,27 +863,6 @@ strerror PARAMS ((int)); /* 4.11.6.2 */
#endif /* Little endian. */
#endif /* BITS_BIG_ENDIAN not defined. */
/* Swap LEN bytes at BUFFER between target and host byte-order. This is
the wrong way to do byte-swapping because it assumes that you have a way
to have a host variable of exactly the right size.
extract_* are the right way. */
#if TARGET_BYTE_ORDER == HOST_BYTE_ORDER
#define SWAP_TARGET_AND_HOST(buffer,len)
#else /* Target and host byte order differ. */
#define SWAP_TARGET_AND_HOST(buffer,len) \
{ \
char tmp; \
char *p = (char *)(buffer); \
char *q = ((char *)(buffer)) + len - 1; \
for (; p < q; p++, q--) \
{ \
tmp = *q; \
*q = *p; \
*p = tmp; \
} \
}
#endif /* Target and host byte order differ. */
/* In findvar.c. */
LONGEST extract_signed_integer PARAMS ((void *, int));
unsigned LONGEST extract_unsigned_integer PARAMS ((void *, int));
@ -852,19 +871,21 @@ CORE_ADDR extract_address PARAMS ((void *, int));
void store_signed_integer PARAMS ((void *, int, LONGEST));
void store_unsigned_integer PARAMS ((void *, int, unsigned LONGEST));
void store_address PARAMS ((void *, int, CORE_ADDR));
double extract_floating PARAMS ((void *, int));
void store_floating PARAMS ((void *, int, double));
/* On some machines there are bits in addresses which are not really
part of the address, but are used by the kernel, the hardware, etc.
for special purposes. ADDR_BITS_REMOVE takes out any such bits
so we get a "real" address such as one would find in a symbol
table. ADDR_BITS_SET sets those bits the way the system wants
them. This is used only for addresses of instructions, and even then
table. This is used only for addresses of instructions, and even then
I'm not sure it's used in all contexts. It exists to deal with there
being a few stray bits in the PC which would mislead us, not as some sort
of generic thing to handle alignment or segmentation. */
of generic thing to handle alignment or segmentation (it's possible it
should be in TARGET_READ_PC instead). */
#if !defined (ADDR_BITS_REMOVE)
#define ADDR_BITS_REMOVE(addr) (addr)
#define ADDR_BITS_SET(addr) (addr)
#endif /* No ADDR_BITS_REMOVE. */
/* From valops.c */