#include "syscallent.h"
};
static const int nsyscalls0 = sizeof sysent0 / sizeof sysent0[0];
+int qual_flags0[MAX_QUALS];
#if SUPPORTED_PERSONALITIES >= 2
static const struct sysent sysent1[] = {
#include "syscallent1.h"
};
static const int nsyscalls1 = sizeof sysent1 / sizeof sysent1[0];
+int qual_flags1[MAX_QUALS];
#endif /* SUPPORTED_PERSONALITIES >= 2 */
#if SUPPORTED_PERSONALITIES >= 3
#include "syscallent2.h"
};
static const int nsyscalls2 = sizeof sysent2 / sizeof sysent2[0];
+int qual_flags2[MAX_QUALS];
#endif /* SUPPORTED_PERSONALITIES >= 3 */
const struct sysent *sysent;
+int *qual_flags;
int nsyscalls;
/* Now undef them since short defines cause wicked namespace pollution. */
nioctlents = nioctlents0;
signalent = signalent0;
nsignals = nsignals0;
+ qual_flags = qual_flags0;
break;
#if SUPPORTED_PERSONALITIES >= 2
nioctlents = nioctlents1;
signalent = signalent1;
nsignals = nsignals1;
+ qual_flags = qual_flags1;
break;
#endif /* SUPPORTED_PERSONALITIES >= 2 */
nioctlents = nioctlents2;
signalent = signalent2;
nsignals = nsignals2;
+ qual_flags = qual_flags2;
break;
#endif /* SUPPORTED_PERSONALITIES >= 3 */
return 0;
}
-int qual_flags[MAX_QUALS];
-
struct call_counts {
struct timeval time;
};
static void
-qualify_one(n, opt, not)
+qualify_one(n, opt, not, pers)
int n;
const struct qual_options *opt;
int not;
+ int pers;
{
- if (not)
- qual_flags[n] &= ~opt->bitflag;
- else
- qual_flags[n] |= opt->bitflag;
+ if (pers == 0 || pers < 0) {
+ if (not)
+ qual_flags0[n] &= ~opt->bitflag;
+ else
+ qual_flags0[n] |= opt->bitflag;
+ }
+
+#if SUPPORTED_PERSONALITIES >= 2
+ if (pers == 1 || pers < 0) {
+ if (not)
+ qual_flags1[n] &= ~opt->bitflag;
+ else
+ qual_flags1[n] |= opt->bitflag;
+ }
+#endif /* SUPPORTED_PERSONALITIES >= 2 */
+
+#if SUPPORTED_PERSONALITIES >= 3
+ if (pers == 2 || pers < 0) {
+ if (not)
+ qual_flags2[n] &= ~opt->bitflag;
+ else
+ qual_flags2[n] |= opt->bitflag;
+ }
+#endif /* SUPPORTED_PERSONALITIES >= 3 */
}
static int
int i = atoi(s);
if (i < 0 || i >= nsyscalls)
return -1;
- qualify_one(i, opt, not);
+ qualify_one(i, opt, not, -1);
return 0;
}
for (i = 0; i < nsyscalls; i++) {
- if (strcmp(s, sysent[i].sys_name) == 0) {
- qualify_one(i, opt, not);
+ if (strcmp(s, sysent0[i].sys_name) == 0) {
+ qualify_one(i, opt, not, 0);
+ rc = 0;
+ }
+
+#if SUPPORTED_PERSONALITIES >= 2
+ if (strcmp(s, sysent1[i].sys_name) == 0) {
+ qualify_one(i, opt, not, 1);
+ rc = 0;
+ }
+#endif /* SUPPORTED_PERSONALITIES >= 2 */
+
+#if SUPPORTED_PERSONALITIES >= 3
+ if (strcmp(s, sysent2[i].sys_name) == 0) {
+ qualify_one(i, opt, not, 2);
rc = 0;
}
+#endif /* SUPPORTED_PERSONALITIES >= 3 */
}
return rc;
}
int signo = atoi(s);
if (signo < 0 || signo >= MAX_QUALS)
return -1;
- qualify_one(signo, opt, not);
+ qualify_one(signo, opt, not, -1);
return 0;
}
if (strlen(s) >= sizeof buf)
s += 3;
for (i = 0; i <= NSIG; i++)
if (strcmp(s, signame(i) + 3) == 0) {
- qualify_one(i, opt, not);
+ qualify_one(i, opt, not, -1);
return 0;
}
return -1;
int desc = atoi(s);
if (desc < 0 || desc >= MAX_QUALS)
return -1;
- qualify_one(desc, opt, not);
+ qualify_one(desc, opt, not, -1);
return 0;
}
return -1;
}
if (strcmp(s, "all") == 0) {
for (i = 0; i < MAX_QUALS; i++) {
- if (not)
- qual_flags[i] &= ~opt->bitflag;
- else
- qual_flags[i] |= opt->bitflag;
+ qualify_one(i, opt, not, -1);
}
return;
}
for (i = 0; i < MAX_QUALS; i++) {
- if (not)
- qual_flags[i] |= opt->bitflag;
- else
- qual_flags[i] &= ~opt->bitflag;
+ qualify_one(i, opt, !not, -1);
}
for (p = strtok(s, ","); p; p = strtok(NULL, ",")) {
if (opt->bitflag == QUAL_TRACE && (n = lookup_class(p)) > 0) {
for (i = 0; i < MAX_QUALS; i++) {
- if (sysent[i].sys_flags & n) {
- if (not)
- qual_flags[i] &= ~opt->bitflag;
- else
- qual_flags[i] |= opt->bitflag;
- }
+ if (sysent0[i].sys_flags & n)
+ qualify_one(i, opt, not, 0);
+
+#if SUPPORTED_PERSONALITIES >= 2
+ if (sysent1[i].sys_flags & n)
+ qualify_one(i, opt, not, 1);
+#endif /* SUPPORTED_PERSONALITIES >= 2 */
+
+#if SUPPORTED_PERSONALITIES >= 3
+ if (sysent2[i].sys_flags & n)
+ qualify_one(i, opt, not, 2);
+#endif /* SUPPORTED_PERSONALITIES >= 3 */
}
continue;
}