lib: os: make snprintk fns generally available
The intention of disabling CONFIG_PRINTK is that all invocations of it will compile to nothing, saving a lot of runtime overhead and footprint since all the format strings are completely dropped; instances of printk() and related functions are no-ops. However, some subsystems need snprintk() for string processing, since the snprintf() implementations in even minimal C library are too costly in text footprint or stack usage for some applications. This processing is required for the application to even function. This patch continues to have disabling CONFIG_PRINTK to cause the non snprintk functions to become no-ops, but now we always compile the necessary bits for snprintk(), relying on gc-sections to discard them if unused. z_vprintk() is now unconditionally defined in the header since it is not tied to any particular output sink and is intended for users who know exactly what they are doing (it's in zephyr private scope). Relates to: #21564 Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
This commit is contained in:
parent
17299f0734
commit
d76ae46c0c
4 changed files with 17 additions and 31 deletions
|
@ -47,13 +47,6 @@ extern "C" {
|
|||
#ifdef CONFIG_PRINTK
|
||||
extern __printf_like(1, 2) void printk(const char *fmt, ...);
|
||||
extern __printf_like(1, 0) void vprintk(const char *fmt, va_list ap);
|
||||
extern __printf_like(3, 4) int snprintk(char *str, size_t size,
|
||||
const char *fmt, ...);
|
||||
extern __printf_like(3, 0) int vsnprintk(char *str, size_t size,
|
||||
const char *fmt, va_list ap);
|
||||
|
||||
extern __printf_like(3, 0) void z_vprintk(int (*out)(int f, void *c), void *ctx,
|
||||
const char *fmt, va_list ap);
|
||||
#else
|
||||
static inline __printf_like(1, 2) void printk(const char *fmt, ...)
|
||||
{
|
||||
|
@ -65,28 +58,16 @@ static inline __printf_like(1, 0) void vprintk(const char *fmt, va_list ap)
|
|||
ARG_UNUSED(fmt);
|
||||
ARG_UNUSED(ap);
|
||||
}
|
||||
|
||||
static inline __printf_like(3, 4) int snprintk(char *str, size_t size,
|
||||
const char *fmt, ...)
|
||||
{
|
||||
ARG_UNUSED(str);
|
||||
ARG_UNUSED(size);
|
||||
ARG_UNUSED(fmt);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline __printf_like(3, 0) int vsnprintk(char *str, size_t size,
|
||||
const char *fmt, va_list ap)
|
||||
{
|
||||
ARG_UNUSED(str);
|
||||
ARG_UNUSED(size);
|
||||
ARG_UNUSED(fmt);
|
||||
ARG_UNUSED(ap);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
extern __printf_like(3, 4) int snprintk(char *str, size_t size,
|
||||
const char *fmt, ...);
|
||||
extern __printf_like(3, 0) int vsnprintk(char *str, size_t size,
|
||||
const char *fmt, va_list ap);
|
||||
|
||||
extern __printf_like(3, 0) void z_vprintk(int (*out)(int f, void *c), void *ctx,
|
||||
const char *fmt, va_list ap);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue