Skip to content

Commit

Permalink
Add qemu runtime defs for aarch64 (AFLplusplus#2151)
Browse files Browse the repository at this point in the history
  • Loading branch information
twizmwazin authored and riesentoaster committed May 24, 2024
1 parent a977777 commit e969b28
Showing 1 changed file with 49 additions and 1 deletion.
50 changes: 49 additions & 1 deletion libafl_qemu/runtime/libafl_qemu.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ typedef UINT64 libafl_word;
#else
#include <stdint.h>

#ifdef __x86_64__
#if defined(__x86_64__) || defined(__aarch64__)
typedef uint64_t libafl_word;
#define LIBAFL_CALLING_CONVENTION __attribute__(())
#endif
Expand Down Expand Up @@ -176,6 +176,54 @@ typedef enum LibaflQemuEndStatus {
}
#endif

#ifdef __aarch64__
#define LIBAFL_DEFINE_FUNCTIONS(name, opcode) \
libafl_word LIBAFL_CALLING_CONVENTION _libafl_##name##_call0( \
libafl_word action) { \
libafl_word ret; \
__asm__ volatile ( \
"mov x0, %1\n" \
".word " XSTRINGIFY(opcode) "\n" \
"mov %0, x0\n" \
: "=r"(ret) \
: "r"(action) \
: "x0" \
); \
return ret; \
} \
\
libafl_word LIBAFL_CALLING_CONVENTION _libafl_##name##_call1( \
libafl_word action, libafl_word arg1) { \
libafl_word ret; \
__asm__ volatile ( \
"mov x0, %1\n" \
"mov x1, %2\n" \
".word " XSTRINGIFY(opcode) "\n" \
"mov %0, x0\n" \
: "=r"(ret) \
: "r"(action), "r"(arg1) \
: "x0", "x1" \
); \
return ret; \
} \
\
libafl_word LIBAFL_CALLING_CONVENTION _libafl_##name##_call2( \
libafl_word action, libafl_word arg1, libafl_word arg2) { \
libafl_word ret; \
__asm__ volatile ( \
"mov x0, %1\n" \
"mov x1, %2\n" \
"mov x2, %3\n" \
".word " XSTRINGIFY(opcode) "\n" \
"mov %0, x0\n" \
: "=r"(ret) \
: "r"(action), "r"(arg1), "r"(arg2) \
: "x0", "x1", "x2" \
); \
return ret; \
}
#endif

#endif

// Generates sync exit functions
Expand Down

0 comments on commit e969b28

Please sign in to comment.