mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
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:
1 parent
82639998a5
commit
68ca0bc4ba
6 files changed
+34
No files matched your search
@@ -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 */
|
||||
|
||||
@@ -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 : {
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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 : {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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__ */
|
||||