mirror of
https://github.com/apache/nuttx-apps.git
synced 2025-10-14 10:48:10 +08:00

NuttX implements a function with the same name which may end up being included whenever `CONFIG_MM_KERNEL_HEAP` is set. To avoid it, insert a prefix to it on Python's implementation. Please note that the other patches had their metadata updated too.
55 lines
1.9 KiB
Diff
55 lines
1.9 KiB
Diff
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
|
|
|