0001
0002
0003
0004
0005
0006 #define _GNU_SOURCE
0007 #include <assert.h>
0008 #include <sched.h>
0009 #include <signal.h>
0010 #include <stdio.h>
0011 #include <string.h>
0012 #include <sys/time.h>
0013
0014 #include "rseq.h"
0015
0016 void test_cpu_pointer(void)
0017 {
0018 cpu_set_t affinity, test_affinity;
0019 int i;
0020
0021 sched_getaffinity(0, sizeof(affinity), &affinity);
0022 CPU_ZERO(&test_affinity);
0023 for (i = 0; i < CPU_SETSIZE; i++) {
0024 if (CPU_ISSET(i, &affinity)) {
0025 CPU_SET(i, &test_affinity);
0026 sched_setaffinity(0, sizeof(test_affinity),
0027 &test_affinity);
0028 assert(sched_getcpu() == i);
0029 assert(rseq_current_cpu() == i);
0030 assert(rseq_current_cpu_raw() == i);
0031 assert(rseq_cpu_start() == i);
0032 CPU_CLR(i, &test_affinity);
0033 }
0034 }
0035 sched_setaffinity(0, sizeof(affinity), &affinity);
0036 }
0037
0038 int main(int argc, char **argv)
0039 {
0040 if (rseq_register_current_thread()) {
0041 fprintf(stderr, "Error: rseq_register_current_thread(...) failed(%d): %s\n",
0042 errno, strerror(errno));
0043 goto init_thread_error;
0044 }
0045 printf("testing current cpu\n");
0046 test_cpu_pointer();
0047 if (rseq_unregister_current_thread()) {
0048 fprintf(stderr, "Error: rseq_unregister_current_thread(...) failed(%d): %s\n",
0049 errno, strerror(errno));
0050 goto init_thread_error;
0051 }
0052 return 0;
0053
0054 init_thread_error:
0055 return -1;
0056 }