gcov: Call constructors during initialization

This allow modules to set initializer functions.
This is used by Gcc instrumentation code for profiling arcs and test
coverage.
This commit is contained in:
Frediano Ziglio authored and Keir committed 2013-02-21 16:15:33 +00:00
1 parent 82639998a5
commit 68ca0bc4ba
6 files changed
+34

No files matched your search

+2
View File
@@ -442,6 +442,8 @@ void __init start_xen(unsigned long boot_phys_offset,
scrub_heap_pages();
*/
init_constructors();
console_endboot();
/* Hide UART from DOM0 if we're using it */
+7
View File
@@ -84,6 +84,13 @@ SECTIONS
*(.init.data)
*(.init.data.rel)
*(.init.data.rel.*)
. = ALIGN(4);
__CTOR_LIST__ = .;
LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)
*(.ctors)
LONG(0)
__CTOR_END__ = .;
} :text
. = ALIGN(32);
.init.setup : {
+2
View File
@@ -1378,6 +1378,8 @@ void __init __start_xen(unsigned long mbi_p)
init_trace_bufs();
init_constructors();
console_endboot();
/* Hide UART from DOM0 if we're using it */
+7
View File
@@ -108,6 +108,13 @@ SECTIONS
__trampoline_seg_start = .;
*(.trampoline_seg)
__trampoline_seg_stop = .;
. = ALIGN(8);
__CTOR_LIST__ = .;
QUAD((__CTOR_END__ - __CTOR_LIST__) / 8 - 2)
*(.ctors)
QUAD(0)
__CTOR_END__ = .;
} :text
. = ALIGN(32);
.init.setup : {
+14
View File
@@ -2,6 +2,7 @@
#include <xen/ctype.h>
#include <xen/lib.h>
#include <xen/types.h>
#include <xen/init.h>
#include <asm/byteorder.h>
/* for ctype.h */
@@ -478,6 +479,19 @@ unsigned long long parse_size_and_unit(const char *s, const char **ps)
return ret;
}
extern const struct
{
unsigned long count;
void (*funcs[1])(void);
} __CTOR_LIST__;
void __init init_constructors(void)
{
unsigned long n;
for ( n = 0; n < __CTOR_LIST__.count; ++n )
__CTOR_LIST__.funcs[n]();
}
/*
* Local variables:
* mode: C
+2
View File
@@ -127,4 +127,6 @@ extern void add_taint(unsigned);
struct cpu_user_regs;
void dump_execstate(struct cpu_user_regs *);
void init_constructors(void);
#endif /* __LIB_H__ */
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.