Avoid gcc 7.2.1 compiler issues in nlr_push() (#506)

Avoid gcc 7.2.1 compiler issues in nlr_push()
This commit is contained in:
Dan Halbert 2018-01-02 16:41:34 -05:00 committed by Scott Shawcroft
parent 3be456629b
commit ce81c8dda9
2 changed files with 8 additions and 3 deletions

View File

@ -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 \

View File

@ -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
}