interpreters/python: fix patch to set _PyRuntime attribute

This commit also adds the check for the `__NuttX__` macro to the
patch file that allows setting an attribute to the `_PyRuntime`
structure. The `__NuttX__` macro is guaranteed to be present when
building any application for NuttX.
This commit is contained in:
Tiago Medicci
2025-02-12 15:46:20 -03:00
committed by Lup Yuen Lee
parent 7f424c3e8d
commit db8542d2b1

View File

@@ -1,7 +1,7 @@
From d1e903f516849c535455904b3c3f8a33665c1a88 Mon Sep 17 00:00:00 2001 From 79b6142580bad5235588faf38c0a22c7280a2d1b Mon Sep 17 00:00:00 2001
From: Ivan Grokhotkov <ivan@espressif.com> From: Ivan Grokhotkov <ivan@espressif.com>
Date: Wed, 23 Oct 2024 16:52:52 +0200 Date: Wed, 23 Oct 2024 16:52:52 +0200
Subject: [PATCH 12/12] hack: place _PyRuntime structure into PSRAM bss region, Subject: [PATCH 12/13] hack: place _PyRuntime structure into PSRAM bss region,
initialize later initialize later
_PyRuntime occupies around 100kB of RAM in .data region, making it _PyRuntime occupies around 100kB of RAM in .data region, making it
@@ -22,14 +22,14 @@ Co-authored-by: Tiago Medicci Serrano <tiago.medicci@espressif.com>
1 file changed, 11 insertions(+) 1 file changed, 11 insertions(+)
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index 1701a1cd217..2a8e544f0ac 100644 index 1701a1cd217..93aa808bc03 100644
--- a/Python/pylifecycle.c --- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c +++ b/Python/pylifecycle.c
@@ -102,12 +102,23 @@ __attribute__(( @@ -102,12 +102,23 @@ __attribute__((
_PyRuntimeState _PyRuntime _PyRuntimeState _PyRuntime
#if defined(__linux__) && (defined(__GNUC__) || defined(__clang__)) #if defined(__linux__) && (defined(__GNUC__) || defined(__clang__))
__attribute__ ((section (".PyRuntime"))) __attribute__ ((section (".PyRuntime")))
+#elif defined(ESP_PLATFORM) +#elif defined(ESP_PLATFORM) || defined(__NuttX__)
+__attribute__ ((section (".PyRuntime"))) +__attribute__ ((section (".PyRuntime")))
#endif #endif
= _PyRuntimeState_INIT(_PyRuntime, _Py_Debug_Cookie); = _PyRuntimeState_INIT(_PyRuntime, _Py_Debug_Cookie);
@@ -38,7 +38,7 @@ index 1701a1cd217..2a8e544f0ac 100644
static int runtime_initialized = 0; static int runtime_initialized = 0;
+void _PyRuntime_Early_Init(void) { +void _PyRuntime_Early_Init(void) {
+#if defined(ESP_PLATFORM) +#if defined(ESP_PLATFORM) || defined(__NuttX__)
+ // Normally, _PyRuntime is in .data and is initialized by the C runtime. + // Normally, _PyRuntime is in .data and is initialized by the C runtime.
+ // This function allows us to place it into external RAM .bss section + // This function allows us to place it into external RAM .bss section
+ // and initialize it manually, saving some internal RAM. + // and initialize it manually, saving some internal RAM.
@@ -50,5 +50,5 @@ index 1701a1cd217..2a8e544f0ac 100644
_PyRuntime_Initialize(void) _PyRuntime_Initialize(void)
{ {
-- --
2.47.1 2.48.1