diff --git a/esp8266/esp8266.ld b/esp8266/esp8266.ld
index 010a4cac608ccf8d458a91c86356f73f798bee85..5fb6f13796a1241297398f139a943cce0491f0c3 100644
--- a/esp8266/esp8266.ld
+++ b/esp8266/esp8266.ld
@@ -202,7 +202,8 @@ SECTIONS
         *(.entry.text)
         *(.init.literal)
         *(.init)
-        *(.literal .text .literal.* .text.* .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
+        *(.literal .text .literal.* .text.* .iram0.literal .iram0.text .iram0.text.*.literal .iram0.text.*)
+        *(.stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
         *(.fini.literal)
         *(.fini)
         *(.gnu.version)
diff --git a/esp8266/mpconfigport.h b/esp8266/mpconfigport.h
index 201057f1280d8a2efe84a8f900c7d7814dce2654..602b3e9c81fb1a66f648cbeb304b8c14fee0288a 100644
--- a/esp8266/mpconfigport.h
+++ b/esp8266/mpconfigport.h
@@ -182,4 +182,6 @@ extern const struct _mp_obj_module_t onewire_module;
 #define MICROPY_HW_MCU_NAME "ESP8266"
 #define MICROPY_PY_SYS_PLATFORM "esp8266"
 
+#define MP_FASTCODE(n) __attribute__((section(".iram0.text." #n))) n
+
 #define _assert(expr) ((expr) ? (void)0 : __assert_func(__FILE__, __LINE__, __func__, #expr))