stubdom: support constructors and destructors

Signed-off-by: Samuel Thibault <samuel.thibault@eu.citrix.com>
This commit is contained in:
Keir Fraser committed 2008-05-22 15:09:08 +01:00
1 parent 178dcab520
commit cf6e75bd08
4 files changed
+59 -2

No files matched your search

+17
View File
@@ -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) }
+17 -1
View File
@@ -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 */
+17 -1
View File
@@ -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 */
+8
View File
@@ -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);
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.