From ee86de1f1a22c45548bc39916fcd2b72dd26ebca Mon Sep 17 00:00:00 2001 From: Damien George Date: Mon, 10 Apr 2017 16:02:56 +1000 Subject: py: Make sure that static emg-exc-buffer is aligned to size of mp_obj_t. This buffer is used to allocate objects temporarily, and such objects require that their underlying memory be correctly aligned for their data type. Aligning for mp_obj_t should be sufficient for emergency exceptions, but in general the memory buffer should aligned to the maximum alignment of the machine (eg on a 32-bit machine with mp_obj_t being 4 bytes, a double may not be correctly aligned). This patch fixes a bug for certain nan-boxing builds, where mp_obj_t is 8 bytes and must be aligned to 8 bytes (even though the machine is 32 bit). --- py/mpstate.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'py/mpstate.h') diff --git a/py/mpstate.h b/py/mpstate.h index 0134dd8e8..2b8f29a6a 100644 --- a/py/mpstate.h +++ b/py/mpstate.h @@ -120,8 +120,8 @@ typedef struct _mp_state_vm_t { // memory for exception arguments if we can't allocate RAM #if MICROPY_ENABLE_EMERGENCY_EXCEPTION_BUF #if MICROPY_EMERGENCY_EXCEPTION_BUF_SIZE > 0 - // statically allocated buf - byte mp_emergency_exception_buf[MICROPY_EMERGENCY_EXCEPTION_BUF_SIZE]; + // statically allocated buf (needs to be aligned to mp_obj_t) + mp_obj_t mp_emergency_exception_buf[MICROPY_EMERGENCY_EXCEPTION_BUF_SIZE / sizeof(mp_obj_t)]; #else // dynamically allocated buf byte *mp_emergency_exception_buf; -- cgit v1.2.3