diff options
author | John Baldwin <jhb@FreeBSD.org> | 2015-05-19 18:58:18 +0000 |
---|---|---|
committer | John Baldwin <jhb@FreeBSD.org> | 2015-05-19 18:58:18 +0000 |
commit | 0ceb54c2cfaa3266a471d838d521e7df19683db0 (patch) | |
tree | aa664d8329f113634ac3854a3d1ae6a917e94b85 /lib/libpmc/libpmc.c | |
parent | 4e8e1ebd719f190853b09bb4834a7b63367eb49f (diff) | |
download | src-0ceb54c2cfaa3266a471d838d521e7df19683db0.tar.gz src-0ceb54c2cfaa3266a471d838d521e7df19683db0.zip |
Use fixed enum values for PMC_CLASSES().
This removes one of the frequent causes of ABI breakage when new CPU
types are added to hwpmc(4).
Differential Revision: https://reviews.freebsd.org/D2586
Reviewed by: davide, emaste, gnn (earlier version)
MFC after: 2 weeks
Notes
Notes:
svn path=/head/; revision=283120
Diffstat (limited to 'lib/libpmc/libpmc.c')
-rw-r--r-- | lib/libpmc/libpmc.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/lib/libpmc/libpmc.c b/lib/libpmc/libpmc.c index c4482c82e426..d9d79024c5b7 100644 --- a/lib/libpmc/libpmc.c +++ b/lib/libpmc/libpmc.c @@ -423,9 +423,14 @@ static const char * pmc_capability_names[] = { __PMC_CAPS() }; -static const char * pmc_class_names[] = { +struct pmc_class_map { + enum pmc_class pm_class; + const char *pm_name; +}; + +static const struct pmc_class_map pmc_class_names[] = { #undef __PMC_CLASS -#define __PMC_CLASS(C) #C , +#define __PMC_CLASS(S,V,D) { .pm_class = PMC_CLASS_##S, .pm_name = #S } , __PMC_CLASSES() }; @@ -3362,9 +3367,11 @@ pmc_name_of_capability(enum pmc_caps cap) const char * pmc_name_of_class(enum pmc_class pc) { - if ((int) pc >= PMC_CLASS_FIRST && - pc <= PMC_CLASS_LAST) - return (pmc_class_names[pc]); + size_t n; + + for (n = 0; n < PMC_TABLE_SIZE(pmc_class_names); n++) + if (pc == pmc_class_names[n].pm_class) + return (pmc_class_names[n].pm_name); errno = EINVAL; return (NULL); |