aboutsummaryrefslogtreecommitdiff
path: root/py/mpstate.h
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2017-04-10 16:02:56 +1000
committerDamien George <damien.p.george@gmail.com>2017-04-10 16:02:56 +1000
commitee86de1f1a22c45548bc39916fcd2b72dd26ebca (patch)
tree716766c5ab42e6079058262c9d5b36a2b7b1ea6e /py/mpstate.h
parentb87432b8fb8332548be11b63c9139065ce565f91 (diff)
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).
Diffstat (limited to 'py/mpstate.h')
-rw-r--r--py/mpstate.h4
1 files changed, 2 insertions, 2 deletions
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;