Why does GCC emit multiple calls to __gcov_init, via mulitple (two) entries in the ctors table? For example "int foo () { return 0; }" compiled with "gcc -S -fprofile-generate" produces the following assembly file, where the ".ctors" section conrtains two entries.
.file "x.c" .text .globl foo .type foo, @function foo: pushl %ebp movl %esp, %ebp movl .LPBX1, %eax movl .LPBX1+4, %edx addl $1, %eax adcl $0, %edx movl %eax, .LPBX1 movl %edx, .LPBX1+4 movl $0, %eax popl %ebp ret .size foo, .-foo .local .LPBX1 .comm .LPBX1,8,8 .section .rodata .LC0: .string "/home/velco/x.gcda" .data .align 4 .LC1: .long 3 .long 970900823 .long 1 .align 32 .type .LPBX0, @object .size .LPBX0, 52 .LPBX0: .long 875573861 .long 0 .long -786236445 .long .LC0 .long 1 .long .LC1 .long 1 .long 1 .long .LPBX1 .long __gcov_merge_add .zero 12 .text .type _GLOBAL__I_0_foo, @function _GLOBAL__I_0_foo: pushl %ebp movl %esp, %ebp subl $8, %esp movl $.LPBX0, (%esp) call __gcov_init leave ret .size _GLOBAL__I_0_foo, .-_GLOBAL__I_0_foo .section .ctors,"aw",@progbits .align 4 .long _GLOBAL__I_0_foo .align 4 .long _GLOBAL__I_0_foo .ident "GCC: (GNU) 4.2.0 20060425 (experimental)" .section .note.GNU-stack,"",@progbits