On Fri, May 23, 2014 at 2:50 PM, Teresa Johnson <tejohn...@google.com> wrote: > 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. >
It is better to consolidate all the gcov info build related thing in one place. Is it doable inside build_info () function? David > 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