From 411144f69cef6a54a9fe2b6bee492e5a0d10de1b Mon Sep 17 00:00:00 2001 From: mikecarper Date: Wed, 28 Oct 2026 03:15:49 -0700 Subject: [PATCH] Keep local Companion control parsing in a cold function --- examples/companion_radio/MyMesh.cpp | 1 + scripts/nrf52_flash_trim.py | 10 ++++------ test/test_nrf52_flash_trim.py | 3 +-- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/examples/companion_radio/MyMesh.cpp b/examples/companion_radio/MyMesh.cpp index 6f34b2d85..e2334cff7 100644 --- a/examples/companion_radio/MyMesh.cpp +++ b/examples/companion_radio/MyMesh.cpp @@ -4078,6 +4078,7 @@ bool MyMesh::handleTxRoutingCommand(const char* command, char* reply, size_t rep return true; } +__attribute__((noinline, cold)) bool MyMesh::handleLocalControlCommand(const char* command, char* reply, size_t reply_size) { if (!command || !reply || reply_size == 0) return false; diff --git a/scripts/nrf52_flash_trim.py b/scripts/nrf52_flash_trim.py index 0433ccd20..104243055 100644 --- a/scripts/nrf52_flash_trim.py +++ b/scripts/nrf52_flash_trim.py @@ -259,7 +259,7 @@ def compile_packed_help(build_env, node): return build_env.Object(node, **flags) -def _compile_shared_reply_copies(build_env, node, relative_path, extra_flags=()): +def _compile_shared_reply_copies(build_env, node, relative_path): source = Path(node.srcnode().get_abspath()).resolve() expected = Path(build_env.subst("$PROJECT_DIR/" + relative_path)).resolve() if source != expected: @@ -267,9 +267,8 @@ def _compile_shared_reply_copies(build_env, node, relative_path, extra_flags=()) # GCC otherwise expands many constant strcpy replies into repeated stores. # Use the same libc function and strings, with no parser or output changes. flags = list(build_env.get("CCFLAGS", ())) - for flag in ("-fno-builtin-strcpy", *extra_flags): - if flag not in flags: - flags.append(flag) + if "-fno-builtin-strcpy" not in flags: + flags.append("-fno-builtin-strcpy") return build_env.Object(node, CCFLAGS=flags) @@ -279,8 +278,7 @@ def compile_shared_cli_replies(build_env, node): def compile_shared_companion_replies(build_env, node): - return _compile_shared_reply_copies(build_env, node, "examples/companion_radio/MyMesh.cpp", - ("-fno-builtin-strncpy",)) + return _compile_shared_reply_copies(build_env, node, "examples/companion_radio/MyMesh.cpp") def companion_shared_replies_policy(platform, mcu, env_name, src_filter, diff --git a/test/test_nrf52_flash_trim.py b/test/test_nrf52_flash_trim.py index 55a3ebf89..74dad3fbc 100644 --- a/test/test_nrf52_flash_trim.py +++ b/test/test_nrf52_flash_trim.py @@ -127,8 +127,7 @@ class Nrf52FlashTrimTest(unittest.TestCase): companion = Node(ROOT / "examples/companion_radio/MyMesh.cpp") result, flags = TRIM.compile_shared_companion_replies(env, companion) self.assertIs(result, companion) - self.assertEqual(flags["CCFLAGS"], ["-Os", "-flto", "-fno-builtin-strcpy", - "-fno-builtin-strncpy"]) + self.assertEqual(flags["CCFLAGS"], ["-Os", "-flto", "-fno-builtin-strcpy"]) self.assertEqual(env["CCFLAGS"], ["-Os", "-flto"]) for path in ("examples/simple_repeater/MyMesh.cpp", "test/fixtures/MyMesh.cpp", "src/helpers/CommonCLI.cpp", "src/helpers/RadioProfileCLI.cpp"):