diff --git a/main.py b/main.py index 727af96..8ec76d7 100644 --- a/main.py +++ b/main.py @@ -224,6 +224,7 @@ def handle_syscall(syscall_id, syscall_object, entering, pid): (258, True): set_tid_address_entry_handler, (258, False): set_tid_address_exit_handler, (259, True): timer_create_entry_handler, + (259, False): timer_create_exit_handler, (260, True): timer_settime_entry_handler, (261, True): timer_gettime_entry_handler, (263, True): timer_delete_entry_handler, diff --git a/sample_programs/timer_tests.c b/sample_programs/timer_tests.c index 93a6fdc..f75d482 100644 --- a/sample_programs/timer_tests.c +++ b/sample_programs/timer_tests.c @@ -5,6 +5,60 @@ #include +void +timer_handler (int signum) +{ + static int count = 0; + printf ("timer expired %d times\n", ++count); +} + +static int +make_timer_signal(timer_t *timerid, int interval_s) { + // currently the feature this tests is not supported so don't use + struct sigevent sigev; + + struct itimerspec timerspec; + int sigNo = SIGRTMIN; + + /* Set up signal handler. */ + struct sigaction sa; + sa.sa_handler = &timer_handler; + sigemptyset(&sa.sa_mask); + if (sigaction(sigNo, &sa, NULL) == -1) { + fprintf(stderr," Failed to setup signal handling.\n"); + return(-1); + } + + /* Set and enable alarm */ + sigev.sigev_notify = SIGEV_SIGNAL; + sigev.sigev_signo = sigNo; + sigev.sigev_value.sival_ptr = timerid; + + timer_create(CLOCK_REALTIME, &sigev, timerid); + + timerspec.it_value.tv_sec = interval_s; + timerspec.it_interval.tv_sec = interval_s; + + timer_settime(*timerid, 0, &timerspec, NULL); + + return(0); +} + + +void test_use_attach_to_signal() { + timer_t timerid; + int interval = 1; + + printf("Starting timer test: attach to signal \n"); + + make_timer_signal(&timerid, interval); + int i; + for (i = 0; i < 2000000000; i++) {} + timer_delete(timerid); + + printf("Ending timer test: attach to signal \n"); +} + static int make_timer_simple(timer_t *timerid, int interval_s) { struct sigevent sigev; @@ -22,9 +76,9 @@ make_timer_simple(timer_t *timerid, int interval_s) { struct itimerspec old_value; timer_settime(*timerid, 0, &timerspec, &old_value); - printf("Old itimerspec value: it_interval: {%d, %d} \n", old_value.it_interval.tv_sec, old_value.it_interval.tv_nsec); + printf("Old itimerspec value: it_interval: {%d, %d} \n", (int) old_value.it_interval.tv_sec, (int) old_value.it_interval.tv_nsec); - printf("Old itimerspec value: it_value: {%d, %d} \n", old_value.it_value.tv_sec, old_value.it_value.tv_nsec); + printf("Old itimerspec value: it_value: {%d, %d} \n",(int) old_value.it_value.tv_sec,(int) old_value.it_value.tv_nsec); } void test_use_simple() { @@ -92,6 +146,9 @@ int main(void) { test_timer_create(); test_use_simple(); + + // signal attaching functionality is not yet supported + // test_use_attach_to_signal(); return 0; } diff --git a/test/pandoc/test_pandoc_txt_convert.sh b/test/pandoc/test_pandoc_txt_convert.sh index 8ba28c6..c0ac94c 100755 --- a/test/pandoc/test_pandoc_txt_convert.sh +++ b/test/pandoc/test_pandoc_txt_convert.sh @@ -6,9 +6,8 @@ strace -f -s 9999 -vvvv -o pandoc_convert_txt.strace pandoc -t plain -o converte rm converted.txt; cd ../../ > /dev/null; -python main.py -c "['pandoc', '-t', 'plain', '-o', 'converted.txt', 'empty.txt']" -t test/pandoc/pandoc_convert_txt.strace -l DEBUG; +python main.py -c "['pandoc', '-t', 'plain', '-o', 'converted.txt', 'empty.txt']" -t test/pandoc/pandoc_convert_txt.strace; cd test/pandoc/; rm empty.txt; -#rm converted.txt; rm pandoc_convert_txt.strace diff --git a/time_handlers.py b/time_handlers.py index 6e1e5fc..66d15a7 100644 --- a/time_handlers.py +++ b/time_handlers.py @@ -12,18 +12,25 @@ def timer_create_entry_handler(syscall_id, syscall_object, pid): logging.debug("Sigevent type: " + str(sigev_type)) if sigev_type != 'SIGEV_NONE': - raise NotImplementedError("Sigevent type %s is not supported" % (sigev_type)) - - addr = cint.peek_register(pid, cint.EDX) - logging.debug('timerid address: %x', addr) + raise NotImplementedError("Sigevent type %s is not supported for timer_create" % (sigev_type)) + else: + # addr + addr = cint.peek_register(pid, cint.EDX) + logging.debug('timerid address: %x', addr) - timerid = int(syscall_object.args[-1].value.strip('{}')) - logging.debug(str(timerid)) + # timerid + timerid = int(syscall_object.args[-1].value.strip('{}')) + logging.debug(str(timerid)) - cint.populate_timer_t_structure(pid, addr, timerid); - - noop_current_syscall(pid) - apply_return_conditions(pid, syscall_object) + cint.populate_timer_t_structure(pid, addr, timerid); + + noop_current_syscall(pid) + apply_return_conditions(pid, syscall_object) + + +def timer_create_exit_handler(syscall_id, syscall_object, pid): + logging.debug("Entering the timer_create exit handler") + logging.debug("Nothing to do here") def timer_extract_and_populate_itimerspec(syscall_object, pid, addr, start_index):