public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug gcov-profile/96913] New: gcc-11: __gcov_merge_topn hangs
@ 2020-09-03  7:39 slyfox at gcc dot gnu.org
  2020-09-03  7:41 ` [Bug gcov-profile/96913] " slyfox at gcc dot gnu.org
                   ` (10 more replies)
  0 siblings, 11 replies; 12+ messages in thread
From: slyfox at gcc dot gnu.org @ 2020-09-03  7:39 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96913

            Bug ID: 96913
           Summary: gcc-11: __gcov_merge_topn hangs
           Product: gcc
           Version: 11.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: gcov-profile
          Assignee: unassigned at gcc dot gnu.org
          Reporter: slyfox at gcc dot gnu.org
                CC: hubicka at gcc dot gnu.org, marxin at gcc dot gnu.org,
                    mliska at suse dot cz
  Target Milestone: ---

The hang happens on real tauthon-2.8.2 interpreter from PR96394 (no nice
reproducer yet).

In this instance I tried to build tauthon-2.8.2 against gcc-master. It hangs
early when tries to merge topn entry:

"""
#0  0x00007fd73865e0ce in __GI___libc_read (fd=3, buf=0x406284 <__gcov_var+36>,
nbytes=4096) at ../sysdeps/unix/sysv/linux/read.c:26
#1  0x00007fd7385f0090 in __GI__IO_file_xsgetn (fp=0x1295bc0, data=<optimized
out>, n=4096) at libioP.h:948
#2  0x00007fd7385e4d1f in __GI__IO_fread (buf=0x406284 <__gcov_var+36>, size=1,
count=4096, fp=0x1295bc0) at iofread.c:38
#3  0x00007fd72ab4237e in gcov_read_words (words=2) at
../../../gcc/libgcc/../gcc/gcov-io.c:491
#4  0x00007fd72ab42483 in __gcov_read_counter () at
../../../gcc/libgcc/../gcc/gcov-io.c:528
#5  0x00007fd72ab4190e in gcov_get_counter_target () at
../../../gcc/libgcc/libgcov.h:383
#6  0x00007fd72ab41c6b in __gcov_merge_topn (counters=0x7fd72ab4d320
<__gcov4.encoder_clear>, n_counters=24) at
../../../gcc/libgcc/libgcov-merge.c:114
#7  0x00007fd72ab43569 in merge_one_data (
    filename=0x1154290
"/tmp/portage/dev-lang/tauthon-2.8.2/work/x86_64-pc-linux-gnu/build/temp.linux-x86_64-2.8/tmp/portage/dev-lang/tauthon-2.8.2/work/tauthon-2.8.2/Modules/_json.gcda",
gi_ptr=0x7fd72ab4a180, summary=0x7ffde7d6e9c0) at
../../../gcc/libgcc/libgcov-driver.c:314
#8  0x00007fd72ab43b1a in dump_one_gcov (gi_ptr=0x7fd72ab4a180,
gf=0x7ffde7d6ea00, run_counted=0, run_max=125)
    at ../../../gcc/libgcc/libgcov-driver.c:492
#9  0x00007fd72ab43cba in gcov_do_dump (list=0x7fd72ab4a180, run_counted=0) at
../../../gcc/libgcc/libgcov-driver.c:555
#10 0x00007fd72ab43d28 in __gcov_dump_one (root=0x7fd72ab4e5c0 <__gcov_root>)
at ../../../gcc/libgcc/libgcov-driver.c:578
#11 0x00007fd72ab43d5d in __gcov_exit () at
../../../gcc/libgcc/libgcov-driver.c:600
#12 0x00007fd738c460a3 in _dl_fini () at dl-fini.c:139
#13 0x00007fd7385af564 in __run_exit_handlers (status=0, listp=0x7fd73872a738
<__exit_funcs>, run_list_atexit=run_list_atexit@entry=true,
    run_dtors=run_dtors@entry=true) at exit.c:108
#14 0x00007fd7385af70a in __GI_exit (status=<optimized out>) at exit.c:139
#15 0x00007fd73899534e in Py_Exit () from
/tmp/portage/dev-lang/tauthon-2.8.2/work/x86_64-pc-linux-gnu/libtauthon2.8.so.1.0
#16 0x00007fd738995533 in handle_system_exit () from
/tmp/portage/dev-lang/tauthon-2.8.2/work/x86_64-pc-linux-gnu/libtauthon2.8.so.1.0
#17 0x00007fd73899588e in PyErr_PrintEx () from
/tmp/portage/dev-lang/tauthon-2.8.2/work/x86_64-pc-linux-gnu/libtauthon2.8.so.1.0
#18 0x00007fd738995e44 in PyErr_Print () from
/tmp/portage/dev-lang/tauthon-2.8.2/work/x86_64-pc-linux-gnu/libtauthon2.8.so.1.0
#19 0x00007fd7389b851e in RunModule () from
/tmp/portage/dev-lang/tauthon-2.8.2/work/x86_64-pc-linux-gnu/libtauthon2.8.so.1.0
#20 0x00007fd7389b9075 in Py_Main () from
/tmp/portage/dev-lang/tauthon-2.8.2/work/x86_64-pc-linux-gnu/libtauthon2.8.so.1.0
#21 0x00000000004012ac in main ()
"""

Looks like the problem is in decoding of some tag in __gcov_merge_topn(). There
count of entries is huge:

"""
(gdb) frame 6
#6  0x00007fd72ab41c6b in __gcov_merge_topn (counters=0x7fd72ab4d320
<__gcov4.encoder_clear>, n_counters=24) at
../../../gcc/libgcc/libgcov-merge.c:114
114               gcov_type value = gcov_get_counter_target ();
(gdb) list __gcov_merge_topn
96         -- counter
97         */
98
99      void
100     __gcov_merge_topn (gcov_type *counters, unsigned n_counters)
101     {
102       gcc_assert (!(n_counters % GCOV_TOPN_MEM_COUNTERS));
103
104       for (unsigned i = 0; i < (n_counters / GCOV_TOPN_MEM_COUNTERS); i++)
105         {
(gdb)
106           /* First value is number of total executions of the profiler.  */
107           gcov_type all = gcov_get_counter_ignore_scaling (-1);
108           gcov_type n = gcov_get_counter_ignore_scaling (-1);
109
110           counters[GCOV_TOPN_MEM_COUNTERS * i] += all;
111
112           for (unsigned j = 0; j < n; j++)
113             {
114               gcov_type value = gcov_get_counter_target ();
115               gcov_type count = gcov_get_counter_ignore_scaling (-1);
(gdb)
116
117               // TODO: we should use atomic here
118               gcov_topn_add_value (counters + GCOV_TOPN_MEM_COUNTERS * i,
value,
119                                    count, 0, 0);
120             }
121         }
122     }
123     #endif /* L_gcov_merge_topn */
124
125     #endif /* inhibit_libc */
(gdb) print n
$1 = 140325305737200
(gdb) print j
$2 = 1896248771
"""

Compiler:

"""
$ ${HOME}/dev/git/gcc-native-quick-ggdb3/gcc/xgcc
-B${HOME}/dev/git/gcc-native-quick-ggdb3/gcc -v
Reading specs from /home/slyfox/dev/git/gcc-native-quick-ggdb3/gcc/specs
COLLECT_GCC=/home/slyfox/dev/git/gcc-native-quick-ggdb3/gcc/xgcc
COLLECT_LTO_WRAPPER=/home/slyfox/dev/git/gcc-native-quick-ggdb3/gcc/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../gcc/configure --build=x86_64-pc-linux-gnu
--host=x86_64-pc-linux-gnu --target=x86_64-pc-linux-gnu
--enable-languages=c,c++ --disable-bootstrap --with-multilib-list=m64
--prefix=/home/slyfox/dev/git/gcc-native-quick-ggdb3/../gcc-native-quick-installed-ggdb3
--disable-nls --without-isl --disable-libsanitizer --disable-libvtv
--disable-libgomp --disable-libstdcxx-pch --disable-libunwind-exceptions
CFLAGS='-O0 -ggdb3 ' CXXFLAGS='-O0 -ggdb3 ' --enable-valgrind-annotations
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 11.0.0 20200902 (experimental) (GCC)
"""

gcc-10 seems to be able to merge profiles.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Bug gcov-profile/96913] gcc-11: __gcov_merge_topn hangs
  2020-09-03  7:39 [Bug gcov-profile/96913] New: gcc-11: __gcov_merge_topn hangs slyfox at gcc dot gnu.org
@ 2020-09-03  7:41 ` slyfox at gcc dot gnu.org
  2020-09-04 15:26 ` slyfox at gcc dot gnu.org
                   ` (9 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: slyfox at gcc dot gnu.org @ 2020-09-03  7:41 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96913

--- Comment #1 from Sergei Trofimovich <slyfox at gcc dot gnu.org> ---
Created attachment 49178
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=49178&action=edit
_json.gcda

Attaching _json.gcda in case it will shed the light if file was written
incorrectly previously or it's a deserialization problem.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Bug gcov-profile/96913] gcc-11: __gcov_merge_topn hangs
  2020-09-03  7:39 [Bug gcov-profile/96913] New: gcc-11: __gcov_merge_topn hangs slyfox at gcc dot gnu.org
  2020-09-03  7:41 ` [Bug gcov-profile/96913] " slyfox at gcc dot gnu.org
@ 2020-09-04 15:26 ` slyfox at gcc dot gnu.org
  2020-09-04 21:31 ` slyfox at gcc dot gnu.org
                   ` (8 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: slyfox at gcc dot gnu.org @ 2020-09-04 15:26 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96913

--- Comment #2 from Sergei Trofimovich <slyfox at gcc dot gnu.org> ---
(In reply to Sergei Trofimovich from comment #0)
> The hang happens on real tauthon-2.8.2 interpreter from PR96394 (no nice
> reproducer yet).
> 
> In this instance I tried to build tauthon-2.8.2 against gcc-master. It hangs
> early when tries to merge topn entry:
> 
> """
> #0  0x00007fd73865e0ce in __GI___libc_read (fd=3, buf=0x406284
> <__gcov_var+36>, nbytes=4096) at ../sysdeps/unix/sysv/linux/read.c:26
> #1  0x00007fd7385f0090 in __GI__IO_file_xsgetn (fp=0x1295bc0,
> data=<optimized out>, n=4096) at libioP.h:948
> #2  0x00007fd7385e4d1f in __GI__IO_fread (buf=0x406284 <__gcov_var+36>,
> size=1, count=4096, fp=0x1295bc0) at iofread.c:38
> #3  0x00007fd72ab4237e in gcov_read_words (words=2) at
> ../../../gcc/libgcc/../gcc/gcov-io.c:491
> #4  0x00007fd72ab42483 in __gcov_read_counter () at
> ../../../gcc/libgcc/../gcc/gcov-io.c:528
> #5  0x00007fd72ab4190e in gcov_get_counter_target () at
> ../../../gcc/libgcc/libgcov.h:383
> #6  0x00007fd72ab41c6b in __gcov_merge_topn (counters=0x7fd72ab4d320
> <__gcov4.encoder_clear>, n_counters=24) at
> ../../../gcc/libgcc/libgcov-merge.c:114
> #7  0x00007fd72ab43569 in merge_one_data (
>     filename=0x1154290
> "/tmp/portage/dev-lang/tauthon-2.8.2/work/x86_64-pc-linux-gnu/build/temp.
> linux-x86_64-2.8/tmp/portage/dev-lang/tauthon-2.8.2/work/tauthon-2.8.2/
> Modules/_json.gcda", gi_ptr=0x7fd72ab4a180, summary=0x7ffde7d6e9c0) at
> ../../../gcc/libgcc/libgcov-driver.c:314
> #8  0x00007fd72ab43b1a in dump_one_gcov (gi_ptr=0x7fd72ab4a180,
> gf=0x7ffde7d6ea00, run_counted=0, run_max=125)
>     at ../../../gcc/libgcc/libgcov-driver.c:492
> #9  0x00007fd72ab43cba in gcov_do_dump (list=0x7fd72ab4a180, run_counted=0)
> at ../../../gcc/libgcc/libgcov-driver.c:555
> #10 0x00007fd72ab43d28 in __gcov_dump_one (root=0x7fd72ab4e5c0
> <__gcov_root>) at ../../../gcc/libgcc/libgcov-driver.c:578
...
> 
> Looks like the problem is in decoding of some tag in __gcov_merge_topn().
> There count of entries is huge:
> 
> """
> (gdb) frame 6
> #6  0x00007fd72ab41c6b in __gcov_merge_topn (counters=0x7fd72ab4d320
> <__gcov4.encoder_clear>, n_counters=24) at
> ../../../gcc/libgcc/libgcov-merge.c:114
> 114               gcov_type value = gcov_get_counter_target ();
> (gdb) list __gcov_merge_topn
> 96         -- counter
> 97         */
> 98
> 99      void
> 100     __gcov_merge_topn (gcov_type *counters, unsigned n_counters)
> 101     {
> 102       gcc_assert (!(n_counters % GCOV_TOPN_MEM_COUNTERS));
> 103
> 104       for (unsigned i = 0; i < (n_counters / GCOV_TOPN_MEM_COUNTERS);
> i++)
> 105         {
> (gdb)
> 106           /* First value is number of total executions of the profiler. 
> */
> 107           gcov_type all = gcov_get_counter_ignore_scaling (-1);
> 108           gcov_type n = gcov_get_counter_ignore_scaling (-1);
> 109
> 110           counters[GCOV_TOPN_MEM_COUNTERS * i] += all;
> 111
> 112           for (unsigned j = 0; j < n; j++)
> 113             {
> 114               gcov_type value = gcov_get_counter_target ();
> 115               gcov_type count = gcov_get_counter_ignore_scaling (-1);
> (gdb)
> 116
> 117               // TODO: we should use atomic here
> 118               gcov_topn_add_value (counters + GCOV_TOPN_MEM_COUNTERS *
> i, value,
> 119                                    count, 0, 0);
> 120             }
> 121         }
> 122     }
> 123     #endif /* L_gcov_merge_topn */
> 124
> 125     #endif /* inhibit_libc */

> (gdb) print n
> $1 = 140325305737200

I looks like __gconv_merge_topn() is applied to 'indirect_call' counters
contents. But it's content does not seem to match dynamic topn structure:

$ x86_64-pc-linux-gnu-gcov-dump -l _json.gcda

...
_json.gcda:    01a70000:   0:COUNTERS topn 0 counts
_json.gcda:    01a90000:  48:COUNTERS indirect_call 24 counts
_json.gcda:                   0: 1 1 140325305737168 1 1 140325305737200 0 0
_json.gcda:                   8: 0 0 0 0 0 0 0 0
_json.gcda:                  16: 0 0 0 0 0 0 0 0
...

Note how 140325305737200 is in the middle of topn.

My wild guess is that before

  commit 871e5ada6d53d5eb495cc9f323983f347487c1b2
  Author: Martin Liska <mliska@suse.cz>
  Date:   Fri Jan 31 13:10:14 2020 +0100

    Make TOPN counter dynamically allocated.

both indirect_call and topn had the same fixed n-value structure and were ~ok
to be merged with __gconv_merge_topn().

But now topn got a special 0-values case (why did we emit it at all?) that
merger can't handle and gets slightly past the beginning of 'indirect_call'
section.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Bug gcov-profile/96913] gcc-11: __gcov_merge_topn hangs
  2020-09-03  7:39 [Bug gcov-profile/96913] New: gcc-11: __gcov_merge_topn hangs slyfox at gcc dot gnu.org
  2020-09-03  7:41 ` [Bug gcov-profile/96913] " slyfox at gcc dot gnu.org
  2020-09-04 15:26 ` slyfox at gcc dot gnu.org
@ 2020-09-04 21:31 ` slyfox at gcc dot gnu.org
  2020-09-06 10:23 ` slyfox at gcc dot gnu.org
                   ` (7 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: slyfox at gcc dot gnu.org @ 2020-09-04 21:31 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96913

--- Comment #3 from Sergei Trofimovich <slyfox at gcc dot gnu.org> ---
Specifically I think this is already a wrong format on disk:

> _json.gcda:    01a70000:   0:COUNTERS topn 0 counts
> _json.gcda:    01a90000:  48:COUNTERS indirect_call 24 counts
> _json.gcda:                   0: 1 1 140325305737168 1 1 140325305737200 0 0
> _json.gcda:                   8: 0 0 0 0 0 0 0 0
> _json.gcda:                  16: 0 0 0 0 0 0 0 0
> ...

Assuming indirect_call is in a 'hist' value format it should  be in form of:

  [total_executions, N, value1, counter1, ..., valueN, counterN]

Main problem: we have more than one entry here (which might be ok):
- record1 (ok):  total_executions=1 N=1 value1=140325305737168 counter1=1
- record2 (bad): total_executions=1 N=140325305737200 counter=0 ...

This is where we trip over enormous N.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Bug gcov-profile/96913] gcc-11: __gcov_merge_topn hangs
  2020-09-03  7:39 [Bug gcov-profile/96913] New: gcc-11: __gcov_merge_topn hangs slyfox at gcc dot gnu.org
                   ` (2 preceding siblings ...)
  2020-09-04 21:31 ` slyfox at gcc dot gnu.org
@ 2020-09-06 10:23 ` slyfox at gcc dot gnu.org
  2020-09-06 11:25 ` slyfox at gcc dot gnu.org
                   ` (6 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: slyfox at gcc dot gnu.org @ 2020-09-06 10:23 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96913

--- Comment #4 from Sergei Trofimovich <slyfox at gcc dot gnu.org> ---
(In reply to Sergei Trofimovich from comment #3)
> Specifically I think this is already a wrong format on disk:
> 
> > _json.gcda:    01a70000:   0:COUNTERS topn 0 counts
> > _json.gcda:    01a90000:  48:COUNTERS indirect_call 24 counts
> > _json.gcda:                   0: 1 1 140325305737168 1 1 140325305737200 0 0
> > _json.gcda:                   8: 0 0 0 0 0 0 0 0
> > _json.gcda:                  16: 0 0 0 0 0 0 0 0
> > ...
> 
> Assuming indirect_call is in a 'hist' value format it should  be in form of:
> 
>   [total_executions, N, value1, counter1, ..., valueN, counterN]
> 
> Main problem: we have more than one entry here (which might be ok):
> - record1 (ok):  total_executions=1 N=1 value1=140325305737168 counter1=1
> - record2 (bad): total_executions=1 N=140325305737200 counter=0 ...
> 
> This is where we trip over enormous N.

Found one of the causes of profiling data corruption. The bug happened earlier
on initial serialization of indirect counters functions. The problematic code
is:

https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=libgcc/libgcov-driver.c;h=58914268d4ece0b3a3a7dcb9cb21c4fa197fd770;hb=HEAD#l427

"""
 417       ci_ptr = gfi_ptr->ctrs;
 418       for (t_ix = 0; t_ix < GCOV_COUNTERS; t_ix++)
 419         {
 420           gcov_position_t n_counts;
 421 
 422           if (!gi_ptr->merge[t_ix])
 423             continue;
 424 
 425           n_counts = ci_ptr->num;
 426 
 427           if (gi_ptr->merge[t_ix] == __gcov_merge_topn)
 428             write_top_counters (ci_ptr, t_ix, n_counts);
 429           else
 430             {
 431               /* Do not stream when all counters are zero.  */
 432               int all_zeros = 1;
 433               for (unsigned i = 0; i < n_counts; i++)
 434                 if (ci_ptr->values[i] != 0)
 435                   {
 436                     all_zeros = 0;
 437                     break;
 438                   }
"""

The problematic line here is 'if (gi_ptr->merge[t_ix] == __gcov_merge_topn)'.

In case of tauthon '__gcov_merge_topn' is defined in two places:
1. in 'tauthon' binary itself
2. in any other shared library loaded by tauthon. Looks like
'libtauthon2.8.so.1.0' is the first one.

'__gcov_merge_topn' is defined as hidden symbol and gets resolved to local
symbol:

$ x86_64-pc-linux-gnu-nm tauthon | fgrep gcov_merge_top
000000000040387f t __gcov_merge_topn
$ x86_64-pc-linux-gnu-nm libtauthon2.8.so.1.0 | fgrep gcov_merge_top
000000000029a202 t __gcov_merge_topn

Don't know yet know where 'gi_ptr->merge' gets filled in to leak executable's
symbol into binary.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Bug gcov-profile/96913] gcc-11: __gcov_merge_topn hangs
  2020-09-03  7:39 [Bug gcov-profile/96913] New: gcc-11: __gcov_merge_topn hangs slyfox at gcc dot gnu.org
                   ` (3 preceding siblings ...)
  2020-09-06 10:23 ` slyfox at gcc dot gnu.org
@ 2020-09-06 11:25 ` slyfox at gcc dot gnu.org
  2020-09-06 11:31 ` [Bug gcov-profile/96913] [10/11 regression] gcov TOPN streaming is incorrect for shared libraries slyfox at gcc dot gnu.org
                   ` (5 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: slyfox at gcc dot gnu.org @ 2020-09-06 11:25 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96913

Sergei Trofimovich <slyfox at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |ASSIGNED
   Last reconfirmed|                            |2020-09-06
     Ever confirmed|0                           |1
           Assignee|unassigned at gcc dot gnu.org      |slyfox at gcc dot gnu.org

--- Comment #5 from Sergei Trofimovich <slyfox at gcc dot gnu.org> ---
(In reply to Sergei Trofimovich from comment #4)

> $ x86_64-pc-linux-gnu-nm tauthon | fgrep gcov_merge_top
> 000000000040387f t __gcov_merge_topn
> $ x86_64-pc-linux-gnu-nm libtauthon2.8.so.1.0 | fgrep gcov_merge_top
> 000000000029a202 t __gcov_merge_topn
> 
> Don't know yet know where 'gi_ptr->merge' gets filled in to leak
> executable's symbol into binary.

Having looked at absolute addresses and address maps it's even more complicated
that that:

call trace:

tauthon : main()
 -> libtauthon2.8.so.1.0 : execve()
    ->libtauthon2.8.so.1.0 : __gcov_execve()
      ->libtauthon2.8.so.1.0 : write_one_data()


There addresses of:
    if (gi_ptr->merge[t_ix] == __gcov_merge_topn)
are:
- gi_ptr->merge[t_ix]: _struct.so:&__gcov_merge_topn
- __gcov_merge_topn: libtauthon2.8.so.1.0:&__gcov_merge_topn

Sent https://gcc.gnu.org/pipermail/gcc-patches/2020-September/553320.html for
review.

Claiming the bug.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Bug gcov-profile/96913] [10/11 regression] gcov TOPN streaming is incorrect for shared libraries
  2020-09-03  7:39 [Bug gcov-profile/96913] New: gcc-11: __gcov_merge_topn hangs slyfox at gcc dot gnu.org
                   ` (4 preceding siblings ...)
  2020-09-06 11:25 ` slyfox at gcc dot gnu.org
@ 2020-09-06 11:31 ` slyfox at gcc dot gnu.org
  2020-09-22 10:42 ` cvs-commit at gcc dot gnu.org
                   ` (4 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: slyfox at gcc dot gnu.org @ 2020-09-06 11:31 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96913

Sergei Trofimovich <slyfox at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|gcc-11: __gcov_merge_topn   |[10/11 regression] gcov
                   |hangs                       |TOPN streaming is incorrect
                   |                            |for shared libraries
      Known to work|                            |9.3.0
      Known to fail|                            |10.2.0

--- Comment #6 from Sergei Trofimovich <slyfox at gcc dot gnu.org> ---
https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=5f32f9cf13f99f6295591927950aaf98aa8dba91
is probably the first time regression was introduced (gcc10+).

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Bug gcov-profile/96913] [10/11 regression] gcov TOPN streaming is incorrect for shared libraries
  2020-09-03  7:39 [Bug gcov-profile/96913] New: gcc-11: __gcov_merge_topn hangs slyfox at gcc dot gnu.org
                   ` (5 preceding siblings ...)
  2020-09-06 11:31 ` [Bug gcov-profile/96913] [10/11 regression] gcov TOPN streaming is incorrect for shared libraries slyfox at gcc dot gnu.org
@ 2020-09-22 10:42 ` cvs-commit at gcc dot gnu.org
  2020-09-22 10:44 ` [Bug gcov-profile/96913] [10 " slyfox at gcc dot gnu.org
                   ` (3 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2020-09-22 10:42 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96913

--- Comment #7 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Sergei Trofimovich <slyfox@gcc.gnu.org>:

https://gcc.gnu.org/g:4ecf368f4b4223fb2df4f3887429dfbb48852e38

commit r11-3351-g4ecf368f4b4223fb2df4f3887429dfbb48852e38
Author: Sergei Trofimovich <siarheit@google.com>
Date:   Sun Sep 6 12:13:54 2020 +0100

    gcov: fix TOPN streaming from shared libraries

    Before the change gcc did not stream correctly TOPN counters
    if counters belonged to a non-local shared object.

    As a result zero-section optimization generated TOPN sections
    in a form not recognizable by '__gcov_merge_topn'.

    The problem happens because in a case of multiple shared objects
    '__gcov_merge_topn' function is present in address space multiple
    times (once per each object).

    The fix is to never rely on function address and predicate on TOPN
    counter types.

    libgcc/ChangeLog:

            PR gcov-profile/96913
            * libgcov-driver.c (write_one_data): Avoid function pointer
            comparison in TOP streaming decision.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Bug gcov-profile/96913] [10 regression] gcov TOPN streaming is incorrect for shared libraries
  2020-09-03  7:39 [Bug gcov-profile/96913] New: gcc-11: __gcov_merge_topn hangs slyfox at gcc dot gnu.org
                   ` (6 preceding siblings ...)
  2020-09-22 10:42 ` cvs-commit at gcc dot gnu.org
@ 2020-09-22 10:44 ` slyfox at gcc dot gnu.org
  2020-10-02 10:04 ` slyfox at gcc dot gnu.org
                   ` (2 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: slyfox at gcc dot gnu.org @ 2020-09-22 10:44 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96913

Sergei Trofimovich <slyfox at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|[10/11 regression] gcov     |[10 regression] gcov TOPN
                   |TOPN streaming is incorrect |streaming is incorrect for
                   |for shared libraries        |shared libraries

--- Comment #8 from Sergei Trofimovich <slyfox at gcc dot gnu.org> ---
Should be fixed for gcc-11. Will send a backport to gcc-10 this evening (the
code changed slightly since gcc-10).

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Bug gcov-profile/96913] [10 regression] gcov TOPN streaming is incorrect for shared libraries
  2020-09-03  7:39 [Bug gcov-profile/96913] New: gcc-11: __gcov_merge_topn hangs slyfox at gcc dot gnu.org
                   ` (7 preceding siblings ...)
  2020-09-22 10:44 ` [Bug gcov-profile/96913] [10 " slyfox at gcc dot gnu.org
@ 2020-10-02 10:04 ` slyfox at gcc dot gnu.org
  2020-10-02 12:30 ` cvs-commit at gcc dot gnu.org
  2020-10-02 12:32 ` slyfox at gcc dot gnu.org
  10 siblings, 0 replies; 12+ messages in thread
From: slyfox at gcc dot gnu.org @ 2020-10-02 10:04 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96913

--- Comment #9 from Sergei Trofimovich <slyfox at gcc dot gnu.org> ---
(In reply to Sergei Trofimovich from comment #8)
> Should be fixed for gcc-11. Will send a backport to gcc-10 this evening (the
> code changed slightly since gcc-10).

gcc-10 backport sent for review as
https://gcc.gnu.org/pipermail/gcc-patches/2020-September/554902.html

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Bug gcov-profile/96913] [10 regression] gcov TOPN streaming is incorrect for shared libraries
  2020-09-03  7:39 [Bug gcov-profile/96913] New: gcc-11: __gcov_merge_topn hangs slyfox at gcc dot gnu.org
                   ` (8 preceding siblings ...)
  2020-10-02 10:04 ` slyfox at gcc dot gnu.org
@ 2020-10-02 12:30 ` cvs-commit at gcc dot gnu.org
  2020-10-02 12:32 ` slyfox at gcc dot gnu.org
  10 siblings, 0 replies; 12+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2020-10-02 12:30 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96913

--- Comment #10 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-10 branch has been updated by Sergei Trofimovich
<slyfox@gcc.gnu.org>:

https://gcc.gnu.org/g:b843d57c57ac92c9cd38eec7289da2f1ea696f18

commit r10-8844-gb843d57c57ac92c9cd38eec7289da2f1ea696f18
Author: Sergei Trofimovich <siarheit@google.com>
Date:   Sun Sep 6 12:13:54 2020 +0100

    gcov: fix TOPN streaming from shared libraries

    Before the change gcc did not stream correctly TOPN counters
    if counters belonged to a non-local shared object.

    As a result zero-section optimization generated TOPN sections
    in a form not recognizable by '__gcov_merge_topn'.

    The problem happens because in a case of multiple shared objects
    '__gcov_merge_topn' function is present in address space multiple
    times (once per each object).

    The fix is to never rely on function address and predicate on TOPN
    counter types.

    libgcc/ChangeLog:

            PR gcov-profile/96913
            * libgcov-driver.c (write_one_data): Avoid function pointer
            comparison in TOP streaming decision.

    (cherry picked from commit 4ecf368f4b4223fb2df4f3887429dfbb48852e38)

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Bug gcov-profile/96913] [10 regression] gcov TOPN streaming is incorrect for shared libraries
  2020-09-03  7:39 [Bug gcov-profile/96913] New: gcc-11: __gcov_merge_topn hangs slyfox at gcc dot gnu.org
                   ` (9 preceding siblings ...)
  2020-10-02 12:30 ` cvs-commit at gcc dot gnu.org
@ 2020-10-02 12:32 ` slyfox at gcc dot gnu.org
  10 siblings, 0 replies; 12+ messages in thread
From: slyfox at gcc dot gnu.org @ 2020-10-02 12:32 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96913

Sergei Trofimovich <slyfox at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |RESOLVED
         Resolution|---                         |FIXED
   Target Milestone|---                         |10.3

--- Comment #11 from Sergei Trofimovich <slyfox at gcc dot gnu.org> ---
Should be fixed for both affected gcc-10 and gcc-11.

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2020-10-02 12:32 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-03  7:39 [Bug gcov-profile/96913] New: gcc-11: __gcov_merge_topn hangs slyfox at gcc dot gnu.org
2020-09-03  7:41 ` [Bug gcov-profile/96913] " slyfox at gcc dot gnu.org
2020-09-04 15:26 ` slyfox at gcc dot gnu.org
2020-09-04 21:31 ` slyfox at gcc dot gnu.org
2020-09-06 10:23 ` slyfox at gcc dot gnu.org
2020-09-06 11:25 ` slyfox at gcc dot gnu.org
2020-09-06 11:31 ` [Bug gcov-profile/96913] [10/11 regression] gcov TOPN streaming is incorrect for shared libraries slyfox at gcc dot gnu.org
2020-09-22 10:42 ` cvs-commit at gcc dot gnu.org
2020-09-22 10:44 ` [Bug gcov-profile/96913] [10 " slyfox at gcc dot gnu.org
2020-10-02 10:04 ` slyfox at gcc dot gnu.org
2020-10-02 12:30 ` cvs-commit at gcc dot gnu.org
2020-10-02 12:32 ` slyfox at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).