From c4f142e45c05983976ae4eadbde4135246e3b29f Mon Sep 17 00:00:00 2001 From: raiden00pl Date: Sun, 23 Mar 2025 08:44:16 +0100 Subject: [PATCH] syslog: add an option to completely disable syslog logic Add an option to completely disable syslog() and replace it with an empty functions. This option can be useful for small systems when we don't have any logging support, but compiler is not able to remove useless code. This way the final image also won't contain the strings that are present in syslog() calls when compiler optimization is enabled (for example from /boards where syslog is often used instead of debug macros). Signed-off-by: raiden00pl --- drivers/syslog/CMakeLists.txt | 2 +- drivers/syslog/Kconfig | 10 +++++ libs/libc/syslog/CMakeLists.txt | 4 ++ libs/libc/syslog/Make.defs | 4 ++ libs/libc/syslog/lib_syslog_none.c | 59 ++++++++++++++++++++++++++++++ 5 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 libs/libc/syslog/lib_syslog_none.c diff --git a/drivers/syslog/CMakeLists.txt b/drivers/syslog/CMakeLists.txt index b8e8804d338..74da0e05f2c 100644 --- a/drivers/syslog/CMakeLists.txt +++ b/drivers/syslog/CMakeLists.txt @@ -32,7 +32,7 @@ if(CONFIG_SYSLOG_INTBUFFER) list(APPEND SRCS syslog_intbuffer.c) endif() -if(NOT CONFIG_ARCH_SYSLOG) +if(CONFIG_SYSLOG) list(APPEND SRCS syslog_initialize.c) endif() diff --git a/drivers/syslog/Kconfig b/drivers/syslog/Kconfig index 0c51edfab58..85748d103c1 100644 --- a/drivers/syslog/Kconfig +++ b/drivers/syslog/Kconfig @@ -27,6 +27,16 @@ config SYSLOG_TO_SCHED_NOTE ---help--- If this option is enabled, syslog will be redirected to sched_note, It uses the sched_note_printf macro to replace syslog + +config SYSLOG_NONE + bool "Disable system logging" + ---help--- + System logging is disabled and all calls to syslog() are replaced with + an empty function. This option can be useful for small systems when we don't + have any logging support, so we can get rid of unused logic. + This way the final image also won't contain the strings that are present + in syslog(). + endchoice config SYSLOG_CHARDEV diff --git a/libs/libc/syslog/CMakeLists.txt b/libs/libc/syslog/CMakeLists.txt index 8837e596613..c450efa8338 100644 --- a/libs/libc/syslog/CMakeLists.txt +++ b/libs/libc/syslog/CMakeLists.txt @@ -23,3 +23,7 @@ if(CONFIG_SYSLOG) target_sources(c PRIVATE lib_setlogmask.c lib_syslog.c) endif() + +if(CONFIG_SYSLOG_NONE) + target_sources(c PRIVATE lib_syslog_none.c) +endif() diff --git a/libs/libc/syslog/Make.defs b/libs/libc/syslog/Make.defs index ffddf479761..e03a4be0da6 100644 --- a/libs/libc/syslog/Make.defs +++ b/libs/libc/syslog/Make.defs @@ -26,6 +26,10 @@ ifeq ($(CONFIG_SYSLOG),y) CSRCS += lib_syslog.c lib_setlogmask.c endif +ifeq ($(CONFIG_SYSLOG_NONE),y) +CSRCS += lib_syslog_none.c +endif + # Add the syslog directory to the build DEPPATH += --dep-path syslog diff --git a/libs/libc/syslog/lib_syslog_none.c b/libs/libc/syslog/lib_syslog_none.c new file mode 100644 index 00000000000..14765f16ab0 --- /dev/null +++ b/libs/libc/syslog/lib_syslog_none.c @@ -0,0 +1,59 @@ +/**************************************************************************** + * libs/libc/syslog/lib_syslog_none.c + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +#include + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: syslog/vsyslog + * + * Description: + * These are empty syslog function used when CONFIG_SYSLOG_NONE option + * is selected. This way we can completely remove the syslog logic and its + * associated strings from the image. + * + * Returned Value: + * None. + * + ****************************************************************************/ + +void syslog(int priority, FAR const IPTR char *fmt, ...) +{ + UNUSED(priority); + UNUSED(fmt); +} + +void vsyslog(int priority, FAR const IPTR char *fmt, va_list ap) +{ + UNUSED(priority); + UNUSED(fmt); + UNUSED(ap); +}