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 (.... ) + { + 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 ... + 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? 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