aboutsummaryrefslogtreecommitdiffstats
path: root/os/ports/GCC/SIMIA32
diff options
context:
space:
mode:
authorliamstask <liamstask@35acf78f-673a-0410-8e92-d51de3d6d3f4>2010-02-20 19:55:00 +0000
committerliamstask <liamstask@35acf78f-673a-0410-8e92-d51de3d6d3f4>2010-02-20 19:55:00 +0000
commita90a90ffcf0f90b2a4b6c24dc5a60e72652549f1 (patch)
treeced28926bc3a62add87e90d087156898ebf02c54 /os/ports/GCC/SIMIA32
parent0fc33d47532b1b7727d576b3814498c8907b3c31 (diff)
downloadChibiOS-a90a90ffcf0f90b2a4b6c24dc5a60e72652549f1.tar.gz
ChibiOS-a90a90ffcf0f90b2a4b6c24dc5a60e72652549f1.tar.bz2
ChibiOS-a90a90ffcf0f90b2a4b6c24dc5a60e72652549f1.zip
adding simulator support for OS X
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@1645 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/ports/GCC/SIMIA32')
-rw-r--r--os/ports/GCC/SIMIA32/chcore.c11
-rw-r--r--os/ports/GCC/SIMIA32/chcore.h5
2 files changed, 10 insertions, 6 deletions
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()