diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/test-execmem.c | 37 | ||||
-rw-r--r-- | test/test-stop-threads.c | 1 |
2 files changed, 38 insertions, 0 deletions
diff --git a/test/test-execmem.c b/test/test-execmem.c new file mode 100644 index 0000000..5ec64e9 --- /dev/null +++ b/test/test-execmem.c @@ -0,0 +1,37 @@ +#include "substitute-internal.h" +#include "execmem.h" +#include <stdio.h> +#include <search.h> /* for the victim */ +#include <errno.h> +#define NOP_SLED \ + __asm__ volatile("nop; nop; nop; nop; nop; nop; nop; nop; nop; nop;" \ + "nop; nop; nop; nop; nop; nop; nop; nop; nop; nop;" \ + "nop; nop; nop; nop; nop; nop; nop; nop; nop; nop;") +#define OTHER_SIZE 32 /* guess */ + +int other(size_t a) { + if (__builtin_expect(!a, 1)) + return 6; + NOP_SLED; + return 0; +} + +__attribute__((section("__TEST,__test"), noinline)) +int test(size_t a) { + NOP_SLED; + if (!a) + return 5; + else + return 1000; +} + +int main() { + printf("this should be 5: %d\n", test(0)); + printf("=> %d\n", execmem_write(test, other, OTHER_SIZE)); + printf(" %s\n", strerror(errno)); + printf("this should be 6: %d\n", test(0)); + printf("=> %d\n", execmem_write(hcreate, other, OTHER_SIZE)); + printf(" %s\n", strerror(errno)); + printf("modified shared cache func: %d\n", hcreate(0)); + +} diff --git a/test/test-stop-threads.c b/test/test-stop-threads.c index be0787d..829e73e 100644 --- a/test/test-stop-threads.c +++ b/test/test-stop-threads.c @@ -1,4 +1,5 @@ #include "substitute-internal.h" +#include "stop-other-threads.h" #include <stdio.h> #include <unistd.h> #include <pthread.h> |