summaryrefslogtreecommitdiff
path: root/py
diff options
context:
space:
mode:
Diffstat (limited to 'py')
-rw-r--r--py/nlrthumb.c8
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
}