mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 10:40:03 +01:00
stubdom: support constructors and destructors
Signed-off-by: Samuel Thibault <samuel.thibault@eu.citrix.com>
This commit is contained in:
1 parent
178dcab520
commit
cf6e75bd08
4 files changed
+59
-2
No files matched your search
@@ -52,6 +52,23 @@ SECTIONS
|
||||
.fini_array : { *(.fini_array) }
|
||||
PROVIDE (__fini_array_end = .);
|
||||
|
||||
.ctors : {
|
||||
__CTOR_LIST__ = .;
|
||||
LONG((__CTOR_END__ - __CTOR_LIST__) / 8 - 2)
|
||||
*(SORT_BY_NAME(.ctors))
|
||||
SORT_BY_NAME(CONSTRUCTORS)
|
||||
LONG(0)
|
||||
__CTOR_END__ = .;
|
||||
}
|
||||
|
||||
.dtors : {
|
||||
__DTOR_LIST__ = .;
|
||||
LONG((__DTOR_END__ - __DTOR_LIST__) / 8 - 2)
|
||||
*(SORT_BY_NAME(.dtors))
|
||||
LONG(0)
|
||||
__DTOR_END__ = .;
|
||||
}
|
||||
|
||||
.IA_64.unwind_info : AT(ADDR(.IA_64.unwind_info) - (((5<<(61))+0x100000000) - (1 << 20)))
|
||||
{ *(.IA_64.unwind_info) }
|
||||
|
||||
|
||||
@@ -28,9 +28,25 @@ SECTIONS
|
||||
.fini_array : { *(.fini_array) }
|
||||
PROVIDE (__fini_array_end = .);
|
||||
|
||||
.ctors : {
|
||||
__CTOR_LIST__ = .;
|
||||
LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)
|
||||
*(SORT_BY_NAME(.ctors))
|
||||
SORT_BY_NAME(CONSTRUCTORS)
|
||||
LONG(0)
|
||||
__CTOR_END__ = .;
|
||||
}
|
||||
|
||||
.dtors : {
|
||||
__DTOR_LIST__ = .;
|
||||
LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)
|
||||
*(SORT_BY_NAME(.dtors))
|
||||
LONG(0)
|
||||
__DTOR_END__ = .;
|
||||
}
|
||||
|
||||
.data : { /* Data */
|
||||
*(.data)
|
||||
CONSTRUCTORS
|
||||
}
|
||||
|
||||
_edata = .; /* End of data section */
|
||||
|
||||
@@ -28,9 +28,25 @@ SECTIONS
|
||||
.fini_array : { *(.fini_array) }
|
||||
PROVIDE (__fini_array_end = .);
|
||||
|
||||
.ctors : {
|
||||
__CTOR_LIST__ = .;
|
||||
LONG((__CTOR_END__ - __CTOR_LIST__) / 8 - 2)
|
||||
*(SORT_BY_NAME(.ctors))
|
||||
SORT_BY_NAME(CONSTRUCTORS)
|
||||
LONG(0)
|
||||
__CTOR_END__ = .;
|
||||
}
|
||||
|
||||
.dtors : {
|
||||
__DTOR_LIST__ = .;
|
||||
LONG((__DTOR_END__ - __DTOR_LIST__) / 8 - 2)
|
||||
*(SORT_BY_NAME(.dtors))
|
||||
LONG(0)
|
||||
__DTOR_END__ = .;
|
||||
}
|
||||
|
||||
.data : { /* Data */
|
||||
*(.data)
|
||||
CONSTRUCTORS
|
||||
}
|
||||
|
||||
_edata = .; /* End of data section */
|
||||
|
||||
@@ -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);
|
||||
|
||||