diff options
Diffstat (limited to 'gdb/config/i386/tm-linux.h')
-rw-r--r-- | gdb/config/i386/tm-linux.h | 152 |
1 files changed, 16 insertions, 136 deletions
diff --git a/gdb/config/i386/tm-linux.h b/gdb/config/i386/tm-linux.h index 9f5ac78..5faa6ff 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 */ - |