Skip to content
This repository was archived by the owner on May 10, 2019. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
61 changes: 59 additions & 2 deletions sample_programs/timer_tests.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,60 @@
#include <time.h>


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;
Expand All @@ -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() {
Expand Down Expand Up @@ -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;
}
3 changes: 1 addition & 2 deletions test/pandoc/test_pandoc_txt_convert.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
27 changes: 17 additions & 10 deletions time_handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down