/* Does an error context match a suppression? ie is this a suppressible error? If so, return a pointer to the Supp record, otherwise NULL. Tries to minimise the number of symbol searches since they are expensive. */ static Supp* is_suppressible_error ( Error* err ) { Supp* su; Supp* su_prev; /* stats gathering */ em_supplist_searches++; /* See if the error context matches any suppression. */ su_prev = NULL; for (su = suppressions; su != NULL; su = su->next) { em_supplist_cmps++; if (supp_matches_error(su, err) && supp_matches_callers(err, su)) { /* got a match. Move this entry to the head of the list in the hope of making future searches cheaper. */ if (su_prev) { vg_assert(su_prev->next == su); su_prev->next = su->next; su->next = suppressions; suppressions = su; } return su; } su_prev = su; } return NULL; /* no matches */ }
/* Does an error context match a suppression? ie is this a suppressible error? If so, return a pointer to the Supp record, otherwise NULL. Tries to minimise the number of symbol searches since they are expensive. */ static Supp* is_suppressible_error ( Error* err ) { Int i; static Char caller_obj[VG_N_SUPP_CALLERS][M_VG_ERRTXT]; static Char caller_fun[VG_N_SUPP_CALLERS][M_VG_ERRTXT]; Supp* su; /* get_objname_fnname() writes the function name and object name if it finds them in the debug info. So the strings in the suppression file should match these. */ /* Initialise these strs so they are always safe to compare, even if get_objname_fnname doesn't write anything to them. */ for (i = 0; i < VG_N_SUPP_CALLERS; i++) caller_obj[i][0] = caller_fun[i][0] = 0; for (i = 0; i < VG_N_SUPP_CALLERS && i < VG_(clo_backtrace_size); i++) { get_objname_fnname ( err->where->eips[i], caller_obj[i], M_VG_ERRTXT, caller_fun[i], M_VG_ERRTXT ); } /* See if the error context matches any suppression. */ for (su = vg_suppressions; su != NULL; su = su->next) { if (supp_matches_error(su, err) && supp_matches_callers(su, caller_obj, caller_fun)) { return su; } } return NULL; /* no matches */ }
/* Does an error context match a suppression? ie is this a suppressible error? If so, return a pointer to the Supp record, otherwise NULL. Tries to minimise the number of symbol searches since they are expensive. */ static Supp* is_suppressible_error ( Error* err ) { Supp* su; /* See if the error context matches any suppression. */ for (su = suppressions; su != NULL; su = su->next) { if (supp_matches_error(su, err) && supp_matches_callers(err, su)) { return su; } } return NULL; /* no matches */ }