gcov-dump tool does raw dump of profile data. In the long run, we
should have only one gcov profile manipulation tool, so it might be
better to incorporate gcov-dump into gcov-tool and get rid of
'gcov-dump'.

David

On Mon, Nov 18, 2013 at 12:24 PM, Rong Xu <x...@google.com> wrote:
> Hi, all
>
> This is the new patch for gcov-tool (previously profile-tool).
>
> Honza: can you comment on the new merge interface? David posted some
> comments in an earlier email and we want to know what's your opinion.
>
> Test patch has been tested with boostrap, regresssion,
> profiledbootstrap and SPEC2006.
>
> Noticeable changes from the earlier version:
>
> 1. create a new file libgcov.h and move libgcov-*.h headers to libgcov.h
> So we can included multiple libgcov-*.c without adding new macros.
>
> 2. split libgcov.h specific code in gcvo-io.h to libcc/libgcov.h
> Avoid multiple-page of code under IN_LIBGCOV macro -- this
> improves the readability.
>
> 3. make gcov_var static, and move the definition from gcov-io.h to
> gcov-io.c. Also
>    move some static functions accessing gcov_var to gcvo-io.c
> Current code rely on GCOV_LINKAGE tricks to avoid multi-definition. I don't 
> see
> a reason that gcov_var needs to exposed as a global.
>
> 4. expose gcov_write_strings() and gcov_sync() to gcov_tool usage
>
> 5. rename profile-tool to gcov-tool per Honza's suggestion.
>
> Thanks,
>
> -Rong
>
> On Tue, Nov 12, 2013 at 4:27 PM, Rong Xu <x...@google.com> wrote:
>> The patch was checked in as r204730.
>>
>> Tested with
>> configure with --enable-languages=all,obj-c++
>> (ada is currently broken, so I was not be able test)
>> bootstrap and profiledbootstrap
>> regression for -m32 and -m64.
>> spec2006
>>
>> The only semantic change is __gcov_flush() used to be under L_gcov.
>> I put the function to libgcov-interface.c and made it under
>> L_gcov_flush (newly added).
>> So if you need this function, you have to enable L_gcov_flush in the
>> libgcc/Makefile.in.
>>
>> Thanks,
>>
>> -Rong
>>
>> On Mon, Nov 11, 2013 at 10:19 AM, Rong Xu <x...@google.com> wrote:
>>> On Mon, Nov 11, 2013 at 7:02 AM, Jan Hubicka <hubi...@ucw.cz> wrote:
>>>>> 2013-11-04  Rong Xu  <x...@google.com>
>>>>>
>>>>>       * libgcc/libgcov.c: Delete as part of re-factoring.
>>>>>       * libgcc/libgcov-profiler.c (__gcov_interval_profiler): Moved from
>>>>>       libgcov.c
>>>>>       (__gcov_pow2_profiler): Ditto.
>>>>>       (__gcov_one_value_profiler_body): Ditto.
>>>>>       (__gcov_one_value_profiler): Ditto.
>>>>>       (__gcov_indirect_call_profiler): Ditto.
>>>>>       (__gcov_indirect_call_profiler_v2): Ditto.
>>>>>       (__gcov_average_profiler): Ditto.
>>>>>       (__gcov_ior_profiler): Ditto.
>>>>>       * libgcc/libgcov-driver.c (this_prg): Make it file scope
>>>>>       static variable.
>>>>>       (all_prg): Ditto.
>>>>>       (crc32): Ditto.
>>>>>       (gi_filename): Ditto.
>>>>>       (fn_buffer): Ditto.
>>>>>       (sum_buffer): Ditto.
>>>>>         (struct gcov_filename_aux): New types to store auxiliary 
>>>>> information
>>>>>         for gi_filename.
>>>>>       (gcov_version): Moved from libgcov.c.
>>>>>       (crc32_unsigned): Ditto.
>>>>>       (gcov_histogram_insert): Ditto.
>>>>>       (gcov_compute_histogram): Ditto.
>>>>>       (gcov_exit): Ditto.
>>>>>       (gcov_clear): Ditto.
>>>>>       (__gcov_init): Ditto.
>>>>>       (gcov_exit_compute_summary): New function split from gcov_exit().
>>>>>       (gcov_exit_merge_gcda): Ditto.
>>>>>       (gcov_exit_write_gcda): Ditto.
>>>>>       (gcov_exit_dump_gcov): Ditto.
>>>>>       * libgcc/libgcov-interface.c (init_mx): Moved from libgcov.c.
>>>>>       (init_mx_once): Ditto.
>>>>>       (__gcov_flush): Ditto.
>>>>>       (__gcov_reset): Ditto.
>>>>>       (__gcov_dump): Ditto.
>>>>>       (__gcov_fork): Ditto.
>>>>>       (__gcov_execl): Ditto.
>>>>>       (__gcov_execlp): Ditto.
>>>>>       (__gcov_execle): Ditto.
>>>>>       (__gcov_execv): Ditto.
>>>>>       (__gcov_execvp): Ditto.
>>>>>       (__gcov_execve): Ditto.
>>>>>       * libgcc/libgcov-driver-system.c (gcov_error): New utility function.
>>>>>       (allocate_filename_struct): New function split from gcov_exit().
>>>>>       (gcov_exit_open_gcda_file): Ditto.
>>>>>         (create_file_directory): Moved from libgcov.c.
>>>>>       * libgcc/libgcov-merge.c:
>>>>>       (__gcov_merge_add): Moved from libgcov.c.
>>>>>       (__gcov_merge_ior): Ditto.
>>>>>       (__gcov_merge_single): Ditto.
>>>>>       (__gcov_merge_delta): Ditto.
>>>>>       * libgcc/Makefile.in: Change to build newly added files.
>>>>>       * gcc/gcov-io.h (__gcov_merge_ior): Add the decl to avoid warning.
>>>>>
>>>>
>>>> Hi,
>>>> the patch looks resonable. I take your word on the fact that there are no 
>>>> changes
>>>> in the code, I did not read it all ;)))
>>>
>>> We did split gcov_exit() into more functions.
>>> But, semantically the code is the same.
>>>
>>>>> Index: libgcc/Makefile.in
>>>>> ===================================================================
>>>>> --- libgcc/Makefile.in        (revision 204285)
>>>>> +++ libgcc/Makefile.in        (working copy)
>>>>> @@ -853,17 +853,37 @@ include $(iterator)
>>>>>  # Build libgcov components.
>>>>>
>>>>>  # Defined in libgcov.c, included only in gcov library
>>>>> -LIBGCOV = _gcov _gcov_merge_add _gcov_merge_single _gcov_merge_delta \
>>>>> -    _gcov_fork _gcov_execl _gcov_execlp _gcov_execle \
>>>>> -    _gcov_execv _gcov_execvp _gcov_execve _gcov_reset _gcov_dump \
>>>>> -    _gcov_interval_profiler _gcov_pow2_profiler _gcov_one_value_profiler 
>>>>> \
>>>>> +##LIBGCOV = _gcov _gcov_merge_add _gcov_merge_single _gcov_merge_delta \
>>>>> +##    _gcov_fork _gcov_execl _gcov_execlp _gcov_execle \
>>>>> +##    _gcov_execv _gcov_execvp _gcov_execve _gcov_reset _gcov_dump \
>>>>> +##    _gcov_interval_profiler _gcov_pow2_profiler 
>>>>> _gcov_one_value_profiler \
>>>>> +##    _gcov_indirect_call_profiler _gcov_average_profiler 
>>>>> _gcov_ior_profiler \
>>>>> +##    _gcov_merge_ior _gcov_indirect_call_profiler_v2
>>>>
>>>> Probably no need for this commnet block.
>>>
>>> Yes. I ready remove in the most recently patch.
>>>
>>>>> +
>>>>> +LIBGCOV_MERGE = _gcov_merge_add _gcov_merge_single _gcov_merge_delta 
>>>>> _gcov_merge_ior
>>>>> +LIBGCOV_PROFILER = _gcov_interval_profiler _gcov_pow2_profiler 
>>>>> _gcov_one_value_profiler \
>>>>>      _gcov_indirect_call_profiler _gcov_average_profiler 
>>>>> _gcov_ior_profiler \
>>>>> -    _gcov_merge_ior _gcov_indirect_call_profiler_v2
>>>>> +    _gcov_indirect_call_profiler_v2
>>>>> +LIBGCOV_INTERFACE = _gcov_flush _gcov_fork _gcov_execl _gcov_execlp 
>>>>> _gcov_execle \
>>>>> +    _gcov_execv _gcov_execvp _gcov_execve _gcov_reset _gcov_dump
>>>>> +LIBGCOV_DRIVER = _gcov
>>>>>
>>>>> -libgcov-objects = $(patsubst %,%$(objext),$(LIBGCOV))
>>>>> +libgcov-merge-objects = $(patsubst %,%$(objext),$(LIBGCOV_MERGE))
>>>>> +libgcov-profiler-objects = $(patsubst %,%$(objext),$(LIBGCOV_PROFILER))
>>>>> +libgcov-interface-objects = $(patsubst %,%$(objext),$(LIBGCOV_INTERFACE))
>>>>> +libgcov-driver-objects = $(patsubst %,%$(objext),$(LIBGCOV_DRIVER))
>>>>> +libgcov-objects = $(libgcov-merge-objects) $(libgcov-profiler-objects) \
>>>>> +                 $(libgcov-interface-objects) $(libgcov-driver-objects)
>>>>>
>>>>> -$(libgcov-objects): %$(objext): $(srcdir)/libgcov.c
>>>>> -     $(gcc_compile) -DL$* -c $(srcdir)/libgcov.c
>>>>> +$(libgcov-merge-objects): %$(objext): $(srcdir)/libgcov-merge.c
>>>>> +     $(gcc_compile) -DL$* -c $(srcdir)/libgcov-merge.c
>>>>> +$(libgcov-profiler-objects): %$(objext): $(srcdir)/libgcov-profiler.c
>>>>> +     $(gcc_compile) -DL$* -c $(srcdir)/libgcov-profiler.c
>>>>> +$(libgcov-interface-objects): %$(objext): $(srcdir)/libgcov-interface.c
>>>>> +     $(gcc_compile) -DL$* -c $(srcdir)/libgcov-interface.c
>>>>> +$(libgcov-driver-objects): %$(objext): $(srcdir)/libgcov-driver.c \
>>>>> +  $(srcdir)/libgcov-driver-system.c
>>>>> +     $(gcc_compile) -DL$* -c $(srcdir)/libgcov-driver.c
>>>>>
>>>>>
>>>>>  # Static libraries.
>>>>> Index: gcc/gcov-io.h
>>>>> ===================================================================
>>>>> --- gcc/gcov-io.h     (revision 204285)
>>>>> +++ gcc/gcov-io.h     (working copy)
>>>>> @@ -515,6 +515,8 @@ extern void __gcov_merge_ior (gcov_type *, unsigne
>>>>>  extern void __gcov_interval_profiler (gcov_type *, gcov_type, int, 
>>>>> unsigned);
>>>>>  extern void __gcov_pow2_profiler (gcov_type *, gcov_type);
>>>>>  extern void __gcov_one_value_profiler (gcov_type *, gcov_type);
>>>>> +extern void __gcov_indirect_call_profiler (gcov_type*, gcov_type,
>>>>> +                                           void*, void*);
>>>>>  extern void __gcov_indirect_call_profiler_v2 (gcov_type, void *);
>>>>>  extern void __gcov_average_profiler (gcov_type *, gcov_type);
>>>>>  extern void __gcov_ior_profiler (gcov_type *, gcov_type);
>>>>
>>>> The patch is OK with the change above.
>>>
>>> Thanks for the OK. I'll do some final tests on a clean client. Then I'll 
>>> commit.
>>>
>>>> Honza

Reply via email to