[PATCH] Fix segfault in gcov.c (PR gcov-profile/81561).
Martin Liška
mliska@suse.cz
Thu Jul 27 12:35:00 GMT 2017
On 07/27/2017 01:48 PM, Richard Biener wrote:
> On Thu, Jul 27, 2017 at 12:12 PM, Martin Liška <mliska@suse.cz> wrote:
>> Hello.
>>
>> As reported in mentioned PR, we segfault in gcov tool when one uses -a. It's caused by fact
>> that vectors blocks and block_lists have indices kept in sync and as one removes an element
>> from blocks via:
>> blocked.erase (it);
>>
>> Then calling recursively the same function breaks the synchronization. The patch was originally
>> written by Joshua (adding him to CC). If I'm correct calling:
>>
>> - unblock (u, blocked, block_lists);
>>
>> does not make sense as we've already removed 'u'. Plus one needs to put content of block_lists[index]
>> to a separate vector in order to not to break iteration.
>>
>> Patch can bootstrap on ppc64le-redhat-linux and survives regression tests.
>> And fixed the problem reported in opensuse bugzilla (mentioned in the GCC bugzilla PR).
>>
>> Ready to be installed?
>
> Looks good to me but please wait for Joshua to confirm.
Yes.
>
> Did you manage to extract a testcase?
Unfortunately not, I've tried to isolate the affected function and call it with various arguments.
Problem is that the affected function does not have a loop and thus an inlined copy called from
a loop causes that.
Martin
>
> Thanks,
> Richard.
>
>> Martin
>>
>>
>> gcc/ChangeLog:
>>
>> 2017-07-26 Martin Liska <mliska@suse.cz>
>>
>> PR gcov-profile/81561
>> * gcov.c (unblock): Make unblocking safe as we need to preserve
>> index correspondence of blocks and block_lists.
>> ---
>> gcc/gcov.c | 10 +++++++---
>> 1 file changed, 7 insertions(+), 3 deletions(-)
>>
>>
>>
More information about the Gcc-patches
mailing list