1
0

proj: Implement InterruptedCheckTester

This commit is contained in:
2025-02-17 20:15:01 +01:00
parent cc2b270d8f
commit 3db8439a9b
4 changed files with 229 additions and 65 deletions

View File

@@ -499,7 +499,7 @@ static void init(void) {
void *__sym(malloc)(size_t size) {
init();
msg("malloc(%li)", size);
msg("malloc(%li): %p", size, __builtin_return_address(0));
if (mode >= 4) {
char buf[BUFFER_SIZE];
rcv(buf, sizeof(buf));
@@ -515,7 +515,7 @@ void *__sym(malloc)(size_t size) {
void *__sym(calloc)(size_t nmemb, size_t size) {
init();
msg("calloc(%li, %li)", nmemb, size);
msg("calloc(%li, %li): %p", nmemb, size, __builtin_return_address(0));
if (mode >= 4) {
char buf[BUFFER_SIZE];
rcv(buf, sizeof(buf));
@@ -531,7 +531,7 @@ void *__sym(calloc)(size_t nmemb, size_t size) {
void *__sym(realloc)(void *ptr, size_t size) {
init();
msg("realloc(%p, %li)", ptr, size);
msg("realloc(%p, %li): %p", ptr, size, __builtin_return_address(0));
if (mode >= 4) {
char buf[BUFFER_SIZE];
rcv(buf, sizeof(buf));
@@ -547,7 +547,7 @@ void *__sym(realloc)(void *ptr, size_t size) {
void *__sym(reallocarray)(void *ptr, size_t nmemb, size_t size) {
init();
msg("reallocarray(%p, %li)", ptr, size);
msg("reallocarray(%p, %li): %p", ptr, size, __builtin_return_address(0));
if (mode >= 4) {
char buf[BUFFER_SIZE];
rcv(buf, sizeof(buf));
@@ -563,7 +563,7 @@ void *__sym(reallocarray)(void *ptr, size_t nmemb, size_t size) {
void __sym(free)(void *ptr) {
init();
msg("free(%p)", ptr);
msg("free(%p): %p", ptr, __builtin_return_address(0));
if (mode >= 4) {
char buf[BUFFER_SIZE];
rcv(buf, sizeof(buf));
@@ -577,7 +577,7 @@ void __sym(free)(void *ptr) {
int __sym(getopt)(const int argc, char *const argv[], const char *shortopts) {
init();
msg("getopt(%i, %as, %es)", argc, argv, argc, shortopts);
msg("getopt(%i, %as, %es): %p", argc, argv, argc, shortopts, __builtin_return_address(0));
if (mode >= 4) {
char buf[BUFFER_SIZE];
rcv(buf, sizeof(buf));
@@ -595,7 +595,7 @@ int __sym(getopt)(const int argc, char *const argv[], const char *shortopts) {
int __sym(close)(int fildes) {
init();
msg("close(%i)", fildes);
msg("close(%i): %p", fildes, __builtin_return_address(0));
if (mode >= 4) {
char buf[BUFFER_SIZE];
rcv(buf, sizeof(buf));
@@ -611,7 +611,7 @@ int __sym(close)(int fildes) {
int __sym(sem_init)(sem_t *sem, int pshared, unsigned int value) {
init();
msg("sem_init(%p, %i, %u)", sem, pshared, value);
msg("sem_init(%p, %i, %u): %p", sem, pshared, value, __builtin_return_address(0));
if (mode >= 4) {
char buf[BUFFER_SIZE];
rcv(buf, sizeof(buf));
@@ -640,9 +640,9 @@ sem_t *__sym(sem_open)(const char *name, int oflag, ...) {
mode_arg = va_arg(args, mode_t);
value = va_arg(args, unsigned int);
va_end(args);
msg("sem_open(%es, 0%o:|%s, 0%03o, %u)", name, oflag, ostr, mode_arg, value);
msg("sem_open(%es, 0%o:|%s, 0%03o, %u): %p", name, oflag, ostr, mode_arg, value, __builtin_return_address(0));
} else {
msg("sem_open(%es, 0%o:|%s)", name, oflag, ostr);
msg("sem_open(%es, 0%o:|%s): %p", name, oflag, ostr, __builtin_return_address(0));
}
char overwrite[BUFFER_SIZE];
@@ -714,7 +714,7 @@ sem_t *__sym(sem_open)(const char *name, int oflag, ...) {
int __sym(sem_post)(sem_t *sem) {
init();
msg("sem_post(%p)", sem);
msg("sem_post(%p): %p", sem, __builtin_return_address(0));
if (mode >= 4) {
char buf[BUFFER_SIZE];
rcv(buf, sizeof(buf));
@@ -730,7 +730,7 @@ int __sym(sem_post)(sem_t *sem) {
int __sym(sem_wait)(sem_t *sem) {
init();
msg("sem_wait(%p)", sem);
msg("sem_wait(%p): %p", sem, __builtin_return_address(0));
if (mode >= 4) {
char buf[BUFFER_SIZE];
rcv(buf, sizeof(buf));
@@ -746,7 +746,7 @@ int __sym(sem_wait)(sem_t *sem) {
int __sym(sem_trywait)(sem_t *sem) {
init();
msg("sem_trywait(%p)", sem);
msg("sem_trywait(%p): %p", sem, __builtin_return_address(0));
if (mode >= 4) {
char buf[BUFFER_SIZE];
rcv(buf, sizeof(buf));
@@ -762,7 +762,7 @@ int __sym(sem_trywait)(sem_t *sem) {
int __sym(sem_timedwait)(sem_t *restrict sem, const struct timespec *restrict abs_timeout) {
init();
msg("sem_timedwait(%p, %p:{tv_sec: %li, tv_nsec: %li})", sem, abs_timeout, abs_timeout->tv_sec, abs_timeout->tv_nsec);
msg("sem_timedwait(%p, %p:{tv_sec: %li, tv_nsec: %li}): %p", sem, abs_timeout, abs_timeout->tv_sec, abs_timeout->tv_nsec, __builtin_return_address(0));
struct timespec overwrite;
if (mode >= 4) {
char buf[BUFFER_SIZE];
@@ -807,7 +807,7 @@ int __sym(sem_timedwait)(sem_t *restrict sem, const struct timespec *restrict ab
int __sym(sem_getvalue)(sem_t *restrict sem, int *restrict value) {
init();
msg("sem_getvalue(%p, %p)", sem, value);
msg("sem_getvalue(%p, %p): %p", sem, value, __builtin_return_address(0));
if (mode >= 4) {
char buf[BUFFER_SIZE];
rcv(buf, sizeof(buf));
@@ -823,7 +823,7 @@ int __sym(sem_getvalue)(sem_t *restrict sem, int *restrict value) {
int __sym(sem_close)(sem_t *sem) {
init();
msg("sem_close(%p)", sem);
msg("sem_close(%p): %p", sem, __builtin_return_address(0));
if (mode >= 4) {
char buf[BUFFER_SIZE];
rcv(buf, sizeof(buf));
@@ -839,7 +839,7 @@ int __sym(sem_close)(sem_t *sem) {
int __sym(sem_unlink)(const char *name) {
init();
msg("sem_unlink(%es)", name);
msg("sem_unlink(%es): %p", name, __builtin_return_address(0));
char overwrite[BUFFER_SIZE];
if (mode >= 4) {
char buf[BUFFER_SIZE];
@@ -870,7 +870,7 @@ int __sym(sem_unlink)(const char *name) {
int __sym(sem_destroy)(sem_t *sem) {
init();
msg("sem_destroy(%p)", sem);
msg("sem_destroy(%p): %p", sem, __builtin_return_address(0));
if (mode >= 4) {
char buf[BUFFER_SIZE];
rcv(buf, sizeof(buf));

View File

@@ -5,6 +5,7 @@
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <semaphore.h>
static void usage(const char *prog_name) {
fprintf(stderr, "usage: %s [-a]\n", prog_name);
@@ -22,6 +23,29 @@ void do_something(void) {
free(mem);
}
void do_sem(void) {
sem_t sem;
sem_init(&sem, 0, 1);
sem_post(&sem);
while (sem_wait(&sem) == -1) {
if (errno != EINTR) {
// TODO fail
}
}
do_something();
sem_wait(&sem);
do_something();
sem_destroy(&sem);
}
int main(const int argc, char *const argv[]) {
for (int ch; (ch = getopt(argc, argv, "a")) != -1;) {
switch (ch) {
@@ -37,4 +61,5 @@ int main(const int argc, char *const argv[]) {
do_something();
do_something();
do_something();
do_sem();
}