/* The following two typedefs are defined in a .h file which is not
in the standard include path (/sys/include/family/x86/ucontext.h),
- so we just duplicate them here. */
+ so we just duplicate them here.
+
+ Unfortunately for us, the definition of this structure differs between
+ LynxOS 5.x and LynxOS 178. Rather than duplicate the code, we use
+ different definitions depending on the target. */
+
+#ifdef VMOS_DEV
+#define LYNXOS_178
+#endif
/* General register context */
typedef struct usr_econtext {
uint32_t uec_gs;
} usr_econtext_t;
+#if defined(LYNXOS_178)
+
+/* Floating point register context */
+typedef struct usr_fcontext {
+ uint32_t ufc_control;
+ uint32_t ufc_status;
+ uint32_t ufc_tag;
+ uint8_t *ufc_inst_off;
+ uint32_t ufc_inst_sel;
+ uint8_t *ufc_data_off;
+ uint32_t ufc_data_sel;
+ struct ufp387_real {
+ uint16_t umant4;
+ uint16_t umant3;
+ uint16_t umant2;
+ uint16_t umant1;
+ uint16_t us_and_e;
+ } ufc_reg[8];
+} usr_fcontext_t;
+
+#else /* This is LynxOS 5.x. */
+
/* Floating point and SIMD register context */
typedef struct usr_fcontext {
uint16_t ufc_control;
char ureserved[16][14];
} usr_fcontext_t;
+#endif
+
/* The index of various registers inside the regcache. */
enum lynx_i386_gdb_regnum
buf + offsetof (usr_fcontext_t, ufc_data_sel));
collect_register (regcache, I386_FOOFF_REGNUM,
buf + offsetof (usr_fcontext_t, ufc_data_off));
+#if !defined(LYNXOS_178)
collect_16bit_register (regcache, I386_FOP_REGNUM,
buf + offsetof (usr_fcontext_t, ufc_opcode));
+ i * sizeof (struct uxmm_register));
collect_register (regcache, I386_MXCSR_REGNUM,
buf + offsetof (usr_fcontext_t, usse_mxcsr));
+#endif
}
/* This is the supply counterpart for collect_16bit_register:
buf + offsetof (usr_fcontext_t, ufc_data_sel));
supply_register (regcache, I386_FOOFF_REGNUM,
buf + offsetof (usr_fcontext_t, ufc_data_off));
+#if !defined(LYNXOS_178)
supply_16bit_register (regcache, I386_FOP_REGNUM,
buf + offsetof (usr_fcontext_t, ufc_opcode));
+ i * sizeof (struct uxmm_register));
supply_register (regcache, I386_MXCSR_REGNUM,
buf + offsetof (usr_fcontext_t, usse_mxcsr));
+#endif
}
/* Implements the lynx_target_ops.arch_setup routine. */