mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2026-09-21 15:39:19 +08:00
merged Linux UNIX simulator support (C)
This commit is contained in:
@@ -73,7 +73,6 @@ void _CPU_Initialize(
|
||||
*/
|
||||
|
||||
#if __GO32__
|
||||
#include <cpu.h>
|
||||
#include <go32.h>
|
||||
#include <dpmi.h>
|
||||
#endif /* __GO32__ */
|
||||
@@ -89,7 +88,7 @@ void _CPU_ISR_install_raw_handler(
|
||||
|
||||
*old_handler = 0; /* XXX not supported */
|
||||
|
||||
handler_info.pm_offset = new_handler;
|
||||
handler_info.pm_offset = (u_long) new_handler;
|
||||
handler_info.pm_selector = _go32_my_cs();
|
||||
|
||||
/* install the IDT entry */
|
||||
|
||||
@@ -391,6 +391,28 @@ void _CPU_Context_Initialize(
|
||||
*(addr + RP_OFF) = jmp_addr + ADDR_ADJ_OFFSET;
|
||||
*(addr + SP_OFF) = (unsigned32)(_stack_high - CPU_FRAME_SIZE);
|
||||
*(addr + FP_OFF) = (unsigned32)(_stack_high);
|
||||
|
||||
#elif defined(i386)
|
||||
|
||||
/*
|
||||
* This information was gathered by disassembling setjmp().
|
||||
*/
|
||||
|
||||
stack_ptr = _stack_high - CPU_FRAME_SIZE;
|
||||
*(addr + EBX_OFF) = 0xFEEDFEED;
|
||||
*(addr + ESI_OFF) = 0xDEADDEAD;
|
||||
*(addr + EDI_OFF) = 0xDEAFDEAF;
|
||||
*(addr + EBP_OFF) = stack_ptr;
|
||||
*(addr + ESP_OFF) = stack_ptr;
|
||||
*(addr + RET_OFF) = jmp_addr;
|
||||
|
||||
|
||||
addr = (unsigned32 *) stack_ptr;
|
||||
|
||||
addr[ 0 ] = jmp_addr;
|
||||
addr[ 1 ] = (unsigned32) stack_ptr;
|
||||
addr[ 2 ] = (unsigned32) stack_ptr;
|
||||
|
||||
#else
|
||||
#error "UNKNOWN CPU!!!"
|
||||
#endif
|
||||
|
||||
@@ -264,7 +264,7 @@ extern "C" {
|
||||
|
||||
#if defined(hppa1_1)
|
||||
#define CPU_STACK_GROWS_UP TRUE
|
||||
#elif defined(sparc)
|
||||
#elif defined(sparc) || defined(i386)
|
||||
#define CPU_STACK_GROWS_UP FALSE
|
||||
#else
|
||||
#error "unknown CPU!!"
|
||||
@@ -362,6 +362,27 @@ extern "C" {
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(i386)
|
||||
|
||||
#ifdef RTEMS_NEWLIB
|
||||
#error "Newlib not installed"
|
||||
#endif
|
||||
|
||||
/*
|
||||
* For Linux 1.1
|
||||
*/
|
||||
|
||||
#ifdef RTEMS_UNIXLIB
|
||||
#define EBX_OFF 0
|
||||
#define ESI_OFF 1
|
||||
#define EDI_OFF 2
|
||||
#define EBP_OFF 3
|
||||
#define ESP_OFF 4
|
||||
#define RET_OFF 5
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#if defined(sparc)
|
||||
|
||||
/*
|
||||
@@ -515,6 +536,8 @@ EXTERN void (*_CPU_Thread_dispatch_pointer)();
|
||||
#define CPU_FRAME_SIZE (32 * 4)
|
||||
#elif defined(sparc)
|
||||
#define CPU_FRAME_SIZE (112) /* based on disassembled test code */
|
||||
#elif defined(i386)
|
||||
#define CPU_FRAME_SIZE (24) /* return address, sp, and bp pushed plus fudge */
|
||||
#else
|
||||
#error "Unknown CPU!!!"
|
||||
#endif
|
||||
|
||||
@@ -64,11 +64,15 @@ extern "C" {
|
||||
|
||||
#if defined(hpux)
|
||||
|
||||
#define RTEMS_MODEL_NAME "hpux"
|
||||
#define RTEMS_MODEL_NAME "HP-UX"
|
||||
|
||||
#elif defined(solaris)
|
||||
|
||||
#define RTEMS_MODEL_NAME "solaris"
|
||||
#define RTEMS_MODEL_NAME "Solaris"
|
||||
|
||||
#elif defined(linux)
|
||||
|
||||
#define RTEMS_MODEL_NAME "Linux"
|
||||
|
||||
#else
|
||||
|
||||
|
||||
@@ -73,7 +73,6 @@ void _CPU_Initialize(
|
||||
*/
|
||||
|
||||
#if __GO32__
|
||||
#include <cpu.h>
|
||||
#include <go32.h>
|
||||
#include <dpmi.h>
|
||||
#endif /* __GO32__ */
|
||||
@@ -89,7 +88,7 @@ void _CPU_ISR_install_raw_handler(
|
||||
|
||||
*old_handler = 0; /* XXX not supported */
|
||||
|
||||
handler_info.pm_offset = new_handler;
|
||||
handler_info.pm_offset = (u_long) new_handler;
|
||||
handler_info.pm_selector = _go32_my_cs();
|
||||
|
||||
/* install the IDT entry */
|
||||
|
||||
@@ -391,6 +391,28 @@ void _CPU_Context_Initialize(
|
||||
*(addr + RP_OFF) = jmp_addr + ADDR_ADJ_OFFSET;
|
||||
*(addr + SP_OFF) = (unsigned32)(_stack_high - CPU_FRAME_SIZE);
|
||||
*(addr + FP_OFF) = (unsigned32)(_stack_high);
|
||||
|
||||
#elif defined(i386)
|
||||
|
||||
/*
|
||||
* This information was gathered by disassembling setjmp().
|
||||
*/
|
||||
|
||||
stack_ptr = _stack_high - CPU_FRAME_SIZE;
|
||||
*(addr + EBX_OFF) = 0xFEEDFEED;
|
||||
*(addr + ESI_OFF) = 0xDEADDEAD;
|
||||
*(addr + EDI_OFF) = 0xDEAFDEAF;
|
||||
*(addr + EBP_OFF) = stack_ptr;
|
||||
*(addr + ESP_OFF) = stack_ptr;
|
||||
*(addr + RET_OFF) = jmp_addr;
|
||||
|
||||
|
||||
addr = (unsigned32 *) stack_ptr;
|
||||
|
||||
addr[ 0 ] = jmp_addr;
|
||||
addr[ 1 ] = (unsigned32) stack_ptr;
|
||||
addr[ 2 ] = (unsigned32) stack_ptr;
|
||||
|
||||
#else
|
||||
#error "UNKNOWN CPU!!!"
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user