[Patch] Avoid gcc_assert in libgcov

Teresa Johnson tejohnson@google.com
Thu May 22 14:09:00 GMT 2014


On Thu, Jan 16, 2014 at 2:41 PM, Jan Hubicka <hubicka@ucw.cz> wrote:
>> On Wed, Jan 15, 2014 at 8:39 PM, Jan Hubicka <hubicka@ucw.cz> wrote:
>> >>
>> >> In that case should we call gcov_error when IN_LIBGCOV? One
>> >> possibility would be to simply make gcov_nonruntime_assert be defined
>> >> as if (!EXPR) gcov_error in the IN_LIBGCOV case. But I think what you
>> >> wanted here was to reduce libgcov bloat by removing calls altogether,
>> >> which this wouldn't solve. But if we want to call gcov_error in some
>> >> cases, I think I need to add another macro that will either do
>> >> gcc_assert when !IN_LIBGCOV and "if (!EXPR) gcov_error" when
>> >> IN_LIBGCOV. Is that what you had in mind?
>> >
>> > I think for errors that can be triggered by data corruption, we ought to
>> > produce resonable error messages in both IN_LIBGCOV or for offline tools.
>> > Just unwound sequence if(...) gcov_error seems fine to me in this case,
>> > but we may also have assert like wrapper.
>> > I see we do not provide gcov_error outside libgcov, we probably ought to map
>> > it to fatal_error in GCC binary.
>> >
>> > thanks,
>> > Honza
>>
>> Ok, here is the new patch. Bootstrapped and tested on
>> x86_64-unknown-linux-gnu. Ok for trunk?
>>
>> Thanks, Teresa
>>
>> 2014-01-16  Teresa Johnson  <tejohnson@google.com>
>>
>>         * gcov-io.c (gcov_position): Use gcov_nonruntime_assert.
>>         (gcov_is_error): Remove gcc_assert from IN_LIBGCOV code.
>>         (gcov_rewrite): Use gcov_nonruntime_assert.
>>         (gcov_open): Ditto.
>>         (gcov_write_words): Ditto.
>>         (gcov_write_length): Ditto.
>>         (gcov_read_words): Use gcov_nonruntime_assert, and remove
>>         gcc_assert from IN_LIBGCOV code.
>>         (gcov_read_summary): Use gcov_error to flag profile corruption.
>>         (gcov_sync): Use gcov_nonruntime_assert.
>>         (gcov_seek): Remove gcc_assert from IN_LIBGCOV code.
>>         (gcov_histo_index): Use gcov_nonruntime_assert.
>>         (static void gcov_histogram_merge): Ditto.
>>         (compute_working_sets): Ditto.
>>         * gcov-io.h (gcov_nonruntime_assert): Define.
>>         (gcov_error): Define for !IN_LIBGCOV
>
> OK, thanks!
> Honza

I just found this old patch sitting in a client! Committed as r210805.

I also discovered that a couple uses of gcc_assert have snuck into
libgcc/libgcov* files in the meantime. Looks like this got added
during some of Rong's refactoring, cc'ing Rong. They are in
libgcc/libgcov-driver-system.c (allocate_filename_struct) and
libgcov-merge.c (__gcov_merge_single and __gcov_merge_delta). Should I
remove those or change to gcov_error?

Teresa



-- 
Teresa Johnson | Software Engineer | tejohnson@google.com | 408-460-2413



More information about the Gcc-patches mailing list