diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py
index 931754e..6f62bb3 100644
--- a/Lib/importlib/_bootstrap.py
+++ b/Lib/importlib/_bootstrap.py
@@ -745,7 +745,7 @@
     @classmethod
     def exec_module(self, module):
         """Exec a built-in module"""
-        _call_with_frames_removed(_imp.exec_dynamic, module)
+        _call_with_frames_removed(_imp.exec_builtin, module)
 
     @classmethod
     @_requires_builtin
diff --git a/Misc/NEWS b/Misc/NEWS
index 804f43b..422eaa6 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,9 @@
 Core and Builtins
 -----------------
 
+- Issue #24769: Interpreter now starts properly when dynamic loading
+  is disabled.  Patch by Petr Viktorin.
+
 - Issue #21167: NAN operations are now handled correctly when python is
   compiled with ICC even if -fp-model strict is not specified.
 
@@ -20,6 +23,7 @@
 
 - Issue #24839: platform._syscmd_ver raises DeprecationWarning
 
+
 What's New in Python 3.5.0 release candidate 1?
 ===============================================
 
diff --git a/Python/clinic/import.c.h b/Python/clinic/import.c.h
index 53b5b17..9ed62f4 100644
--- a/Python/clinic/import.c.h
+++ b/Python/clinic/import.c.h
@@ -318,6 +318,33 @@
 
 #endif /* defined(HAVE_DYNAMIC_LOADING) */
 
+PyDoc_STRVAR(_imp_exec_builtin__doc__,
+"exec_builtin($module, mod, /)\n"
+"--\n"
+"\n"
+"Initialize an extension module.");
+
+#define _IMP_EXEC_BUILTIN_METHODDEF    \
+    {"exec_builtin", (PyCFunction)_imp_exec_builtin, METH_O, _imp_exec_builtin__doc__},
+
+static int
+_imp_exec_builtin_impl(PyModuleDef *module, PyObject *mod);
+
+static PyObject *
+_imp_exec_builtin(PyModuleDef *module, PyObject *mod)
+{
+    PyObject *return_value = NULL;
+    int _return_value;
+
+    _return_value = _imp_exec_builtin_impl(module, mod);
+    if ((_return_value == -1) && PyErr_Occurred())
+        goto exit;
+    return_value = PyLong_FromLong((long)_return_value);
+
+exit:
+    return return_value;
+}
+
 #ifndef _IMP_CREATE_DYNAMIC_METHODDEF
     #define _IMP_CREATE_DYNAMIC_METHODDEF
 #endif /* !defined(_IMP_CREATE_DYNAMIC_METHODDEF) */
@@ -325,4 +352,4 @@
 #ifndef _IMP_EXEC_DYNAMIC_METHODDEF
     #define _IMP_EXEC_DYNAMIC_METHODDEF
 #endif /* !defined(_IMP_EXEC_DYNAMIC_METHODDEF) */
-/*[clinic end generated code: output=0f1059766dd58f88 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=c38749cebcadbc3b input=a9049054013a1b77]*/
diff --git a/Python/import.c b/Python/import.c
index 44aae80..7fd4930 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -1943,6 +1943,34 @@
     return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
 }
 
+/* Common implementation for _imp.exec_dynamic and _imp.exec_builtin */
+static int
+exec_builtin_or_dynamic(PyObject *mod) {
+    PyModuleDef *def;
+    void *state;
+
+    if (!PyModule_Check(mod)) {
+        return 0;
+    }
+
+    def = PyModule_GetDef(mod);
+    if (def == NULL) {
+        if (PyErr_Occurred()) {
+            return -1;
+        }
+        return 0;
+    }
+    state = PyModule_GetState(mod);
+    if (PyErr_Occurred()) {
+        return -1;
+    }
+    if (state) {
+        /* Already initialized; skip reload */
+        return 0;
+    }
+    return PyModule_ExecDef(mod, def);
+}
+
 #ifdef HAVE_DYNAMIC_LOADING
 
 /*[clinic input]
@@ -2014,35 +2042,29 @@
 _imp_exec_dynamic_impl(PyModuleDef *module, PyObject *mod)
 /*[clinic end generated code: output=4b84f1301b22d4bd input=9fdbfcb250280d3a]*/
 {
-    PyModuleDef *def;
-    void *state;
-
-    if (!PyModule_Check(mod)) {
-        return 0;
-    }
-
-    def = PyModule_GetDef(mod);
-    if (def == NULL) {
-        if (PyErr_Occurred()) {
-            return -1;
-        }
-        return 0;
-    }
-    state = PyModule_GetState(mod);
-    if (PyErr_Occurred()) {
-        return -1;
-    }
-    if (state) {
-        /* Already initialized; skip reload */
-        return 0;
-    }
-    return PyModule_ExecDef(mod, def);
+    return exec_builtin_or_dynamic(mod);
 }
 
 
 #endif /* HAVE_DYNAMIC_LOADING */
 
 /*[clinic input]
+_imp.exec_builtin -> int
+
+    mod: object
+    /
+
+Initialize a built-in module.
+[clinic start generated code]*/
+
+static int
+_imp_exec_builtin_impl(PyModuleDef *module, PyObject *mod)
+/*[clinic end generated code: output=215e99876a27e284 input=77ebec0c2a10ecca]*/
+{
+    return exec_builtin_or_dynamic(mod);
+}
+
+/*[clinic input]
 dump buffer
 [clinic start generated code]*/
 /*[clinic end generated code: output=da39a3ee5e6b4b0d input=524ce2e021e4eba6]*/
@@ -2064,6 +2086,7 @@
     _IMP_IS_FROZEN_METHODDEF
     _IMP_CREATE_DYNAMIC_METHODDEF
     _IMP_EXEC_DYNAMIC_METHODDEF
+    _IMP_EXEC_BUILTIN_METHODDEF
     _IMP__FIX_CO_FILENAME_METHODDEF
     {NULL, NULL}  /* sentinel */
 };
diff --git a/Python/importlib.h b/Python/importlib.h
index d5d3406..a4daf62 100644
--- a/Python/importlib.h
+++ b/Python/importlib.h
@@ -1304,7 +1304,7 @@
     0,1,100,1,0,83,41,2,122,22,69,120,101,99,32,97,
     32,98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,
     78,41,3,114,65,0,0,0,114,57,0,0,0,90,12,101,
-    120,101,99,95,100,121,110,97,109,105,99,41,2,114,19,0,
+    120,101,99,95,98,117,105,108,116,105,110,41,2,114,19,0,
     0,0,114,89,0,0,0,114,10,0,0,0,114,10,0,0,
     0,114,11,0,0,0,114,139,0,0,0,233,2,0,0,115,
     2,0,0,0,0,3,122,27,66,117,105,108,116,105,110,73,
