svn commit: r334639 - head/lib/libpmc
Matt Macy
mmacy at FreeBSD.org
Mon Jun 4 21:17:50 UTC 2018
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);
}
More information about the svn-src-all
mailing list