Author: mmacy Date: Mon Jun 4 21:17:46 2018 New Revision: 334639 URL: https://svnweb.freebsd.org/changeset/base/334639
Log: libpmc: improve arg checking Modified: head/lib/libpmc/libpmc.c Modified: head/lib/libpmc/libpmc.c ============================================================================== --- head/lib/libpmc/libpmc.c Mon Jun 4 21:17:42 2018 (r334638) +++ head/lib/libpmc/libpmc.c Mon Jun 4 21:17:46 2018 (r334639) @@ -37,12 +37,14 @@ __FBSDID("$FreeBSD$"); #include <ctype.h> #include <errno.h> +#include <err.h> #include <fcntl.h> #include <pmc.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <strings.h> +#include <sysexits.h> #include <unistd.h> #include "libpmcinternal.h" @@ -1035,13 +1037,16 @@ pmc_allocate(const char *ctrspec, enum pmc_mode mode, */ r = spec_copy = strdup(ctrspec); ctrname = strsep(&r, ","); - if (pmc_pmu_pmcallocate(ctrname, &pmc_config) == 0) { - if (PMC_CALL(PMCALLOCATE, &pmc_config) < 0) { + if (pmc_pmu_enabled()) { + if (pmc_pmu_pmcallocate(ctrname, &pmc_config) == 0) { + if (PMC_CALL(PMCALLOCATE, &pmc_config) < 0) { + goto out; + } + retval = 0; + *pmcid = pmc_config.pm_pmcid; goto out; } - retval = 0; - *pmcid = pmc_config.pm_pmcid; - goto out; + errx(EX_USAGE, "ERROR: pmc_pmu_allocate failed, check for ctrname %s\n", ctrname); } else { free(spec_copy); spec_copy = NULL; @@ -1068,7 +1073,7 @@ pmc_allocate(const char *ctrspec, enum pmc_mode mode, ev = NULL; for (n = 0; n < PMC_CLASS_TABLE_SIZE; n++) { pcd = pmc_class_table[n]; - if (pmc_mdep_is_compatible_class(pcd->pm_evc_class) && + if (pcd && pmc_mdep_is_compatible_class(pcd->pm_evc_class) && strncasecmp(ctrname, pcd->pm_evc_name, pcd->pm_evc_name_size) == 0) { if ((ev = pmc_match_event_class(ctrname + @@ -1086,7 +1091,7 @@ pmc_allocate(const char *ctrspec, enum pmc_mode mode, */ for (n = 0; ev == NULL && n < PMC_CLASS_TABLE_SIZE; n++) { pcd = pmc_class_table[n]; - if (pmc_mdep_is_compatible_class(pcd->pm_evc_class)) + if (pcd && pmc_mdep_is_compatible_class(pcd->pm_evc_class)) ev = pmc_match_event_class(ctrname, pcd); } _______________________________________________ svn-src-all@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"