aboutsummaryrefslogtreecommitdiff
path: root/test/test-execmem.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/test-execmem.c')
-rw-r--r--test/test-execmem.c37
1 files changed, 37 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));
+
+}