diff --git a/py/builtinimport.c b/py/builtinimport.c
index 795d9fd5e1ace2612bbe01095ce51061df5960fd..44ba4d5541567ca8b121aebf45cd5d35ad1f4b2c 100644
--- a/py/builtinimport.c
+++ b/py/builtinimport.c
@@ -29,7 +29,6 @@
 #include <stdio.h>
 #include <string.h>
 #include <assert.h>
-#include <alloca.h>
 
 #include "mpconfig.h"
 #include "nlr.h"
diff --git a/py/objfun.c b/py/objfun.c
index 77d57821b9bc7c70059476b045eb9abd59f50b00..5c085f883c905180ac1b0350ad394411635912cb 100644
--- a/py/objfun.c
+++ b/py/objfun.c
@@ -28,7 +28,6 @@
 #include <stdbool.h>
 #include <string.h>
 #include <assert.h>
-#include <alloca.h>
 
 #include "mpconfig.h"
 #include "nlr.h"
diff --git a/py/runtime.c b/py/runtime.c
index cdbf99d4a5d2438ff92d8f5b1e7bd40d6b79d56e..b1fd19499c03a03e71492345670284a509ce6b54 100644
--- a/py/runtime.c
+++ b/py/runtime.c
@@ -27,7 +27,6 @@
 #include <stdio.h>
 #include <string.h>
 #include <assert.h>
-#include <alloca.h>
 
 #include "mpconfig.h"
 #include "nlr.h"
diff --git a/py/vm.c b/py/vm.c
index d57fbf17e3bcf9a6b2a505b03bfb3ffc3dc9ce72..b24c85a4919b1312ff0a598c7c0704e8809cfbcd 100644
--- a/py/vm.c
+++ b/py/vm.c
@@ -28,7 +28,6 @@
 #include <stdio.h>
 #include <string.h>
 #include <assert.h>
-#include <alloca.h>
 
 #include "mpconfig.h"
 #include "nlr.h"
diff --git a/unix/modsocket.c b/unix/modsocket.c
index d6f732377d3a6ecb23fc84e1ba86946afca7b401..b1a34a39b8fcb88b0640e090f3d702e100b81200 100644
--- a/unix/modsocket.c
+++ b/unix/modsocket.c
@@ -37,7 +37,6 @@
 #include <arpa/inet.h>
 #include <netdb.h>
 #include <errno.h>
-#include <alloca.h>
 
 #include "mpconfig.h"
 #include "nlr.h"
diff --git a/unix/mpconfigport.h b/unix/mpconfigport.h
index ace7a419b4663b3441ae221ba733095b1812d87e..fe68b99341ff0437aca5410bf2da16bdeb9d98fb 100644
--- a/unix/mpconfigport.h
+++ b/unix/mpconfigport.h
@@ -98,3 +98,11 @@ extern const struct _mp_obj_fun_native_t mp_builtin_open_obj;
 #define MICROPY_PORT_BUILTINS \
     { MP_OBJ_NEW_QSTR(MP_QSTR_input), (mp_obj_t)&mp_builtin_input_obj }, \
     { MP_OBJ_NEW_QSTR(MP_QSTR_open), (mp_obj_t)&mp_builtin_open_obj },
+
+
+/* We need the correct header for alloca() */
+#ifdef __FreeBSD__
+#include <stdlib.h>
+#else
+#include <alloca.h>
+#endif
diff --git a/windows/mpconfigport.h b/windows/mpconfigport.h
index 94304e20d2a60167cf973d7b64565f706c62375d..831a218fbc4d6284b6fba5b2adbcdc94ca8e636e 100644
--- a/windows/mpconfigport.h
+++ b/windows/mpconfigport.h
@@ -114,7 +114,7 @@ void msec_sleep(double msec);
 
 #include <stddef.h> //for NULL
 #include <assert.h> //for assert
-
+#include <alloca.h> //for alloca()
 
 // Functions implemented in platform code