static struct msrmap *lookup_msr(char *map, jsmntok_t *val) { jsmntok_t newval = *val; static bool warned = false; int i; cut_comma(map, &newval); for (i = 0; msrmap[i].num; i++) if (json_streq(map, &newval, msrmap[i].num)) return &msrmap[i]; if (!warned) { warned = true; fprintf(stderr, "Unknown MSR in event file %.*s\n", json_len(val), map + val->start); } return NULL; }
static void addfield(char *map, char **dst, const char *sep, const char *a, jsmntok_t *bt) { unsigned len = strlen(a) + 1 + strlen(sep); int olen = *dst ? strlen(*dst) : 0; int blen = bt ? json_len(bt) : 0; *dst = realloc(*dst, len + olen + blen); if (!*dst) exit(ENOMEM); if (!olen) *(*dst) = 0; else strcat(*dst, sep); strcat(*dst, a); if (bt) strncat(*dst, map + bt->start, blen); }
static struct msrmap *lookup_msr(char *map, jsmntok_t *val) { jsmntok_t newval = *val; static bool warned = false; int i; cut_comma(map, &newval); for (i = 0; msrmap[i].num; i++) if (json_streq(map, &newval, msrmap[i].num)) return &msrmap[i]; if (!warned && strncmp(map + val->start, "0x3F7", 5)) { /* no warning for Skylake PEBS Frontend MSR */ warned = true; fprintf(stderr, "Unknown MSR in event file %.*s\n", json_len(val), map + val->start); } return NULL; }
static void addfield(char *map, char **dst, const char *sep, const char *a, jsmntok_t *bt) { unsigned int len = strlen(a) + 1 + strlen(sep); int olen = *dst ? strlen(*dst) : 0; int blen = bt ? json_len(bt) : 0; char *out; out = realloc(*dst, len + olen + blen); if (!out) { /* Don't add field in this case */ return; } *dst = out; if (!olen) *(*dst) = 0; else strcat(*dst, sep); strcat(*dst, a); if (bt) strncat(*dst, map + bt->start, blen); }