Skip to content

Commit 43cee8e

Browse files
committed
runtime_common: always use memcpy in STORE_PTR
This is one of the many causes of unaligned load warnings in -fsanitize=alignment. memcpy should always be OK: on architectures where unaligned stores are OK, this will turn into a single move. This was discussed back in 2024 at #2349.
1 parent f0aa4e8 commit 43cee8e

File tree

1 file changed

+9
-12
lines changed

1 file changed

+9
-12
lines changed

core/iwasm/common/wasm_runtime_common.h

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
#ifndef _WASM_COMMON_H
77
#define _WASM_COMMON_H
88

9+
#include <string.h>
10+
911
#include "bh_platform.h"
1012
#include "bh_common.h"
1113
#include "wasm_exec_env.h"
@@ -31,11 +33,17 @@ extern "C" {
3133
/* Internal use for setting default running mode */
3234
#define Mode_Default 0
3335

36+
#define STORE_PTR(addr, ptr) \
37+
do { \
38+
memcpy(addr, &ptr, sizeof(void*)); \
39+
} while (0)
40+
3441
#if WASM_CPU_SUPPORTS_UNALIGNED_ADDR_ACCESS != 0
3542

3643
#define PUT_I64_TO_ADDR(addr, value) \
3744
do { \
38-
*(int64 *)(addr) = (int64)(value); \
45+
int64 x = (value); \
46+
memcpy(addr, &x, sizeof(int64)); \
3947
} while (0)
4048
#define PUT_V128_TO_ADDR(addr, value) \
4149
do { \
@@ -88,11 +96,6 @@ STORE_V128(void *addr, V128 value)
8896
#define LOAD_U16(addr) (*(uint16 *)(addr))
8997
#define LOAD_V128(addr) (*(V128 *)(addr))
9098

91-
#define STORE_PTR(addr, ptr) \
92-
do { \
93-
*(void **)addr = (void *)ptr; \
94-
} while (0)
95-
9699
#else /* WASM_CPU_SUPPORTS_UNALIGNED_ADDR_ACCESS != 0 */
97100

98101
#define PUT_V128_TO_ADDR(addr, value) \
@@ -465,12 +468,6 @@ LOAD_I16(void *addr)
465468
#define LOAD_U32(addr) ((uint32)LOAD_I32(addr))
466469
#define LOAD_U16(addr) ((uint16)LOAD_I16(addr))
467470

468-
#if UINTPTR_MAX == UINT32_MAX
469-
#define STORE_PTR(addr, ptr) STORE_U32(addr, (uintptr_t)ptr)
470-
#elif UINTPTR_MAX == UINT64_MAX
471-
#define STORE_PTR(addr, ptr) STORE_I64(addr, (uintptr_t)ptr)
472-
#endif
473-
474471
#endif /* WASM_CPU_SUPPORTS_UNALIGNED_ADDR_ACCESS != 0 */
475472

476473
#if WASM_ENABLE_SHARED_MEMORY != 0

0 commit comments

Comments
 (0)