From fd249c805587e4e78b462e2dd8f27793aa044a84 Mon Sep 17 00:00:00 2001 From: Maxim Prokhorov Date: Tue, 30 Aug 2022 01:37:02 +0300 Subject: [PATCH] pio: also hide raw putc function in postmortem updates scripts to be a post action rename redefined symbols to stubs --- code/espurna/dummy_ets_printf.c | 4 ---- code/espurna/output_stubs.c | 19 +++++++++++++++++++ code/scripts/espurna_utils/__init__.py | 4 ++-- code/scripts/pio_main.py | 12 ++++++------ 4 files changed, 27 insertions(+), 12 deletions(-) delete mode 100644 code/espurna/dummy_ets_printf.c create mode 100644 code/espurna/output_stubs.c diff --git a/code/espurna/dummy_ets_printf.c b/code/espurna/dummy_ets_printf.c deleted file mode 100644 index 6554e4b5..00000000 --- a/code/espurna/dummy_ets_printf.c +++ /dev/null @@ -1,4 +0,0 @@ -// special dummy printf to disable Serial using some boards -int dummy_ets_printf(const char* format __attribute__((unused)), ...) { - return 0; -} diff --git a/code/espurna/output_stubs.c b/code/espurna/output_stubs.c new file mode 100644 index 00000000..c0b6f3ec --- /dev/null +++ b/code/espurna/output_stubs.c @@ -0,0 +1,19 @@ +// isn't normally used or exported, needs something external to link them in +// (for us, $OBJCOPY w/ redefine-sym on the postmortem file is the main target) + +// note that functions actually return `int`, but it is a totally valid C +// to return whatever type we want instead (e.g. `void` aka nothing) + +#include + +void __stub_printf(const char* format, ...) IRAM_ATTR; +void __stub_printf(const char* format __attribute__((unused)), ...) { +} + +void __stub_printf_P(const char* format, ...) IRAM_ATTR; +void __stub_printf_P(const char* format __attribute__((unused)), ...) { +} + +void __stub_putc(char ch) IRAM_ATTR; +void __stub_putc(char ch __attribute__((unused))) { +} diff --git a/code/scripts/espurna_utils/__init__.py b/code/scripts/espurna_utils/__init__.py index 9e86aafc..64c281e1 100644 --- a/code/scripts/espurna_utils/__init__.py +++ b/code/scripts/espurna_utils/__init__.py @@ -27,7 +27,7 @@ from .build import ( ) from .checks import check_env, check_cppcheck, check_printsize from .flags import app_inject_flags -from .hooks import remove_float_support, dummy_ets_printf +from .hooks import remove_float_support, disable_postmortem_output from .ldscripts import ldscripts_inject_libpath from .version import app_inject_version, app_full_version_for_env @@ -42,7 +42,7 @@ __all__ = [ "check_cppcheck", "check_env", "check_printsize", - "dummy_ets_printf", + "disable_postmortem_output", "firmware_destination", "ldscripts_inject_libpath", "remove_float_support", diff --git a/code/scripts/pio_main.py b/code/scripts/pio_main.py index 545fdae4..0f38d711 100644 --- a/code/scripts/pio_main.py +++ b/code/scripts/pio_main.py @@ -10,12 +10,14 @@ # Run this script every time building an env AFTER platform-specific code is loaded import os +import itertools + from espurna_utils import ( app_add_target_build_and_copy, app_inject_flags, app_inject_version, check_printsize, - dummy_ets_printf, + disable_postmortem_output, ldscripts_inject_libpath, remove_float_support, ) @@ -43,13 +45,11 @@ ldscripts_inject_libpath(env) # two-step update hint when using 1MB boards if not CI: - env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", check_printsize) + env.AddPostAction("checkprogsize", check_printsize) # disable postmortem printing to the uart. another one is in eboot, but this is what causes the most harm -if "DISABLE_POSTMORTEM_STACKDUMP" in env["CPPFLAGS"]: - env.AddPostAction( - "$BUILD_DIR/FrameworkArduino/core_esp8266_postmortem.cpp.o", dummy_ets_printf - ) +if "DISABLE_POSTMORTEM_STACKDUMP" in itertools.chain(env["CPPFLAGS"], projenv["CPPFLAGS"]): + disable_postmortem_output(env) # override static version flag from the espurna/config/version.h # either completely, or change the version / revision / suffix part separately