diff --git a/src/stm32f4/Makefile b/src/stm32f4/Makefile
index bfd8a6cf5..5e32d6476 100644
--- a/src/stm32f4/Makefile
+++ b/src/stm32f4/Makefile
@@ -16,8 +16,7 @@ CFLAGS_klipper.elf += -T $(OUT)stm32f4.ld --specs=nano.specs --specs=nosys.specs
 
 # Add source files
 src-y += stm32f4/main.c stm32f4/clock.c stm32f4/watchdog.c stm32f4/gpio.c
-src-y += generic/crc16_ccitt.c generic/alloc.c
-src-y += generic/armcm_irq.c generic/armcm_timer.c
+src-y += generic/crc16_ccitt.c generic/armcm_irq.c generic/armcm_timer.c
 src-y += ../lib/stm32f4/system_stm32f4xx.c
 src-$(CONFIG_HAVE_GPIO_ADC) += stm32f4/adc.c
 src-$(CONFIG_HAVE_GPIO_SPI) += stm32f4/spi.c
diff --git a/src/stm32f4/main.c b/src/stm32f4/main.c
index a64247709..b3069cc93 100644
--- a/src/stm32f4/main.c
+++ b/src/stm32f4/main.c
@@ -11,6 +11,22 @@
 
 DECL_CONSTANT_STR("MCU", CONFIG_MCU);
 
+// Return the start of memory available for dynamic allocations
+void *
+dynmem_start(void)
+{
+    extern uint32_t _ebss;
+    return &_ebss;
+}
+
+// Return the end of memory available for dynamic allocations
+void *
+dynmem_end(void)
+{
+    extern uint32_t _sstack;
+    return &_sstack;
+}
+
 void
 command_reset(uint32_t *args)
 {