summaryrefslogtreecommitdiff
path: root/gdb/config/i386/tm-linux.h
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/config/i386/tm-linux.h')
-rw-r--r--gdb/config/i386/tm-linux.h152
1 files changed, 16 insertions, 136 deletions
diff --git a/gdb/config/i386/tm-linux.h b/gdb/config/i386/tm-linux.h
index 9f5ac78436f..5faa6ff6264 100644
--- a/gdb/config/i386/tm-linux.h
+++ b/gdb/config/i386/tm-linux.h
@@ -22,6 +22,7 @@
#define TM_LINUX_H
#define I386_GNULINUX_TARGET
+#define HAVE_I387_REGS
#include "i386/tm-i386.h"
@@ -38,100 +39,18 @@
#include "tm-sysv4.h"
-/* copy of tm-cygwin32.h */
-#undef REGISTER_RAW_SIZE
-#undef REGISTER_VIRTUAL_SIZE
-#undef REGISTER_VIRTUAL_TYPE
-#undef REGISTER_NAMES
-#undef REGISTER_BYTES
-#undef REGISTER_BYTE
-#undef MAX_REGISTER_VIRTUAL_SIZE
-#undef NUM_REGS
-#undef NUM_FREGS
-
-/* Number of machine registers */
-
-#define NUM_REGS 31
-#define NUM_FREGS 15
-
-/* Initializer for an array of names of registers.
- There should be NUM_REGS strings in this initializer. */
-
-/* the order of the first 8 registers must match the compiler's
- * numbering scheme (which is the same as the 386 scheme)
- * also, this table must match regmap in i386-pinsn.c.
- */
-
-#define REGISTER_NAMES { "eax", "ecx", "edx", "ebx", \
- "esp", "ebp", "esi", "edi", \
- "eip", "eflags","cs", "ss", \
- "ds", "es", "fs", "gs", \
- "cwd", "swd", "twd", "fip", \
- "fcs", "fopo", "fos", \
- "st", "st1", "st2", "st3", \
- "st4", "st5", "st6", "st7",}
-
#define LOW_RETURN_REGNUM 0 /* holds low four bytes of result */
#define HIGH_RETURN_REGNUM 2 /* holds high four bytes of result */
-#define FPSTART_REGNUM 16 /* start of FPU registers */
-#define FPCONTROL_REGNUM 16 /* FPU control register */
-#define FPSTATUS_REGNUM 17 /* FPU status register */
-#define FPTAG_REGNUM 18 /* FPU tag register */
-#define FPDATA_REGNUM 23 /* actual floating-point values */
-#define FPEND_REGNUM (FPSTART_REGNUM + 14) /* last FPU register */
-
-#define FPENV_BYTES (7 * 4)
-
-#define FPREG_RAW_SIZE (10)
-
-/* Total amount of space needed to store our copies of the machine's
- FPU state. */
-
-#define FPREG_BYTES (FPENV_BYTES + 8 * FPREG_RAW_SIZE)
-
-/* Total amount of space needed to store our copies of the machine's
- register state, the array `registers'. */
-
-#define REGISTER_BYTES (FPSTART_REGNUM * 4 + FPREG_BYTES)
-
-/* Index within `registers' of the first byte of the space for
- register N. */
-
-#define REGISTER_BYTE(N) (((N) < FPDATA_REGNUM) ? \
- (N) * 4 : \
- (((N) - FPDATA_REGNUM) * FPREG_RAW_SIZE) \
- + (FPDATA_REGNUM * 4))
-
-/* Number of bytes of storage in the actual machine representation
- for register N. */
-
-#define REGISTER_RAW_SIZE(N) (((N) < FPDATA_REGNUM) ? 4 : FPREG_RAW_SIZE)
-
-/* Number of bytes of storage in the program's representation
- for register N. */
-
-#define REGISTER_VIRTUAL_SIZE(N) (((N) < FPDATA_REGNUM) ? 4 : FPREG_RAW_SIZE)
-
-/* Largest value REGISTER_RAW_SIZE can have. */
-
-#undef MAX_REGISTER_RAW_SIZE
-#define MAX_REGISTER_RAW_SIZE FPREG_RAW_SIZE
-
-/* Largest value REGISTER_VIRTUAL_SIZE can have. */
-
-#define MAX_REGISTER_VIRTUAL_SIZE FPREG_RAW_SIZE
+/* This should probably move to tm-i386.h. */
+#define TARGET_LONG_DOUBLE_BIT 80
#if defined(HAVE_LONG_DOUBLE) && defined(HOST_I386)
/* The host and target are i386 machines and the compiler supports
long doubles. Long doubles on the host therefore have the same
layout as a 387 FPU stack register. */
#define LD_I387
-#endif
-#define TARGET_LONG_DOUBLE_BIT 80
-
-#ifdef LD_I387
extern int i387_extract_floating (PTR addr, int len, long double *dretptr);
extern int i387_store_floating (PTR addr, int len, long double val);
@@ -153,67 +72,29 @@ extern int i387_store_floating (PTR addr, int len, long double val);
&& (((high & 0x7fffffff) | low) != 0); \
} \
while (0)
-#endif
-
-#ifndef LD_I387
-/* Nonzero if register N requires conversion
- from raw format to virtual format. */
-#define REGISTER_CONVERTIBLE(N) \
- ((N < FPDATA_REGNUM) ? 0 : 1)
-#endif
-
-#ifdef LD_I387
-#define REGISTER_CONVERT_TO_VIRTUAL(REGNUM,TYPE,FROM,TO) \
-{ \
- long double val = *((long double *)FROM); \
- store_floating ((TO), TYPE_LENGTH (TYPE), val); \
-}
-#else
-/* Convert data from raw format for register REGNUM in buffer FROM
- to virtual format with type TYPE in buffer TO. */
-extern void
-i387_to_double PARAMS ((char *, char *));
-
-#define REGISTER_CONVERT_TO_VIRTUAL(REGNUM,TYPE,FROM,TO) \
-{ \
- double val; \
- i387_to_double ((FROM), (char *)&val); \
- store_floating ((TO), TYPE_LENGTH (TYPE), val); \
-}
-#endif
-#ifdef LD_I387
-#define REGISTER_CONVERT_TO_RAW(TYPE,REGNUM,FROM,TO) \
-{ \
- long double val = extract_floating ((FROM), TYPE_LENGTH (TYPE)); \
- *((long double *)TO) = val; \
+#undef REGISTER_CONVERT_TO_VIRTUAL
+#define REGISTER_CONVERT_TO_VIRTUAL(REGNUM,TYPE,FROM,TO) \
+{ \
+ long double val = *((long double *)FROM); \
+ store_floating ((TO), TYPE_LENGTH (TYPE), val); \
}
-#else
-extern void
-double_to_i387 PARAMS ((char *, char *));
-#define REGISTER_CONVERT_TO_RAW(TYPE,REGNUM,FROM,TO) \
-{ \
- double val = extract_floating ((FROM), TYPE_LENGTH (TYPE)); \
- double_to_i387((char *)&val, (TO)); \
+#undef REGISTER_CONVERT_TO_RAW
+#define REGISTER_CONVERT_TO_RAW(TYPE,REGNUM,FROM,TO) \
+{ \
+ long double val = extract_floating ((FROM), TYPE_LENGTH (TYPE)); \
+ *((long double *)TO) = val; \
}
-#endif
/* Return the GDB type object for the "standard" data type
of data in register N. */
+#undef REGISTER_VIRTUAL_TYPE
+#define REGISTER_VIRTUAL_TYPE(N) \
+ (IS_FP_REGNUM (N) ? builtin_type_long_double : builtin_type_int)
-#ifdef LD_I387
-#define REGISTER_VIRTUAL_TYPE(N) \
- ((N < FPDATA_REGNUM) ? builtin_type_int : \
- builtin_type_long_double)
-#else
-#define REGISTER_VIRTUAL_TYPE(N) \
- ((N < FPDATA_REGNUM) ? builtin_type_int : \
- builtin_type_double)
#endif
-/* end of copy */
-
/* The following works around a problem with /usr/include/sys/procfs.h */
#define sys_quotactl 1
@@ -304,4 +185,3 @@ extern CORE_ADDR i386_linux_skip_solib_resolver (CORE_ADDR pc);
#define SOFUN_ADDRESS_MAYBE_MISSING
#endif /* #ifndef TM_LINUX_H */
-