diff --git a/mcsema/Arch/Runtime/Intrinsics.h b/mcsema/Arch/Runtime/Intrinsics.h index f64f6e93..056ad52d 100644 --- a/mcsema/Arch/Runtime/Intrinsics.h +++ b/mcsema/Arch/Runtime/Intrinsics.h @@ -22,13 +22,13 @@ extern "C" { [[gnu::used]] extern uint32_t __mcsema_read_memory_32(addr_t); [[gnu::used]] extern uint64_t __mcsema_read_memory_64(addr_t); -[[gnu::used]] extern void __mcsema_read_memory_v8(addr_t, vec8_t &); -[[gnu::used]] extern void __mcsema_read_memory_v16(addr_t, vec16_t &); -[[gnu::used]] extern void __mcsema_read_memory_v32(addr_t, vec32_t &); -[[gnu::used]] extern void __mcsema_read_memory_v64(addr_t, vec64_t &); -[[gnu::used]] extern void __mcsema_read_memory_v128(addr_t, vec128_t &); -[[gnu::used]] extern void __mcsema_read_memory_v256(addr_t, vec256_t &); -[[gnu::used]] extern void __mcsema_read_memory_v512(addr_t, vec512_t &); +[[gnu::used]] extern vec8_t __mcsema_read_memory_v8(addr_t); +[[gnu::used]] extern vec16_t __mcsema_read_memory_v16(addr_t); +[[gnu::used]] extern vec32_t __mcsema_read_memory_v32(addr_t); +[[gnu::used]] extern vec64_t __mcsema_read_memory_v64(addr_t); +[[gnu::used]] extern vec128_t __mcsema_read_memory_v128(addr_t); +[[gnu::used]] extern vec256_t __mcsema_read_memory_v256(addr_t); +[[gnu::used]] extern vec512_t __mcsema_read_memory_v512(addr_t); // Memory write intrinsics. [[gnu::used]] extern void __mcsema_write_memory_8(addr_t, uint8_t); @@ -36,13 +36,13 @@ extern "C" { [[gnu::used]] extern void __mcsema_write_memory_32(addr_t, uint32_t); [[gnu::used]] extern void __mcsema_write_memory_64(addr_t, uint64_t); -[[gnu::used]] extern void __mcsema_write_memory_v8(addr_t, const vec8_t &); -[[gnu::used]] extern void __mcsema_write_memory_v16(addr_t, const vec16_t &); -[[gnu::used]] extern void __mcsema_write_memory_v32(addr_t, const vec32_t &); -[[gnu::used]] extern void __mcsema_write_memory_v64(addr_t, const vec64_t &); -[[gnu::used]] extern void __mcsema_write_memory_v128(addr_t, const vec128_t &); -[[gnu::used]] extern void __mcsema_write_memory_v256(addr_t, const vec256_t &); -[[gnu::used]] extern void __mcsema_write_memory_v512(addr_t, const vec512_t &); +[[gnu::used]] extern void __mcsema_write_memory_v8(addr_t, vec8_t); +[[gnu::used]] extern void __mcsema_write_memory_v16(addr_t, vec16_t); +[[gnu::used]] extern void __mcsema_write_memory_v32(addr_t, vec32_t); +[[gnu::used]] extern void __mcsema_write_memory_v64(addr_t, vec64_t); +[[gnu::used]] extern void __mcsema_write_memory_v128(addr_t, vec128_t); +[[gnu::used]] extern void __mcsema_write_memory_v256(addr_t, vec256_t); +[[gnu::used]] extern void __mcsema_write_memory_v512(addr_t, vec512_t); [[gnu::used]] extern bool __mcsema_undefined_bool(void); [[gnu::used]] extern uint8_t __mcsema_undefined_8(void); diff --git a/mcsema/Arch/Runtime/Operators.h b/mcsema/Arch/Runtime/Operators.h index 39365a36..08f8948c 100644 --- a/mcsema/Arch/Runtime/Operators.h +++ b/mcsema/Arch/Runtime/Operators.h @@ -138,9 +138,7 @@ struct VecWriter { }; \ \ ALWAYS_INLINE static T R(const Mn mem) { \ - T vec; \ - __mcsema_read_memory_v ## size (mem.addr, vec); \ - return vec; \ + return __mcsema_read_memory_v ## size (mem.addr); \ } \ ALWAYS_INLINE static MemoryWriter ## T W(MnW mem) { \ return MemoryWriter ## T {mem.addr}; \ diff --git a/scripts/buildsystem.py b/scripts/buildsystem.py index 47fb1bc4..4bd3f921 100644 --- a/scripts/buildsystem.py +++ b/scripts/buildsystem.py @@ -72,6 +72,7 @@ CXX_FLAGS = [ "-Wno-gnu-zero-variadic-macro-arguments", "-Wno-error=unused-command-line-argument", "-Wno-override-module", + "-Wno-return-type-c-linkage", # Features. "-fno-omit-frame-pointer", diff --git a/scripts/compile_semantics.sh b/scripts/compile_semantics.sh index fd50d7bd..2d8426f2 100755 --- a/scripts/compile_semantics.sh +++ b/scripts/compile_semantics.sh @@ -11,6 +11,7 @@ CXXFLAGS+=" -isystem ${DIR}/third_party/include" CXXFLAGS+=" -std=gnu++11 -g0 -O0 -fno-exceptions -fno-rtti" CXXFLAGS+=" -fno-asynchronous-unwind-tables -I${DIR}" CXXFLAGS+=" -ffreestanding -fno-common -fno-builtin " +CXXFLAGS+=" -Wno-return-type-c-linkage " function compile_x86() { diff --git a/tests/X86/Run.cpp b/tests/X86/Run.cpp index 949820ea..9b4a2624 100644 --- a/tests/X86/Run.cpp +++ b/tests/X86/Run.cpp @@ -110,12 +110,12 @@ NEVER_INLINE addr_t __mcsema_compute_address(const State &state, addr_t addr, } #define MAKE_RW_VEC_MEMORY(size) \ - NEVER_INLINE void __mcsema_read_memory_v ## size(\ - addr_t addr, vec ## size ## _t &out) { \ - out = AccessMemory(addr); \ + NEVER_INLINE vec ## size ## _t __mcsema_read_memory_v ## size(\ + addr_t addr) { \ + return AccessMemory(addr); \ } \ NEVER_INLINE void __mcsema_write_memory_v ## size (\ - addr_t addr, const vec ## size ## _t &in) { \ + addr_t addr, vec ## size ## _t in) { \ AccessMemory(addr) = in; \ }