diff --git a/devices/ble_hci/common-hal/_bleio/PacketBuffer.c b/devices/ble_hci/common-hal/_bleio/PacketBuffer.c index b690909029..24295b025e 100644 --- a/devices/ble_hci/common-hal/_bleio/PacketBuffer.c +++ b/devices/ble_hci/common-hal/_bleio/PacketBuffer.c @@ -101,7 +101,7 @@ void common_hal_bleio_packet_buffer_construct( } if (incoming) { - if (!ringbuf_alloc(&self->ringbuf, buffer_size * (sizeof(uint16_t) + max_packet_size), false)) { + if (!ringbuf_alloc(&self->ringbuf, buffer_size * (sizeof(uint16_t) + max_packet_size))) { mp_raise_ValueError(translate("Buffer too large and unable to allocate")); } } @@ -110,8 +110,8 @@ void common_hal_bleio_packet_buffer_construct( self->packet_queued = false; self->pending_index = 0; self->pending_size = 0; - self->outgoing[0] = m_malloc(max_packet_size, false); - self->outgoing[1] = m_malloc(max_packet_size, false); + self->outgoing[0] = m_malloc(max_packet_size); + self->outgoing[1] = m_malloc(max_packet_size); } else { self->outgoing[0] = NULL; self->outgoing[1] = NULL; diff --git a/extmod/moduselect.c b/extmod/moduselect.c index 98d9042ec8..b68d97bbe5 100644 --- a/extmod/moduselect.c +++ b/extmod/moduselect.c @@ -347,8 +347,6 @@ STATIC const mp_obj_type_t mp_type_poll = { { &mp_type_type }, .flags = MP_TYPE_FLAG_EXTENDED, .name = MP_QSTR_poll, - .getiter = mp_identity_getiter, - .iternext = poll_iternext, .locals_dict = (void *)&poll_locals_dict, MP_TYPE_EXTENDED_FIELDS( .getiter = mp_identity_getiter, diff --git a/mpy-cross/mpy-cross.mk b/mpy-cross/mpy-cross.mk index 452e2f3c1f..9461cf5748 100644 --- a/mpy-cross/mpy-cross.mk +++ b/mpy-cross/mpy-cross.mk @@ -78,6 +78,6 @@ endif OBJ = $(PY_CORE_O) OBJ += $(addprefix $(BUILD)/, $(SRC_C:.c=.o)) -$(BUILD)/supervisor/shared/translate/translate.o: $(HEADER_BUILD)/qstrdefs.generated.h $(HEADER_BUILD)/compression.generated.h +$(BUILD)/supervisor/shared/translate/translate.o: $(HEADER_BUILD)/qstrdefs.generated.h $(HEADER_BUILD)/compressed_translations.generated.h include $(TOP)/py/mkrules.mk diff --git a/ports/atmel-samd/Makefile b/ports/atmel-samd/Makefile index 4595998953..d732e7a9b2 100644 --- a/ports/atmel-samd/Makefile +++ b/ports/atmel-samd/Makefile @@ -171,7 +171,10 @@ endif # we know is ok. It's not clear how to give the compiler the info it needs so # disable the checks for now. # See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99578 +GCCVERSIONGTEQ11 := $(shell expr `$(CC) -dumpversion` \>= 11) +ifeq ($(GCC_VERSION_GTEQ_11),1) CFLAGS += -Wno-stringop-overread -Wno-stringop-overflow +endif LDFLAGS = $(CFLAGS) -nostartfiles -Wl,-nostdlib -Wl,-T,$(GENERATED_LD_FILE) -Wl,-Map=$@.map -Wl,-cref -Wl,-gc-sections -specs=nano.specs @@ -350,10 +353,12 @@ OBJ += $(addprefix $(BUILD)/, $(SRC_S:.s=.o)) OBJ += $(addprefix $(BUILD)/, $(SRC_MOD:.c=.o)) SRC_QSTR += $(HEADER_BUILD)/sdiodata.h +OBJ_EXTRA_ORDER_DEPS += $(HEADER_BUILD)/sioddata.h $(HEADER_BUILD)/sdiodata.h: tools/mksdiodata.py | $(HEADER_BUILD) $(Q)$(PYTHON) $< > $@ SRC_QSTR += $(HEADER_BUILD)/candata.h +OBJ_EXTRA_ORDER_DEPS += $(HEADER_BUILD)/candata.h $(HEADER_BUILD)/candata.h: tools/mkcandata.py | $(HEADER_BUILD) $(Q)$(PYTHON) $< > $@ diff --git a/ports/atmel-samd/common-hal/pulseio/PulseIn.c b/ports/atmel-samd/common-hal/pulseio/PulseIn.c index 8bf889bed3..cc2c1f4fe0 100644 --- a/ports/atmel-samd/common-hal/pulseio/PulseIn.c +++ b/ports/atmel-samd/common-hal/pulseio/PulseIn.c @@ -159,7 +159,7 @@ void common_hal_pulseio_pulsein_construct(pulseio_pulsein_obj_t *self, mp_raise_RuntimeError(translate("EXTINT channel already in use")); } - self->buffer = (uint16_t *)m_malloc(maxlen * sizeof(uint16_t), false); + self->buffer = (uint16_t *)m_malloc(maxlen * sizeof(uint16_t)); if (self->buffer == NULL) { m_malloc_fail(maxlen * sizeof(uint16_t)); } diff --git a/ports/unix/Makefile b/ports/unix/Makefile index ac3e2ef11d..eee9f23634 100644 --- a/ports/unix/Makefile +++ b/ports/unix/Makefile @@ -366,3 +366,5 @@ install: $(PROG) uninstall: -rm $(BINDIR)/$(PROG) + +$(BUILD)/supervisor/shared/translate/translate.o: $(HEADER_BUILD)/qstrdefs.generated.h $(HEADER_BUILD)/compressed_translations.generated.h diff --git a/py/circuitpy_defns.mk b/py/circuitpy_defns.mk index 106dd74945..4acbafef40 100644 --- a/py/circuitpy_defns.mk +++ b/py/circuitpy_defns.mk @@ -713,7 +713,7 @@ SRC_MOD += $(addprefix lib/mp3/src/, \ subband.c \ trigtabs.c \ ) -$(BUILD)/lib/mp3/src/buffers.o: CFLAGS += -include "py/misc.h" -D'MPDEC_ALLOCATOR(x)=m_malloc(x,0)' -D'MPDEC_FREE(x)=m_free(x)' +$(BUILD)/lib/mp3/src/buffers.o: CFLAGS += -include "py/misc.h" -D'MPDEC_ALLOCATOR(x)=m_malloc(x)' -D'MPDEC_FREE(x)=m_free(x)' endif ifeq ($(CIRCUITPY_RGBMATRIX),1) SRC_MOD += $(addprefix lib/protomatter/src/, \ diff --git a/py/makeqstrdata.py b/py/makeqstrdata.py index d16bb0d09a..f6f0d8abf1 100644 --- a/py/makeqstrdata.py +++ b/py/makeqstrdata.py @@ -249,7 +249,6 @@ static_qstr_list = [ "zip", ] - # this must match the equivalent function in qstr.c def compute_hash(qstr, bytes_hash): hash = 5381 @@ -351,13 +350,12 @@ def parse_input_headers(infiles): return qcfgs, qstrs, i18ns -def escape_bytes(qstr): +def escape_bytes(qstr, qbytes): if all(32 <= ord(c) <= 126 and c != "\\" and c != '"' for c in qstr): # qstr is all printable ASCII so render it as-is (for easier debugging) return qstr else: # qstr contains non-printable codes so render entire thing as hex pairs - qbytes = bytes_cons(qstr, "utf8") return "".join(("\\x%02x" % b) for b in qbytes) @@ -368,7 +366,7 @@ def make_bytes(cfg_bytes_len, cfg_bytes_hash, qstr): if qlen >= (1 << (8 * cfg_bytes_len)): print("qstr is too long:", qstr) assert False - qdata = escape_bytes(qstr) + qdata = escape_bytes(qstr, qbytes) return '%d, %d, "%s"' % (qhash, qlen, qdata) @@ -402,18 +400,10 @@ def print_qstr_data(qcfgs, qstrs, i18ns): print("// {} bytes worth of qstr".format(total_qstr_size)) -def print_qstr_enums(qstrs): - # print out the starter of the generated C header file - print("// This file was automatically generated by makeqstrdata.py") - print("") - - # add NULL qstr with no hash or data - print("QENUM(MP_QSTRnull)") - - # go through each qstr and print it out - for order, ident, qstr in sorted(qstrs.values(), key=lambda x: x[0]): - print("QENUM(MP_QSTR_%s)" % (ident,)) +def do_work(infiles): + qcfgs, qstrs, i18ns = parse_input_headers(infiles) + print_qstr_data(qcfgs, qstrs, i18ns) if __name__ == "__main__": import argparse @@ -424,19 +414,7 @@ if __name__ == "__main__": parser.add_argument( "infiles", metavar="N", type=str, nargs="+", help="an integer for the accumulator" ) - parser.add_argument( - "--output_type", - default="enums", - type=str, - help="output definitions", - choices=("enums", "data"), - ) args = parser.parse_args() - qcfgs, qstrs, i18ns = parse_input_headers(args.infiles) - if args.output_type == "data": - i18ns = sorted(i18ns) - print_qstr_data(qcfgs, qstrs, i18ns) - else: - print_qstr_enums(qstrs) + do_work(args.infiles) diff --git a/py/mkenv.mk b/py/mkenv.mk index e2cdb2ddb6..f74e557040 100644 --- a/py/mkenv.mk +++ b/py/mkenv.mk @@ -20,7 +20,7 @@ ifeq ("$(origin V)", "command line") BUILD_VERBOSE=$(V) endif ifndef BUILD_VERBOSE -$(info Use make V=1, make V=2 or set BUILD_VERBOSE similarly in your environment to increase build verbosity.) +$(info Use make V={1,2,3} or set BUILD_VERBOSE similarly in your environment to increase build verbosity.) BUILD_VERBOSE = 0 endif ifeq ($(BUILD_VERBOSE),0) @@ -30,10 +30,19 @@ else ifeq ($(BUILD_VERBOSE),1) Q = @ STEPECHO = @echo else +# BUILD_VERBOSE not 0 or 1 Q = STEPECHO = @echo endif +ifeq ($(BUILD_VERBOSE),3) +# This clever shell redefinition will print out the makefile line that is causing an action. +# Note that -j can cause the order to be confusing. +# https://www.cmcrossroads.com/article/tracing-rule-execution-gnu-make +OLD_SHELL := $(SHELL) +SHELL = $(warning BUILDING $@)$(OLD_SHELL) +endif + # default settings; can be overridden in main Makefile PY_SRC ?= $(TOP)/py diff --git a/py/mkrules.mk b/py/mkrules.mk index 74ab8dd78a..8d78d2e28b 100644 --- a/py/mkrules.mk +++ b/py/mkrules.mk @@ -75,7 +75,7 @@ $(Q)$(CXX) $(CXXFLAGS) -c -MD -o $@ $< $(RM) -f $(@:.o=.d) endef -vpath %.c . $(TOP) $(USER_C_MODULES) +vpath %.c . $(TOP) $(USER_C_MODULES) $(DEVICES_MODULES) $(BUILD)/%.o: %.c $(call compile_c) @@ -83,17 +83,6 @@ vpath %.cpp . $(TOP) $(USER_C_MODULES) $(BUILD)/%.o: %.cpp $(call compile_cxx) -QSTR_GEN_EXTRA_CFLAGS += -DNO_QSTR -x c - -# frozen.c and frozen_mpy.c are created in $(BUILD), so use our rule -# for those as well. -vpath %.c . $(BUILD) -$(BUILD)/%.o: %.c - $(call compile_c) - -QSTR_GEN_EXTRA_CFLAGS += -I$(BUILD)/tmp - -vpath %.c . $(TOP) $(USER_C_MODULES) $(DEVICES_MODULES) $(BUILD)/%.pp: %.c $(ECHO) "PreProcess $<" $(Q)$(CPP) $(CFLAGS) -Wp,-C,-dD,-dI -o $@ $< @@ -124,7 +113,7 @@ $(HEADER_BUILD)/qstr.split: $(HEADER_BUILD)/qstr.i.last $(Q)$(TOUCH) $@ $(QSTR_DEFS_COLLECTED): $(HEADER_BUILD)/qstr.split - $(STEPECHO) "GEN $@" + $(ECHO) "GEN $@" $(Q)$(PYTHON) $(PY_SRC)/makeqstrdefs.py cat qstr _ $(HEADER_BUILD)/qstr $@ # Module definitions via MP_REGISTER_MODULE. @@ -245,7 +234,4 @@ print-def: @$(CC) -E -Wp,-dM __empty__.c @$(RM) -f __empty__.c -tags: - ctags -e -R $(TOP) - -include $(OBJ:.o=.P) diff --git a/py/moduerrno.c b/py/moduerrno.c index bbfca93875..a132474e4c 100644 --- a/py/moduerrno.c +++ b/py/moduerrno.c @@ -32,8 +32,6 @@ #include "supervisor/shared/translate/translate.h" -#if MICROPY_PY_UERRNO - // This list can be defined per port in mpconfigport.h to tailor it to a // specific port's needs. If it's not defined then we provide a default. #ifndef MICROPY_PY_UERRNO_LIST @@ -63,6 +61,8 @@ #endif +#if MICROPY_PY_UERRNO + #if MICROPY_PY_UERRNO_ERRORCODE STATIC const mp_rom_map_elem_t errorcode_table[] = { #define X(e) { MP_ROM_INT(MP_##e), MP_ROM_QSTR(MP_QSTR_##e) }, @@ -129,3 +129,52 @@ qstr mp_errno_to_str(mp_obj_t errno_val) { } #endif // MICROPY_PY_UERRNO + + +// For commonly encountered errors, return human readable strings, otherwise try errno name +const char *mp_common_errno_to_str(mp_obj_t errno_val, char *buf, size_t len) { + if (!mp_obj_is_small_int(errno_val)) { + return NULL; + } + + const compressed_string_t *desc = NULL; + switch (MP_OBJ_SMALL_INT_VALUE(errno_val)) { + case EPERM: + desc = MP_ERROR_TEXT("Operation not permitted"); + break; + case ENOENT: + desc = MP_ERROR_TEXT("No such file/directory"); + break; + case EIO: + desc = MP_ERROR_TEXT("Input/output error"); + break; + case EACCES: + desc = MP_ERROR_TEXT("Permission denied"); + break; + case EEXIST: + desc = MP_ERROR_TEXT("File exists"); + break; + case ENODEV: + desc = MP_ERROR_TEXT("No such device"); + break; + case EINVAL: + desc = MP_ERROR_TEXT("Invalid argument"); + break; + case ENOSPC: + desc = MP_ERROR_TEXT("No space left on device"); + break; + case EROFS: + desc = MP_ERROR_TEXT("Read-only filesystem"); + break; + } + if (desc != NULL && decompress_length(desc) <= len) { + decompress(desc, buf); + return buf; + } + + const char *msg = ""; + #if MICROPY_PY_UERRNO + msg = qstr_str(mp_errno_to_str(errno_val)); + #endif + return msg[0] != '\0' ? msg : NULL; +} diff --git a/py/mpconfig.h b/py/mpconfig.h index f38a4fc647..f890f675e1 100644 --- a/py/mpconfig.h +++ b/py/mpconfig.h @@ -26,8 +26,10 @@ #ifndef MICROPY_INCLUDED_PY_MPCONFIG_H #define MICROPY_INCLUDED_PY_MPCONFIG_H -// In CircuitPython, this is defined in genhdr/mpversion.h -#if !CIRCUITPY +// In CircuitPython, version info is in genhdr/mpversion.h. +#if CIRCUITPY +#include "genhdr/mpversion.h" +#else // Current version of MicroPython #define MICROPY_VERSION_MAJOR 1 #define MICROPY_VERSION_MINOR 19 diff --git a/py/mpstate.h b/py/mpstate.h index 04c3530736..6871e2b40a 100644 --- a/py/mpstate.h +++ b/py/mpstate.h @@ -36,6 +36,12 @@ #include "py/objlist.h" #include "py/objexcept.h" +// #if CIRCUITPY +// #error CIRCUITPY is TRUE in mpstate.h. +// #else +// #error CIRCUITPY is **FALSE** in mpstate.h +// #endif + // This file contains structures defining the state of the MicroPython // memory system, runtime and virtual machine. The state is a global // variable, but in the future it is hoped that the state can become local. diff --git a/py/py.mk b/py/py.mk index 44f34aad89..32d0f734a1 100644 --- a/py/py.mk +++ b/py/py.mk @@ -223,10 +223,7 @@ endif # Sources that may contain qstrings SRC_QSTR_IGNORE = py/nlr% -SRC_QSTR_EMITNATIVE = py/emitn% SRC_QSTR += $(SRC_MOD) $(filter-out $(SRC_QSTR_IGNORE),$(PY_CORE_O_BASENAME:.o=.c)) $(PY_EXTMOD_O_BASENAME:.o=.c) -# Sources that only hold QSTRs after pre-processing. -SRC_QSTR_PREPROCESSOR = $(addprefix $(TOP)/, $(filter $(SRC_QSTR_EMITNATIVE),$(PY_CORE_O_BASENAME:.o=.c))) # Anything that depends on FORCE will be considered out-of-date FORCE: @@ -240,41 +237,38 @@ $(HEADER_BUILD)/mpversion.h: FORCE | $(HEADER_BUILD) # overall config, so they need to be caught MPCONFIGPORT_MK = $(wildcard mpconfigport.mk) -$(HEADER_BUILD)/$(TRANSLATION).mo: $(TOP)/locale/$(TRANSLATION).po | $(HEADER_BUILD) - $(Q)$(PYTHON) $(TOP)/tools/msgfmt.py -o $@ $^ - -$(HEADER_BUILD)/qstrdefs.preprocessed.h: $(PY_QSTR_DEFS) $(QSTR_DEFS) $(QSTR_DEFS_COLLECTED) mpconfigport.h $(MPCONFIGPORT_MK) $(PY_SRC)/mpconfig.h | $(HEADER_BUILD) - $(STEPECHO) "GEN $@" - $(Q)cat $(PY_QSTR_DEFS) $(QSTR_DEFS) $(QSTR_DEFS_COLLECTED) | $(SED) 's/^Q(.*)/"&"/' | $(CPP) $(CFLAGS) - | $(SED) 's/^"\(Q(.*)\)"/\1/' > $@ - # qstr data -$(HEADER_BUILD)/qstrdefs.enum.h: $(PY_SRC)/makeqstrdata.py $(HEADER_BUILD)/qstrdefs.preprocessed.h - $(STEPECHO) "GEN $@" - $(Q)$(PYTHON) $(PY_SRC)/makeqstrdata.py --output_type=enums $(HEADER_BUILD)/qstrdefs.preprocessed.h > $@ - # Adding an order only dependency on $(HEADER_BUILD) causes $(HEADER_BUILD) to get # created before we run the script to generate the .h # Note: we need to protect the qstr names from the preprocessor, so we wrap # the lines in "" and then unwrap after the preprocessor is finished. -$(HEADER_BUILD)/qstrdefs.generated.h: $(PY_SRC)/makeqstrdata.py $(HEADER_BUILD)/qstrdefs.preprocessed.h - $(STEPECHO) "GEN $@" - $(Q)$(PYTHON) $(PY_SRC)/makeqstrdata.py --output_type=data $(HEADER_BUILD)/qstrdefs.preprocessed.h > $@ +# See more information about this process in docs/develop/qstr.rst. +$(HEADER_BUILD)/qstrdefs.generated.h: $(PY_QSTR_DEFS) $(QSTR_DEFS) $(QSTR_DEFS_COLLECTED) $(PY_SRC)/makeqstrdata.py mpconfigport.h $(MPCONFIGPORT_MK) $(PY_SRC)/mpconfig.h | $(HEADER_BUILD) + $(ECHO) "GEN $@" + $(Q)$(CAT) $(PY_QSTR_DEFS) $(QSTR_DEFS) $(QSTR_DEFS_COLLECTED) | $(SED) 's/^Q(.*)/"&"/' | $(CPP) $(CFLAGS) - | $(SED) 's/^\"\(Q(.*)\)\"/\1/' > $(HEADER_BUILD)/qstrdefs.preprocessed.h + $(Q)$(PYTHON) $(PY_SRC)/makeqstrdata.py $(HEADER_BUILD)/qstrdefs.preprocessed.h > $@ -# Is generated as a side-effect of building compression.generated.h +$(HEADER_BUILD)/compressed.data.h: $(HEADER_BUILD)/compressed.collected + $(ECHO) "GEN $@" + $(Q)$(PYTHON) $(PY_SRC)/makecompresseddata.py $< > $@ + +// CIRCUITPY: for translations +$(HEADER_BUILD)/$(TRANSLATION).mo: $(TOP)/locale/$(TRANSLATION).po | $(HEADER_BUILD) + $(Q)$(PYTHON) $(TOP)/tools/msgfmt.py -o $@ $^ + +# translations-*.c is generated as a side-effect of building compression_translated.generated.h # Specifying both in a single rule actually causes the rule to be run twice! # This alternative makes it run just once. -$(PY_BUILD)/translations-$(TRANSLATION).c: $(HEADER_BUILD)/compression.generated.h +$(PY_BUILD)/translations-$(TRANSLATION).c: $(HEADER_BUILD)/compressed_translations.generated.h @true -$(HEADER_BUILD)/compression.generated.h: $(PY_SRC)/maketranslationdata.py $(HEADER_BUILD)/$(TRANSLATION).mo $(HEADER_BUILD)/qstrdefs.preprocessed.h +$(HEADER_BUILD)/compressed_translations.generated.h: $(PY_SRC)/maketranslationdata.py $(HEADER_BUILD)/$(TRANSLATION).mo $(HEADER_BUILD)/qstrdefs.generated.h $(STEPECHO) "GEN $@" $(Q)mkdir -p $(PY_BUILD) - $(Q)$(PYTHON) $(PY_SRC)/maketranslationdata.py --compression_filename $(HEADER_BUILD)/compression.generated.h --translation $(HEADER_BUILD)/$(TRANSLATION).mo --translation_filename $(PY_BUILD)/translations-$(TRANSLATION).c $(HEADER_BUILD)/qstrdefs.preprocessed.h + $(Q)$(PYTHON) $(PY_SRC)/maketranslationdata.py --compression_filename $(HEADER_BUILD)/compressed_translations.generated.h --translation $(HEADER_BUILD)/$(TRANSLATION).mo --translation_filename $(PY_BUILD)/translations-$(TRANSLATION).c $(HEADER_BUILD)/qstrdefs.preprocessed.h PY_CORE_O += $(PY_BUILD)/translations-$(TRANSLATION).o -$(PY_BUILD)/qstr.o: $(HEADER_BUILD)/qstrdefs.generated.h - # build a list of registered modules for py/objmodule.c. $(HEADER_BUILD)/moduledefs.h: $(HEADER_BUILD)/moduledefs.collected @$(ECHO) "GEN $@" @@ -289,6 +283,7 @@ $(BUILD)/shared/libc/string0.o: CFLAGS += $(CFLAGS_BUILTIN) # that the function preludes are of a minimal and predictable form. $(PY_BUILD)/nlr%.o: CFLAGS += -Os +# CIRCUITPY: separate SUPEROPT for gc.o and vm.o # optimising gc for speed; 5ms down to 4ms on pybv2 ifndef SUPEROPT_GC SUPEROPT_GC = 1 diff --git a/shared-bindings/_bleio/Characteristic.c b/shared-bindings/_bleio/Characteristic.c index faad911c80..1f752577c1 100644 --- a/shared-bindings/_bleio/Characteristic.c +++ b/shared-bindings/_bleio/Characteristic.c @@ -142,7 +142,7 @@ STATIC mp_obj_t bleio_characteristic_add_to_service(size_t n_args, const mp_obj_ } bleio_characteristic_obj_t *characteristic = - m_new_obj(bleio_characteristic_obj_t, &bleio_characteristic_type); + mp_obj_malloc(bleio_characteristic_obj_t, &bleio_characteristic_type); // Range checking on max_length arg is done by the common_hal layer, because // it may vary depending on underlying BLE implementation. diff --git a/shared-bindings/audiomixer/Mixer.c b/shared-bindings/audiomixer/Mixer.c index adfc447589..6ddc5c3641 100644 --- a/shared-bindings/audiomixer/Mixer.c +++ b/shared-bindings/audiomixer/Mixer.c @@ -104,7 +104,7 @@ STATIC mp_obj_t audiomixer_mixer_make_new(const mp_obj_type_t *type, size_t n_ar mp_raise_ValueError(translate("bits_per_sample must be 8 or 16")); } audiomixer_mixer_obj_t *self = - mp_obj_malloc_var(audiomixer_mixer_obj_t, mp_obj_t, voice_count, &audiomixer_mixer_type; + mp_obj_malloc_var(audiomixer_mixer_obj_t, mp_obj_t, voice_count, &audiomixer_mixer_type); common_hal_audiomixer_mixer_construct(self, voice_count, args[ARG_buffer_size].u_int, bits_per_sample, args[ARG_samples_signed].u_bool, channel_count, sample_rate); for (int v = 0; v < voice_count; v++) { diff --git a/shared-bindings/countio/__init__.c b/shared-bindings/countio/__init__.c index 9646e0879e..c8327c9a57 100644 --- a/shared-bindings/countio/__init__.c +++ b/shared-bindings/countio/__init__.c @@ -36,4 +36,3 @@ const mp_obj_module_t countio_module = { }; MP_REGISTER_MODULE(MP_QSTR_countio, countio_module); -p diff --git a/shared-bindings/displayio/EPaperDisplay.c b/shared-bindings/displayio/EPaperDisplay.c index f4f97ff971..cca8c919cc 100644 --- a/shared-bindings/displayio/EPaperDisplay.c +++ b/shared-bindings/displayio/EPaperDisplay.c @@ -206,7 +206,7 @@ STATIC mp_obj_t displayio_epaperdisplay_make_new(const mp_obj_type_t *type, size size_t refresh_buf_len = 0; mp_int_t refresh_command; if (mp_obj_get_int_maybe(refresh_obj, &refresh_command)) { - uint8_t *command_buf = m_malloc(3, true); + uint8_t *command_buf = m_malloc(3); command_buf[0] = refresh_command; command_buf[1] = 0; command_buf[2] = 0; diff --git a/shared-bindings/i2ctarget/I2CTarget.c b/shared-bindings/i2ctarget/I2CTarget.c index 4346362632..1bc672032d 100644 --- a/shared-bindings/i2ctarget/I2CTarget.c +++ b/shared-bindings/i2ctarget/I2CTarget.c @@ -41,7 +41,7 @@ STATIC mp_obj_t mp_obj_new_i2ctarget_i2c_target_request(i2ctarget_i2c_target_obj_t *target, uint8_t address, bool is_read, bool is_restart) { i2ctarget_i2c_target_request_obj_t *self = - mp_obj_malloc(i2ctarget_i2c_target_request_obj_t, &i2ctarget_i2c_target_request_type) + mp_obj_malloc(i2ctarget_i2c_target_request_obj_t, &i2ctarget_i2c_target_request_type); self->target = target; self->address = address; self->is_read = is_read; diff --git a/shared-bindings/synthio/__init__.c b/shared-bindings/synthio/__init__.c index f9d9de86c7..34e03419fa 100644 --- a/shared-bindings/synthio/__init__.c +++ b/shared-bindings/synthio/__init__.c @@ -244,7 +244,7 @@ STATIC mp_obj_t synthio_from_file(size_t n_args, const mp_obj_t *pos_args, mp_ma } uint32_t track_size = (chunk_header[4] << 24) | (chunk_header[5] << 16) | (chunk_header[6] << 8) | chunk_header[7]; - uint8_t *buffer = m_malloc(track_size, false); + uint8_t *buffer = m_malloc(track_size); if (f_read(&file->fp, buffer, track_size, &bytes_read) != FR_OK) { mp_raise_OSError(MP_EIO); } diff --git a/shared-module/_bleio/ScanResults.c b/shared-module/_bleio/ScanResults.c index ad7841cfa9..cf4357929b 100644 --- a/shared-module/_bleio/ScanResults.c +++ b/shared-module/_bleio/ScanResults.c @@ -36,7 +36,7 @@ bleio_scanresults_obj_t *shared_module_bleio_new_scanresults(size_t buffer_size, uint8_t *prefixes, size_t prefixes_len, mp_int_t minimum_rssi) { bleio_scanresults_obj_t *self = mp_obj_malloc(bleio_scanresults_obj_t, &bleio_scanresults_type); - ringbuf_alloc(&self->buf, buffer_size, false); + ringbuf_alloc(&self->buf, buffer_size); self->prefixes = prefixes; self->prefix_length = prefixes_len; self->minimum_rssi = minimum_rssi; diff --git a/shared-module/adafruit_pixelbuf/PixelBuf.c b/shared-module/adafruit_pixelbuf/PixelBuf.c index ca8f1c05b0..9c12dd68de 100644 --- a/shared-module/adafruit_pixelbuf/PixelBuf.c +++ b/shared-module/adafruit_pixelbuf/PixelBuf.c @@ -123,7 +123,7 @@ void common_hal_adafruit_pixelbuf_pixelbuf_set_brightness(mp_obj_t self_in, mp_f return; } else { if (self->pre_brightness_buffer == NULL) { - self->pre_brightness_buffer = m_malloc(pixel_len, false); + self->pre_brightness_buffer = m_malloc(pixel_len); memcpy(self->pre_brightness_buffer, self->post_brightness_buffer, pixel_len); } for (size_t i = 0; i < pixel_len; i++) { diff --git a/shared-module/atexit/__init__.c b/shared-module/atexit/__init__.c index 56271bbab8..02749a45a1 100644 --- a/shared-module/atexit/__init__.c +++ b/shared-module/atexit/__init__.c @@ -50,7 +50,7 @@ void shared_module_atexit_register(mp_obj_t *func, size_t n_args, const mp_obj_t .n_pos = 0, .n_kw = 0, .func = func, - .args = (n_args + n_kw_args) ? m_malloc((n_args + (n_kw_args * 2)) * sizeof(mp_obj_t), false) : NULL + .args = (n_args + n_kw_args) ? m_malloc((n_args + (n_kw_args * 2)) * sizeof(mp_obj_t)) : NULL }; for (; cb.n_pos < n_args; cb.n_pos++) { cb.args[cb.n_pos] = pos_args[cb.n_pos]; diff --git a/shared-module/audiocore/WaveFile.c b/shared-module/audiocore/WaveFile.c index 1b87532551..590148f5c3 100644 --- a/shared-module/audiocore/WaveFile.c +++ b/shared-module/audiocore/WaveFile.c @@ -118,13 +118,13 @@ void common_hal_audioio_wavefile_construct(audioio_wavefile_obj_t *self, self->second_buffer = buffer + self->len; } else { self->len = 256; - self->buffer = m_malloc(self->len, false); + self->buffer = m_malloc(self->len); if (self->buffer == NULL) { common_hal_audioio_wavefile_deinit(self); m_malloc_fail(self->len); } - self->second_buffer = m_malloc(self->len, false); + self->second_buffer = m_malloc(self->len); if (self->second_buffer == NULL) { common_hal_audioio_wavefile_deinit(self); m_malloc_fail(self->len); diff --git a/shared-module/audiomixer/Mixer.c b/shared-module/audiomixer/Mixer.c index 397a837133..5a0338cb4a 100644 --- a/shared-module/audiomixer/Mixer.c +++ b/shared-module/audiomixer/Mixer.c @@ -47,13 +47,13 @@ void common_hal_audiomixer_mixer_construct(audiomixer_mixer_obj_t *self, uint32_t sample_rate) { self->len = buffer_size / 2 / sizeof(uint32_t) * sizeof(uint32_t); - self->first_buffer = m_malloc(self->len, false); + self->first_buffer = m_malloc(self->len); if (self->first_buffer == NULL) { common_hal_audiomixer_mixer_deinit(self); m_malloc_fail(self->len); } - self->second_buffer = m_malloc(self->len, false); + self->second_buffer = m_malloc(self->len); if (self->second_buffer == NULL) { common_hal_audiomixer_mixer_deinit(self); m_malloc_fail(self->len); diff --git a/shared-module/audiomp3/MP3Decoder.c b/shared-module/audiomp3/MP3Decoder.c index 506ed5eff2..21385670a2 100644 --- a/shared-module/audiomp3/MP3Decoder.c +++ b/shared-module/audiomp3/MP3Decoder.c @@ -190,7 +190,7 @@ void common_hal_audiomp3_mp3file_construct(audiomp3_mp3file_obj_t *self, self->inbuf_length = 2048; self->inbuf_offset = self->inbuf_length; - self->inbuf = m_malloc(self->inbuf_length, false); + self->inbuf = m_malloc(self->inbuf_length); if (self->inbuf == NULL) { common_hal_audiomp3_mp3file_deinit(self); m_malloc_fail(self->inbuf_length); @@ -210,13 +210,13 @@ void common_hal_audiomp3_mp3file_construct(audiomp3_mp3file_obj_t *self, self->buffers[0] = (int16_t *)(void *)buffer; self->buffers[1] = (int16_t *)(void *)(buffer + MAX_BUFFER_LEN); } else { - self->buffers[0] = m_malloc(MAX_BUFFER_LEN, false); + self->buffers[0] = m_malloc(MAX_BUFFER_LEN); if (self->buffers[0] == NULL) { common_hal_audiomp3_mp3file_deinit(self); m_malloc_fail(MAX_BUFFER_LEN); } - self->buffers[1] = m_malloc(MAX_BUFFER_LEN, false); + self->buffers[1] = m_malloc(MAX_BUFFER_LEN); if (self->buffers[1] == NULL) { common_hal_audiomp3_mp3file_deinit(self); m_malloc_fail(MAX_BUFFER_LEN); diff --git a/shared-module/displayio/Bitmap.c b/shared-module/displayio/Bitmap.c index c9212f6a85..6c2072f3fd 100644 --- a/shared-module/displayio/Bitmap.c +++ b/shared-module/displayio/Bitmap.c @@ -51,7 +51,7 @@ void common_hal_displayio_bitmap_construct_from_buffer(displayio_bitmap_t *self, self->stride = stride(width, bits_per_value); self->data_alloc = false; if (!data) { - data = m_malloc(self->stride * height * sizeof(uint32_t), false); + data = m_malloc(self->stride * height * sizeof(uint32_t)); self->data_alloc = true; } self->data = data; diff --git a/shared-module/displayio/OnDiskBitmap.c b/shared-module/displayio/OnDiskBitmap.c index 98795a28ab..789b84787a 100644 --- a/shared-module/displayio/OnDiskBitmap.c +++ b/shared-module/displayio/OnDiskBitmap.c @@ -68,7 +68,7 @@ void common_hal_displayio_ondiskbitmap_construct(displayio_ondiskbitmap_t *self, self->height = read_word(bmp_header, 11); displayio_colorconverter_t *colorconverter = - mp_obj_malloc(displayio_colorconverter_t, &displayio_colorconverter_type; + mp_obj_malloc(displayio_colorconverter_t, &displayio_colorconverter_type); common_hal_displayio_colorconverter_construct(colorconverter, false, DISPLAYIO_COLORSPACE_RGB888); self->colorconverter = colorconverter; @@ -95,7 +95,7 @@ void common_hal_displayio_ondiskbitmap_construct(displayio_ondiskbitmap_t *self, uint16_t palette_size = number_of_colors * sizeof(uint32_t); uint16_t palette_offset = 0xe + header_size; - uint32_t *palette_data = m_malloc(palette_size, false); + uint32_t *palette_data = m_malloc(palette_size); f_rewind(&self->file->fp); f_lseek(&self->file->fp, palette_offset); diff --git a/shared-module/displayio/Palette.c b/shared-module/displayio/Palette.c index c61b9ebc82..8cd2da8973 100644 --- a/shared-module/displayio/Palette.c +++ b/shared-module/displayio/Palette.c @@ -30,7 +30,7 @@ void common_hal_displayio_palette_construct(displayio_palette_t *self, uint16_t color_count, bool dither) { self->color_count = color_count; - self->colors = (_displayio_color_t *)m_malloc(color_count * sizeof(_displayio_color_t), false); + self->colors = (_displayio_color_t *)m_malloc(color_count * sizeof(_displayio_color_t)); self->dither = dither; } diff --git a/shared-module/displayio/Shape.c b/shared-module/displayio/Shape.c index 1d6db5bd69..25c5d1527a 100644 --- a/shared-module/displayio/Shape.c +++ b/shared-module/displayio/Shape.c @@ -49,7 +49,7 @@ void common_hal_displayio_shape_construct(displayio_shape_t *self, uint32_t widt } self->half_height = height; - self->data = m_malloc(height * sizeof(uint32_t), false); + self->data = m_malloc(height * sizeof(uint32_t)); for (uint16_t i = 0; i < height; i++) { self->data[2 * i] = 0; diff --git a/shared-module/displayio/TileGrid.c b/shared-module/displayio/TileGrid.c index 723aa41682..0a000ca180 100644 --- a/shared-module/displayio/TileGrid.c +++ b/shared-module/displayio/TileGrid.c @@ -48,7 +48,7 @@ void common_hal_displayio_tilegrid_construct(displayio_tilegrid_t *self, mp_obj_ } self->inline_tiles = true; } else { - self->tiles = (uint8_t *)m_malloc(total_tiles, false); + self->tiles = (uint8_t *)m_malloc(total_tiles); for (uint32_t i = 0; i < total_tiles; i++) { self->tiles[i] = default_tile; } diff --git a/shared-module/gifio/GifWriter.c b/shared-module/gifio/GifWriter.c index c993a87d0a..9167de75a0 100644 --- a/shared-module/gifio/GifWriter.c +++ b/shared-module/gifio/GifWriter.c @@ -90,7 +90,7 @@ void shared_module_gifio_gifwriter_construct(gifio_gifwriter_t *self, mp_obj_t * size_t nblocks = (width * height + 125) / 126; self->size = nblocks * 128 + 4; - self->data = gc_alloc(self->size, 0, false); + self->data = m_malloc(self->size); self->cur = 0; self->error = 0; diff --git a/shared-module/keypad/EventQueue.c b/shared-module/keypad/EventQueue.c index d229eef264..36d7d9dff5 100644 --- a/shared-module/keypad/EventQueue.c +++ b/shared-module/keypad/EventQueue.c @@ -35,7 +35,7 @@ void common_hal_keypad_eventqueue_construct(keypad_eventqueue_obj_t *self, size_t max_events) { // Event queue is 16-bit values. - ringbuf_alloc(&self->encoded_events, max_events * (sizeof(uint16_t) + sizeof(mp_obj_t)), false); + ringbuf_alloc(&self->encoded_events, max_events * (sizeof(uint16_t) + sizeof(mp_obj_t))); self->overflowed = false; } diff --git a/shared-module/keypad/KeyMatrix.c b/shared-module/keypad/KeyMatrix.c index bab9fb3095..df5c55b3f7 100644 --- a/shared-module/keypad/KeyMatrix.c +++ b/shared-module/keypad/KeyMatrix.c @@ -72,8 +72,8 @@ void common_hal_keypad_keymatrix_construct(keypad_keymatrix_obj_t *self, mp_uint } self->column_digitalinouts = mp_obj_new_tuple(num_column_pins, column_dios); - self->currently_pressed = (bool *)gc_alloc(sizeof(bool) * num_row_pins * num_column_pins, false, false); - self->previously_pressed = (bool *)gc_alloc(sizeof(bool) * num_row_pins * num_column_pins, false, false); + self->currently_pressed = (bool *)m_malloc(sizeof(bool) * num_row_pins * num_column_pins); + self->previously_pressed = (bool *)m_malloc(sizeof(bool) * num_row_pins * num_column_pins); self->columns_to_anodes = columns_to_anodes; self->funcs = &keymatrix_funcs; diff --git a/shared-module/keypad/Keys.c b/shared-module/keypad/Keys.c index aea7418b01..22ad7cc7fb 100644 --- a/shared-module/keypad/Keys.c +++ b/shared-module/keypad/Keys.c @@ -58,8 +58,8 @@ void common_hal_keypad_keys_construct(keypad_keys_obj_t *self, mp_uint_t num_pin } self->digitalinouts = mp_obj_new_tuple(num_pins, dios); - self->currently_pressed = (bool *)gc_alloc(sizeof(bool) * num_pins, false, false); - self->previously_pressed = (bool *)gc_alloc(sizeof(bool) * num_pins, false, false); + self->currently_pressed = (bool *)m_malloc(sizeof(bool) * num_pins); + self->previously_pressed = (bool *)m_malloc(sizeof(bool) * num_pins); self->value_when_pressed = value_when_pressed; self->funcs = &keys_funcs; diff --git a/shared-module/keypad/__init__.c b/shared-module/keypad/__init__.c index 755dbb4f2d..68cde559fb 100644 --- a/shared-module/keypad/__init__.c +++ b/shared-module/keypad/__init__.c @@ -101,8 +101,8 @@ void keypad_deregister_scanner(keypad_scanner_obj_t *scanner) { void keypad_construct_common(keypad_scanner_obj_t *self, mp_float_t interval, size_t max_events) { size_t key_count = common_hal_keypad_generic_get_key_count(self); - self->currently_pressed = (bool *)gc_alloc(sizeof(bool) * key_count, false, false); - self->previously_pressed = (bool *)gc_alloc(sizeof(bool) * key_count, false, false); + self->currently_pressed = (bool *)m_malloc(sizeof(bool) * key_count); + self->previously_pressed = (bool *)m_malloc(sizeof(bool) * key_count); self->interval_ticks = (mp_uint_t)(interval * 1024); // interval * 1000 * (1024/1000) diff --git a/shared-module/qrio/quirc_alloc.h b/shared-module/qrio/quirc_alloc.h index b01fac5bfb..7521fc087d 100644 --- a/shared-module/qrio/quirc_alloc.h +++ b/shared-module/qrio/quirc_alloc.h @@ -7,8 +7,8 @@ #error Requires MICROPY_GC_CONSERVATIVE_CLEAR #endif -#define QUIRC_MALLOC(x) gc_alloc((x), 0, false) -#define QUIRC_CALLOC(x,y) gc_alloc((x) * (y), 0, false) +#define QUIRC_MALLOC(x) m_malloc((x)) +#define QUIRC_CALLOC(x,y) m_malloc((x) * (y)) #define QUIRC_FREE(x) gc_free((x)) #define QUIRC_SMALL_STACK (1) diff --git a/shared-module/synthio/__init__.c b/shared-module/synthio/__init__.c index 7c8e627404..3d034db88a 100644 --- a/shared-module/synthio/__init__.c +++ b/shared-module/synthio/__init__.c @@ -438,11 +438,11 @@ void synthio_synth_init(synthio_synth_t *synth, uint32_t sample_rate, int channe synthio_synth_parse_filter(&synth->filter_bufinfo, filter_obj); mp_arg_validate_int_range(channel_count, 1, 2, MP_QSTR_channel_count); synth->buffer_length = SYNTHIO_MAX_DUR * SYNTHIO_BYTES_PER_SAMPLE * channel_count; - synth->buffers[0] = m_malloc(synth->buffer_length, false); - synth->buffers[1] = m_malloc(synth->buffer_length, false); + synth->buffers[0] = m_malloc(synth->buffer_length); + synth->buffers[1] = m_malloc(synth->buffer_length); if (synth->filter_bufinfo.len) { synth->filter_buffer_length = (synth->filter_bufinfo.len + SYNTHIO_MAX_DUR) * channel_count * sizeof(int32_t); - synth->filter_buffer = m_malloc(synth->filter_buffer_length, false); + synth->filter_buffer = m_malloc(synth->filter_buffer_length); } synth->channel_count = channel_count; synth->other_channel = -1; diff --git a/supervisor/shared/external_flash/external_flash.c b/supervisor/shared/external_flash/external_flash.c index f72518ac50..8d6938713d 100644 --- a/supervisor/shared/external_flash/external_flash.c +++ b/supervisor/shared/external_flash/external_flash.c @@ -371,7 +371,7 @@ static bool allocate_ram_cache(void) { return false; } - MP_STATE_VM(flash_ram_cache) = m_malloc_maybe(blocks_per_sector * pages_per_block * sizeof(uint32_t), false); + MP_STATE_VM(flash_ram_cache) = m_malloc_maybe(blocks_per_sector * pages_per_block * sizeof(uint32_t)); if (MP_STATE_VM(flash_ram_cache) == NULL) { return false; } @@ -382,7 +382,7 @@ static bool allocate_ram_cache(void) { bool success = true; for (i = 0; i < blocks_per_sector; i++) { for (j = 0; j < pages_per_block; j++) { - uint8_t *page_cache = m_malloc_maybe(SPI_FLASH_PAGE_SIZE, false); + uint8_t *page_cache = m_malloc_maybe(SPI_FLASH_PAGE_SIZE); if (page_cache == NULL) { success = false; break; diff --git a/supervisor/shared/translate/translate.c b/supervisor/shared/translate/translate.c index b07aa584ca..fced90f058 100644 --- a/supervisor/shared/translate/translate.c +++ b/supervisor/shared/translate/translate.c @@ -31,7 +31,7 @@ #include #ifndef NO_QSTR -#include "genhdr/compression.generated.h" +#include "genhdr/compressed_translations.generated.h" #endif #include "py/misc.h" diff --git a/supervisor/supervisor.mk b/supervisor/supervisor.mk index c461c5353f..50722bb1a2 100644 --- a/supervisor/supervisor.mk +++ b/supervisor/supervisor.mk @@ -85,6 +85,7 @@ else SRC_SUPERVISOR += supervisor/qspi_flash.c supervisor/shared/external_flash/qspi_flash.c endif +OBJ_EXTRA_ORDER_DEPS += $(HEADER_BUILD)/devices.h $(HEADER_BUILD)/devices.h : ../../supervisor/shared/external_flash/devices.h.jinja ../../tools/gen_nvm_devices.py | $(HEADER_BUILD) $(STEPECHO) "GEN $@" $(Q)install -d $(BUILD)/genhdr @@ -224,7 +225,7 @@ endif USB_HIGHSPEED ?= 0 CFLAGS += -DUSB_HIGHSPEED=$(USB_HIGHSPEED) -$(BUILD)/supervisor/shared/translate/translate.o: $(HEADER_BUILD)/qstrdefs.generated.h $(HEADER_BUILD)/compression.generated.h +$(BUILD)/supervisor/shared/translate/translate.o: $(HEADER_BUILD)/qstrdefs.generated.h $(HEADER_BUILD)/compressed_translations.generated.h CIRCUITPY_DISPLAY_FONT ?= "../../tools/fonts/ter-u12n.bdf"