summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Halbert <halbert@halwitz.org>2018-01-02 16:41:34 -0500
committerScott Shawcroft <scott@tannewt.org>2018-01-02 13:41:34 -0800
commitce81c8dda9686d3cd78d9c5383b6982c148ac7ec (patch)
tree4538a243fd60241e753716b1739cd3ce843df4b5
parent3be456629bc737b4d8bfaa27d8ea5e2fd5c86451 (diff)
Avoid gcc 7.2.1 compiler issues in nlr_push() (#506)
Avoid gcc 7.2.1 compiler issues in nlr_push()
-rw-r--r--ports/atmel-samd/Makefile3
-rw-r--r--py/nlrthumb.c8
2 files changed, 8 insertions, 3 deletions
diff --git a/ports/atmel-samd/Makefile b/ports/atmel-samd/Makefile
index 486df28c2..7a842b9c6 100644
--- a/ports/atmel-samd/Makefile
+++ b/ports/atmel-samd/Makefile
@@ -92,6 +92,7 @@ endif
ifeq ($(DEBUG), 1)
# Turn on Python modules useful for debugging (e.g. uheap, ustack).
CFLAGS += -ggdb
+ CFLAGS += -flto
ifeq ($(CHIP_FAMILY), samd21)
CFLAGS += -DENABLE_MICRO_TRACE_BUFFER
endif
@@ -122,8 +123,6 @@ ifeq ($(CHIP_FAMILY), samd51)
CFLAGS += \
-mthumb \
-mabi=aapcs-linux \
- -mlong-calls \
- -mtune=cortex-m4 \
-mcpu=cortex-m4 \
-mfloat-abi=hard \
-mfpu=fpv4-sp-d16 \
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
}