diff options
Diffstat (limited to 'py')
| -rw-r--r-- | py/nlrthumb.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/py/nlrthumb.c b/py/nlrthumb.c index 6e7d71766..0616e59b0 100644 --- a/py/nlrthumb.c +++ b/py/nlrthumb.c @@ -74,7 +74,13 @@ __attribute__((naked)) unsigned int nlr_push(nlr_buf_t *nlr) { #else "b nlr_push_tail \n" // do the rest in C #endif - ); + : // output operands + : "r" (nlr) // input operands + // Do not use r1, r2, r3 as temporary saving registers. + // gcc 7.2.1 started doing this, and r3 got clobbered in nlr_push_tail. + // See https://github.com/adafruit/circuitpython/issues/500 for details. + : "r1", "r2", "r3" // clobbers + ); return 0; // needed to silence compiler warning } |
