Hi, With Martin we made script for testing the profiling failures. First do
ld --verbose >~/script then apply --- /home/jh/script2 2013-08-31 17:59:11.000000000 +0200 +++ /home/jh/script 2013-08-31 17:39:40.000000000 +0200 @@ -1,12 +1,3 @@ -GNU ld (GNU Binutils for Debian) 2.20.1-system.20100303 - Supported emulations: - elf_x86_64 - elf_i386 - i386linux - elf_l1om -using internal linker script: -================================================== -/* Script for -z combreloc: combine and sort reloc sections */ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64") OUTPUT_ARCH(i386:x86-64) @@ -55,6 +46,7 @@ KEEP (*(.init)) } =0x90909090 .plt : { *(.plt) *(.iplt) } + .text.unlikely (NOLOAD) : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) } .text : { *(.text.unlikely .text.*_unlikely) @@ -218,4 +210,3 @@ } -================================================== then create t.c as: __attribute__ ((noinline)) t() { printf ("test\n"); } main(int argc) { if (argc>1) t(); return 0; } and dotests as: for name in $* do rm a.out *.gcda 2>/dev/null ./xgcc -B ./ -Ofast -fprofile-generate $name --static 2>/dev/null if [ -f a.out ] then ./a.out >/dev/null 2>/dev/null || continue ./xgcc -B ./ -Ofast -fprofile-use -freorder-blocks-and-partition -Wl,-T,/home/jh/script --static $name 2>/dev/null ./a.out t >/dev/null 2>/dev/null || echo FAIL $name else echo skip $name fi done Then run: jh@gcc10:~/trunk/build/gcc$ sh dotests t.c FAIL t.c You should get FAIL if things are fine, because t.c depends behaviour on number of command line parameters. If that fail you can run i.e. jh@gcc10:~/trunk/build/gcc$ sh dotests ~/trunk/gcc/testsuite/gcc.c-torture/execute/*.c skip /home/jh/trunk/gcc/testsuite/gcc.c-torture/execute/20000402-1.c FAIL /home/jh/trunk/gcc/testsuite/gcc.c-torture/execute/20000422-1.c FAIL /home/jh/trunk/gcc/testsuite/gcc.c-torture/execute/20000910-2.c skip /home/jh/trunk/gcc/testsuite/gcc.c-torture/execute/20010329-1.c Those with fail get cold section executed. When you run tehm again through dotests you can do gdb a.out and see what function gets split incorrectly. Honza