>> >> I see why you do not like first_global_object_name because changing it would >> cause >> all functions from that unit to drop the profiles. Perhaps we can combine >> function name >> and compilation unit (gcov file) name? > > that is a good idea -- it will also solve the LTO problem you mentioned above. > > Will update the patch.
It already does this (similarly): chksum = coverage_checksum_string (chksum, aux_base_name); The static function defined in the same header will have different 'aux_base_name' depending on the including module. David > > David > >> >> Honza >> >>> chksum = coverage_checksum_string >>> (chksum, first_global_object_name); >>> chksum = coverage_checksum_string >>> @@ -645,7 +650,12 @@ coverage_begin_function (unsigned lineno >>> >>> /* Announce function */ >>> offset = gcov_write_tag (GCOV_TAG_FUNCTION); >>> - gcov_write_unsigned (current_function_funcdef_no + 1); >>> + if (PARAM_VALUE (PARAM_PROFILE_FUNC_INTERNAL_ID)) >>> + gcov_write_unsigned (current_function_funcdef_no + 1); >>> + else >>> + gcov_write_unsigned (coverage_compute_profile_id ( >>> + cgraph_get_node (current_function_decl))); >>> + >>> gcov_write_unsigned (lineno_checksum); >>> gcov_write_unsigned (cfg_checksum); >>> gcov_write_string (IDENTIFIER_POINTER >>> @@ -682,8 +692,13 @@ coverage_end_function (unsigned lineno_c >>> if (!DECL_EXTERNAL (current_function_decl)) >>> { >>> item = ggc_alloc<coverage_data> (); >>> - >>> - item->ident = current_function_funcdef_no + 1; >>> + >>> + if (PARAM_VALUE (PARAM_PROFILE_FUNC_INTERNAL_ID)) >>> + item->ident = current_function_funcdef_no + 1; >>> + else >>> + item->ident = coverage_compute_profile_id ( >>> + cgraph_get_node (cfun->decl)); >>> + >>> item->lineno_checksum = lineno_checksum; >>> item->cfg_checksum = cfg_checksum; >>> >>