From a90a90ffcf0f90b2a4b6c24dc5a60e72652549f1 Mon Sep 17 00:00:00 2001 From: liamstask Date: Sat, 20 Feb 2010 19:55:00 +0000 Subject: adding simulator support for OS X git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@1645 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/hal/platforms/Linux/hal_lld.c | 4 ++++ os/ports/GCC/SIMIA32/chcore.c | 11 +++++++---- os/ports/GCC/SIMIA32/chcore.h | 5 +++-- 3 files changed, 14 insertions(+), 6 deletions(-) (limited to 'os') diff --git a/os/hal/platforms/Linux/hal_lld.c b/os/hal/platforms/Linux/hal_lld.c index e6679d07a..e143dd5fb 100644 --- a/os/hal/platforms/Linux/hal_lld.c +++ b/os/hal/platforms/Linux/hal_lld.c @@ -59,7 +59,11 @@ static struct timeval tick = {0, 1000000 / CH_FREQUENCY}; */ void hal_lld_init(void) { +#if defined(__APPLE__) + puts("ChibiOS/RT simulator (OS X)\n"); +#else puts("ChibiOS/RT simulator (Linux)\n"); +#endif gettimeofday(&nextcnt, NULL); timeradd(&nextcnt, &tick, &nextcnt); } diff --git a/os/ports/GCC/SIMIA32/chcore.c b/os/ports/GCC/SIMIA32/chcore.c index 2cacd7b65..3b382b957 100644 --- a/os/ports/GCC/SIMIA32/chcore.c +++ b/os/ports/GCC/SIMIA32/chcore.c @@ -30,7 +30,7 @@ /** * Performs a context switch between two threads. * @param otp the thread to be switched out - * @param ntp the thread to be switched in + * @param ntp the thread to be switched in */ __attribute__((used)) static void __dummy(Thread *otp, Thread *ntp) { @@ -38,6 +38,9 @@ static void __dummy(Thread *otp, Thread *ntp) { #if defined(WIN32) asm volatile (".globl @port_switch@8 \n\t" \ "@port_switch@8:"); +#elif defined(__APPLE__) + asm volatile (".globl _port_switch \n\t" \ + "_port_switch:"); #else asm volatile (".globl port_switch \n\t" \ "port_switch:"); @@ -56,7 +59,7 @@ static void __dummy(Thread *otp, Thread *ntp) { } /** - * Halts the system. In this implementation it just exits the simulation. + * Halts the system. In this implementation it just exits the simulation. */ __attribute__((fastcall)) void port_halt(void) { @@ -65,11 +68,11 @@ void port_halt(void) { } /** - * Threads return point, it just invokes @p chThdExit(). + * Threads return point, it just invokes @p chThdExit(). */ void threadexit(void) { -#if defined(WIN32) +#if defined(WIN32) || defined (__APPLE__) asm volatile ("push %eax \n\t" \ "call _chThdExit"); #else diff --git a/os/ports/GCC/SIMIA32/chcore.h b/os/ports/GCC/SIMIA32/chcore.h index a65eb9640..dc73de91f 100644 --- a/os/ports/GCC/SIMIA32/chcore.h +++ b/os/ports/GCC/SIMIA32/chcore.h @@ -48,7 +48,7 @@ typedef struct { } stkalign_t __attribute__((aligned(16))); /** - * Generic x86 register. + * Generic x86 register. */ typedef void *regx86; @@ -92,6 +92,7 @@ struct context { uint8_t *esp = (uint8_t *)workspace + wsize; \ APUSH(esp, 0); \ APUSH(esp, 0); \ + APUSH(esp, 0); \ APUSH(esp, arg); \ APUSH(esp, threadexit); \ esp -= sizeof(struct intctx); \ @@ -142,7 +143,7 @@ struct context { /** * IRQ prologue code, inserted at the start of all IRQ handlers enabled to - * invoke system APIs. + * invoke system APIs. */ #define PORT_IRQ_PROLOGUE() -- cgit v1.2.3