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

Reply via email to