On Fri, May 23, 2014 at 2:28 PM, Xinliang David Li <davi...@google.com> wrote:
>       for (i = 0; i < num_strings; i++)
> +        {
> +          if (strcmp (build_info_strings[i], gi_ptr->build_info[i]))
>
> Add also check of gi_ptr->build_info:
>
>    if (!gi_ptr->build_info || strcmp (.... )

Added the check earlier, just above this walk over strings. If we
reached here the stamps were the same so if we had see a build info
tag then we should have a non-null build_info.

>
>
> +            {
> +              gcov_error ("profiling:%s:Mismatched build info string "
>
>
> +      else if (tag == GCOV_TAG_BUILD_INFO)
> +        {
>
> Add comment about not consumed by compiler, skipping the data ...

Ok.

>
> +          gcov_unsigned_t num_strings;
> +          char **build_info_strings = gcov_read_build_info (length,
> +                                                            &num_strings);
>
>
> @@ -2307,6 +2435,9 @@ coverage_obj_init (void)
>    if (cgraph_dump_file)
>      fprintf (cgraph_dump_file, "Using data file %s\n", da_file_name);
>
> +  if (flag_profile_generate_buildinfo)
> +    read_buildinfo ();
>
>
> Why building it in init, not finalize routine as the rest of the gcov info?

Not sure what the issue is? We are just reading in the file here.

Teresa

>
>
> David
>
> On Fri, May 23, 2014 at 1:59 PM, Teresa Johnson <tejohn...@google.com> wrote:
>> Done. Passes manual testing, rerunning regression testing. New patch 
>> attached.
>>
>> Thanks,
>> Teresa
>>
>> On Fri, May 23, 2014 at 11:35 AM, Xinliang David Li <davi...@google.com> 
>> wrote:
>>> The change makes gcov_info a variable length array, which is not ideal.
>>>
>>> Better just add one more field (instead of two):
>>>
>>> struct gcov_info {
>>>    ...
>>>   char ** build_info;
>>> };
>>>
>>> For regular case, it is null, for case where the build info is
>>> available, make it point to a string array (with an null end marker
>>> string).
>>>
>>> David
>>>
>>>
>>>
>>>
>>>
>>> On Fri, May 23, 2014 at 11:08 AM, Teresa Johnson <tejohn...@google.com> 
>>> wrote:
>>>> Support for embedding arbitrary build information from the profile-generate
>>>> compile into the gcda file in a new BUILD_INFO record. Lines from a file
>>>> passed to the -fprofile-generate compile via a new
>>>> -fprofile-generate-buildinfo=filename option are embedded as strings
>>>> in the gcov_info struct and emitted as-is to a new GCOV_TAG_BUILD_INFO
>>>> record. They are ignored on profile-use compiles, but emitted by gcov-dump.
>>>> This is useful for recording information about, for example, source 
>>>> revision
>>>> info that can be helpful for diagnosing profile mis-matches.
>>>>
>>>> For example:
>>>>
>>>> $ cat buildinfo.txt
>>>> Build timestamp xxxx
>>>> Build source revision r12345
>>>> Other random build data
>>>>
>>>> $ g++ foo.cc -fprofile-generate -fprofile-generate-buildinfo=buildinfo.txt
>>>>
>>>> $ a.out
>>>> $ gcov-dump foo.gcda
>>>> foo.gcda:data:magic `gcda':version `408*'
>>>> foo.gcda:stamp 708902860
>>>> foo.gcda: a3000000:  22:PROGRAM_SUMMARY checksum=0x86a3bc55
>>>> foo.gcda:               counts=1, runs=1, sum_all=1, run_max=1, sum_max=1
>>>> foo.gcda:               counter histogram:
>>>> foo.gcda:               1: num counts=1, min counter=1, cum_counter=1
>>>> foo.gcda: a7000000:  24:BUILD INFO num_strings=3
>>>> foo.gcda:               Build timestamp xxxx
>>>> foo.gcda:               Build source revision r12345
>>>> foo.gcda:               Other random build data
>>>> foo.gcda: 01000000:   3:FUNCTION ident=1, lineno_checksum=0x17c79156,
>>>> cfg_checksum=0xdb5de9e8
>>>> foo.gcda:  01a10000:   2:COUNTERS arcs 1 counts
>>>>
>>>> Tested manually, passes regression tests. Ok for Google/4_8?
>>>>
>>>> Thanks,
>>>> Teresa
>>>>
>>>> --
>>>> Teresa Johnson | Software Engineer | tejohn...@google.com | 408-460-2413
>>
>>
>>
>> --
>> Teresa Johnson | Software Engineer | tejohn...@google.com | 408-460-2413



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

Reply via email to