summaryrefslogtreecommitdiff
path: root/ecos
diff options
context:
space:
mode:
authorsave2007-10-03 17:36:06 +0000
committersave2007-10-03 17:36:06 +0000
commit0210f4eb65c0c8987fa72ab21b1c05386d3b8eae (patch)
treeb831872b75a44866bd4518a53a4dbcbbbe22fbb6 /ecos
parente7dc3b600170dc91ade4eb0b525723fa813bbc32 (diff)
Now with cyg_hal_sys_atexit_handler you can added your own exit procedure in the HAL_PLATFORM_EXIT macro
git-svn-id: svn+ssh://pessac/svn/cesar/trunk@766 017c9cb6-072f-447c-8318-d5b54f68fe89
Diffstat (limited to 'ecos')
-rw-r--r--ecos/packages/hal/maximus/arch/current/include/hal_intr.h8
-rw-r--r--ecos/packages/hal/maximus/arch/current/include/hal_syscall.h2
-rw-r--r--ecos/packages/hal/maximus/arch/current/src/maximus_syscalls.c19
-rw-r--r--ecos/packages/hal/synth/arch/current/include/hal_intr.h3
-rw-r--r--ecos/packages/hal/synth/arch/current/include/hal_io.h2
-rw-r--r--ecos/packages/hal/synth/arch/current/src/synth_syscalls.c18
6 files changed, 50 insertions, 2 deletions
diff --git a/ecos/packages/hal/maximus/arch/current/include/hal_intr.h b/ecos/packages/hal/maximus/arch/current/include/hal_intr.h
index 4f12f5ae92..246ba2bede 100644
--- a/ecos/packages/hal/maximus/arch/current/include/hal_intr.h
+++ b/ecos/packages/hal/maximus/arch/current/include/hal_intr.h
@@ -230,6 +230,14 @@ externC void cyg_hal_sys_exit(int);
cyg_hal_sys_exit(0); \
CYG_MACRO_END
+extern void (*maximus_atexit_handler)(void);
+#define HAL_PLATFORM_EXIT(x) \
+ CYG_MACRO_START \
+ if(maximus_atexit_handler !=NULL) \
+ (*maximus_atexit_handler)(); \
+ cyg_hal_sys_exit(x); \
+ CYG_MACRO_END
+
// ----------------------------------------------------------------------------
// Test case exit support.
#define CYGHWR_TEST_PROGRAM_EXIT() \
diff --git a/ecos/packages/hal/maximus/arch/current/include/hal_syscall.h b/ecos/packages/hal/maximus/arch/current/include/hal_syscall.h
index 5991655128..29cb8fa9c6 100644
--- a/ecos/packages/hal/maximus/arch/current/include/hal_syscall.h
+++ b/ecos/packages/hal/maximus/arch/current/include/hal_syscall.h
@@ -397,6 +397,8 @@ externC int cyg_hal_sys_lstat(const char* name, struct cyg_hal_sys_stat *buf);
externC int cyg_hal_sys_fstat(int fd, struct cyg_hal_sys_stat *buf);
externC int cyg_hal_sys_mkdir(const char* path, int mode);
+externC int cyg_hal_sys_atexit_handler(void (*fct_atexit)(void));
+
// Access to environmental data
extern int cyg_hal_sys_argc;
extern const char** cyg_hal_sys_argv;
diff --git a/ecos/packages/hal/maximus/arch/current/src/maximus_syscalls.c b/ecos/packages/hal/maximus/arch/current/src/maximus_syscalls.c
index 78794c4af9..e249c07ba1 100644
--- a/ecos/packages/hal/maximus/arch/current/src/maximus_syscalls.c
+++ b/ecos/packages/hal/maximus/arch/current/src/maximus_syscalls.c
@@ -18,7 +18,7 @@
//=============================================================================
#include <cyg/infra/cyg_type.h>
-#include <cyg/hal/hal_diag.h>
+#include <cyg/infra/diag.h>
#include <cyg/hal/hal_io.h>
void * cyg_hal_sys_shmat(int shmid, const void* shmaddr, int shmflg)
@@ -61,3 +61,20 @@ cyg_hal_sys_mmap(void *addr, unsigned long length, unsigned long prot,
return (cyg_hal_sys_mmapx(&args));
}
+
+
+void (*maximus_atexit_handler)(void) = (void (*)(void)) 0;
+
+int
+cyg_hal_sys_atexit_handler(void (*fct_atexit)(void))
+{
+ if(maximus_atexit_handler == NULL) {
+ maximus_atexit_handler = fct_atexit;
+ return 0;
+ }
+ else {
+ diag_write_string("ERROR an atexit handler already exist\n");
+ return -1;
+ }
+}
+
diff --git a/ecos/packages/hal/synth/arch/current/include/hal_intr.h b/ecos/packages/hal/synth/arch/current/include/hal_intr.h
index 2365391100..5da5bb7b98 100644
--- a/ecos/packages/hal/synth/arch/current/include/hal_intr.h
+++ b/ecos/packages/hal/synth/arch/current/include/hal_intr.h
@@ -252,8 +252,11 @@ externC void cyg_hal_sys_exit(int);
cyg_hal_sys_exit(0); \
CYG_MACRO_END
+extern void (*synth_atexit_handler)(void);
#define HAL_PLATFORM_EXIT(x) \
CYG_MACRO_START \
+ if(synth_atexit_handler !=NULL){ \
+ (*synth_atexit_handler)(); } \
cyg_hal_sys_exit(x); \
CYG_MACRO_END
diff --git a/ecos/packages/hal/synth/arch/current/include/hal_io.h b/ecos/packages/hal/synth/arch/current/include/hal_io.h
index c8fd8a2c03..a8d03fe716 100644
--- a/ecos/packages/hal/synth/arch/current/include/hal_io.h
+++ b/ecos/packages/hal/synth/arch/current/include/hal_io.h
@@ -541,6 +541,8 @@ externC int cyg_hal_sys_lstat(const char* name, struct cyg_hal_sys_stat *buf);
externC int cyg_hal_sys_fstat(int fd, struct cyg_hal_sys_stat *buf);
externC int cyg_hal_sys_mkdir(const char* path, int mode);
+externC int cyg_hal_sys_atexit_handler(void (*fct_atexit)(void));
+
// Access to environmental data
extern int cyg_hal_sys_argc;
extern const char** cyg_hal_sys_argv;
diff --git a/ecos/packages/hal/synth/arch/current/src/synth_syscalls.c b/ecos/packages/hal/synth/arch/current/src/synth_syscalls.c
index 830ec089f9..73d8a55925 100644
--- a/ecos/packages/hal/synth/arch/current/src/synth_syscalls.c
+++ b/ecos/packages/hal/synth/arch/current/src/synth_syscalls.c
@@ -49,7 +49,7 @@
//=============================================================================
#include <cyg/infra/cyg_type.h>
-#include <cyg/hal/hal_diag.h>
+#include <cyg/infra/diag.h>
#include <cyg/hal/hal_io.h>
void * cyg_hal_sys_shmat(int shmid, const void* shmaddr, int shmflg)
@@ -92,3 +92,19 @@ cyg_hal_sys_mmap(void *addr, unsigned long length, unsigned long prot,
return (cyg_hal_sys_mmapx(&args));
}
+
+void (*synth_atexit_handler)(void) = (void (*)(void)) 0;
+
+int
+cyg_hal_sys_atexit_handler(void (*fct_atexit)(void))
+{
+ if(synth_atexit_handler == NULL) {
+ synth_atexit_handler = fct_atexit;
+ return 0;
+ }
+ else {
+ diag_write_string("ERROR an atexit handler already exist\n");
+ return -1;
+ }
+}
+