| From 70538c2ec3e59df6ce1e767e53908a9cad361f05 Mon Sep 17 00:00:00 2001 |
| From: Ivan Grokhotkov <ivan@espressif.com> |
| Date: Wed, 23 Oct 2024 16:52:52 +0200 |
| Subject: [PATCH 12/14] hack: place _PyRuntime structure into PSRAM bss region, |
| initialize later |
| |
| _PyRuntime occupies around 100kB of RAM in .data region, making it |
| hard to fit the interpreter into the available static RAM. |
| This patch moves it into PSRAM using section attribute. Normally |
| we shouldn't need this as we can specify placements in ldfragments, |
| however in this specific case I couldn't get it to work. |
| Since the structure is now in .bss, add a function which will assign |
| it the initial value. |
| |
| The proper fix might be to support .data segment on PSRAM in IDF, |
| as well as to fix whatever ldgen issue prevents this variable from |
| being moved to PSRAM. |
| |
| Co-authored-by: Tiago Medicci Serrano <tiago.medicci@espressif.com> |
| --- |
| Python/pylifecycle.c | 11 +++++++++++ |
| 1 file changed, 11 insertions(+) |
| |
| diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c |
| index 1701a1cd217..93aa808bc03 100644 |
| --- a/Python/pylifecycle.c |
| +++ b/Python/pylifecycle.c |
| @@ -102,12 +102,23 @@ __attribute__(( |
| _PyRuntimeState _PyRuntime |
| #if defined(__linux__) && (defined(__GNUC__) || defined(__clang__)) |
| __attribute__ ((section (".PyRuntime"))) |
| +#elif defined(ESP_PLATFORM) || defined(__NuttX__) |
| +__attribute__ ((section (".PyRuntime"))) |
| #endif |
| = _PyRuntimeState_INIT(_PyRuntime, _Py_Debug_Cookie); |
| _Py_COMP_DIAG_POP |
| |
| static int runtime_initialized = 0; |
| |
| +void _PyRuntime_Early_Init(void) { |
| +#if defined(ESP_PLATFORM) || defined(__NuttX__) |
| + // Normally, _PyRuntime is in .data and is initialized by the C runtime. |
| + // This function allows us to place it into external RAM .bss section |
| + // and initialize it manually, saving some internal RAM. |
| + _PyRuntime = (struct pyruntimestate) _PyRuntimeState_INIT(_PyRuntime, _Py_Debug_Cookie); |
| +#endif |
| +} |
| + |
| PyStatus |
| _PyRuntime_Initialize(void) |
| { |
| -- |
| 2.50.0 |
| |