aboutsummaryrefslogtreecommitdiffstats
path: root/extras/mini-os/main.c
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2008-05-22 15:09:08 +0100
committerKeir Fraser <keir.fraser@citrix.com>2008-05-22 15:09:08 +0100
commitcf6e75bd080e50f674954e7dbfd4d4e0c33416ec (patch)
tree03ac4a9d20d25a0806335d8b4c96352d4ff79e78 /extras/mini-os/main.c
parent178dcab5201309e3a8f15ecc543aeb80cea0ea96 (diff)
downloadxen-cf6e75bd080e50f674954e7dbfd4d4e0c33416ec.tar.gz
xen-cf6e75bd080e50f674954e7dbfd4d4e0c33416ec.tar.bz2
xen-cf6e75bd080e50f674954e7dbfd4d4e0c33416ec.zip
stubdom: support constructors and destructors
Signed-off-by: Samuel Thibault <samuel.thibault@eu.citrix.com>
Diffstat (limited to 'extras/mini-os/main.c')
-rw-r--r--extras/mini-os/main.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/extras/mini-os/main.c b/extras/mini-os/main.c
index 6e67b01138..1851469c3e 100644
--- a/extras/mini-os/main.c
+++ b/extras/mini-os/main.c
@@ -19,6 +19,8 @@
extern int main(int argc, char *argv[], char *envp[]);
extern void __libc_init_array(void);
extern void __libc_fini_array(void);
+extern unsigned long __CTOR_LIST__[];
+extern unsigned long __DTOR_LIST__[];
struct thread *main_thread;
@@ -147,6 +149,8 @@ static void call_main(void *p)
__libc_init_array();
environ = envp;
+ for (i = 1; i <= __CTOR_LIST__[0]; i++)
+ ((void((*)(void)))__CTOR_LIST__[i]) ();
tzset();
exit(main(argc, argv, envp));
@@ -154,6 +158,10 @@ static void call_main(void *p)
void _exit(int ret)
{
+ int i;
+
+ for (i = 1; i <= __DTOR_LIST__[0]; i++)
+ ((void((*)(void)))__DTOR_LIST__[i]) ();
close_all_files();
__libc_fini_array();
printk("main returned %d\n", ret);