From 870ce3ddd3b33c59418a7dba703e8a66ec75f98f Mon Sep 17 00:00:00 2001 From: Antonio Nino Diaz Date: Wed, 15 Aug 2018 17:02:28 +0100 Subject: [PATCH] libc: Move tf_printf and tf_snprintf to libc Change their names to printf and snprintf. They are much smaller than the previous versions we had, which makes them better suited for the Trusted Firmware. Change-Id: Ia872af91b7b967c47fce012eccecede7873a3daf Signed-off-by: Antonio Nino Diaz --- Makefile | 2 -- common/tf_log.c | 8 ++++---- docs/psci-lib-integration-guide.rst | 10 +--------- include/common/debug.h | 10 +++------- include/lib/libc/stdio.h | 10 ++++------ lib/libc/libc.mk | 4 ++-- common/tf_printf.c => lib/libc/printf.c | 17 +++++++---------- common/tf_snprintf.c => lib/libc/snprintf.c | 4 ++-- 8 files changed, 23 insertions(+), 42 deletions(-) rename common/tf_printf.c => lib/libc/printf.c (91%) rename common/tf_snprintf.c => lib/libc/snprintf.c (95%) diff --git a/Makefile b/Makefile index cb7eb08c..e7ca14a5 100644 --- a/Makefile +++ b/Makefile @@ -202,8 +202,6 @@ include lib/libc/libc.mk BL_COMMON_SOURCES += common/bl_common.c \ common/tf_log.c \ - common/tf_printf.c \ - common/tf_snprintf.c \ common/${ARCH}/debug.S \ lib/${ARCH}/cache_helpers.S \ lib/${ARCH}/misc_helpers.S \ diff --git a/common/tf_log.c b/common/tf_log.c index 54c0a436..6da1e85b 100644 --- a/common/tf_log.c +++ b/common/tf_log.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2017-2018, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -36,11 +36,11 @@ void tf_log(const char *fmt, ...) prefix_str = plat_log_get_prefix(log_level); - if (prefix_str != NULL) - tf_string_print(prefix_str); + while (*prefix_str) + putchar(*prefix_str++); va_start(args, fmt); - tf_vprintf(fmt+1, args); + vprintf(fmt + 1, args); va_end(args); } diff --git a/docs/psci-lib-integration-guide.rst b/docs/psci-lib-integration-guide.rst index 47cbfcc8..d86fc29e 100644 --- a/docs/psci-lib-integration-guide.rst +++ b/docs/psci-lib-integration-guide.rst @@ -319,7 +319,7 @@ and some helper utilities for assert, print and memory operations as listed below. The TF-A source tree provides implementations for all these functions but the EL3 Runtime Software may use its own implementation. -**Functions : assert(), memcpy(), memset** +**Functions : assert(), memcpy(), memset(), printf()** These must be implemented as described in ISO C Standard. @@ -353,14 +353,6 @@ This function invalidates (flushes) the data cache for memory at address This function will be called by the PSCI library on encountering a critical failure that cannot be recovered from. This function **must not** return. -**Function : tf\_printf()** - -This is printf-compatible function, but unlike printf, it does not return any -value. The TF-A source tree provides an implementation which -is optimized for stack usage and supports only a subset of format specifiers. -The details of the format specifiers supported can be found in the -``tf_printf.c`` file in the TF-A source tree. - CPU Context management API ~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/include/common/debug.h b/include/common/debug.h index 3c99ce50..4c5560f5 100644 --- a/include/common/debug.h +++ b/include/common/debug.h @@ -4,8 +4,8 @@ * SPDX-License-Identifier: BSD-3-Clause */ -#ifndef __DEBUG_H__ -#define __DEBUG_H__ +#ifndef DEBUG_H +#define DEBUG_H /* * The log output macros print output to the console. These macros produce @@ -90,11 +90,7 @@ void __dead2 do_panic(void); void __dead2 __stack_chk_fail(void); void tf_log(const char *fmt, ...) __printflike(1, 2); -int tf_printf(const char *fmt, ...) __printflike(1, 2); -int tf_snprintf(char *s, size_t n, const char *fmt, ...) __printflike(3, 4); -int tf_vprintf(const char *fmt, va_list args); -int tf_string_print(const char *str); void tf_log_set_max_level(unsigned int log_level); #endif /* __ASSEMBLY__ */ -#endif /* __DEBUG_H__ */ +#endif /* DEBUG_H */ diff --git a/include/lib/libc/stdio.h b/include/lib/libc/stdio.h index 83fd18c5..3d9323ef 100644 --- a/include/lib/libc/stdio.h +++ b/include/lib/libc/stdio.h @@ -11,6 +11,7 @@ #ifndef STDIO_H #define STDIO_H +#include #include #ifndef NULL @@ -19,14 +20,11 @@ #define EOF -1 -int printf(const char *fmt, ...); -int snprintf(char *s, size_t n, const char *fmt, ...); -int sprintf(char *s, const char *fmt, ...); -int sscanf(const char *s, const char *fmt, ...); +int printf(const char *fmt, ...) __printflike(1, 2); +int snprintf(char *s, size_t n, const char *fmt, ...) __printflike(3, 4); #ifdef STDARG_H -int vsnprintf(char *s, size_t n, const char *fmt, va_list arg); -int vsprintf(char *s, const char *fmt, va_list arg); +int vprintf(const char *fmt, va_list args); #endif int putchar(int c); diff --git a/lib/libc/libc.mk b/lib/libc/libc.mk index 0dee4f55..554f36bb 100644 --- a/lib/libc/libc.mk +++ b/lib/libc/libc.mk @@ -16,12 +16,12 @@ LIBC_SRCS := $(addprefix lib/libc/, \ printf.c \ putchar.c \ puts.c \ + snprintf.c \ strchr.c \ strcmp.c \ strlen.c \ strncmp.c \ - strnlen.c \ - subr_prf.c) + strnlen.c) INCLUDES += -Iinclude/lib/libc \ -Iinclude/lib/libc/$(ARCH) \ diff --git a/common/tf_printf.c b/lib/libc/printf.c similarity index 91% rename from common/tf_printf.c rename to lib/libc/printf.c index ecf058ca..a1a80248 100644 --- a/common/tf_printf.c +++ b/lib/libc/printf.c @@ -1,13 +1,10 @@ /* - * Copyright (c) 2014-2017, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2014-2018, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ -#include -#include #include #include -#include #include #include @@ -23,7 +20,7 @@ (((_lcount) > 1) ? va_arg(_args, unsigned long long int) : \ ((_lcount) ? va_arg(_args, unsigned long int) : va_arg(_args, unsigned int))) -int tf_string_print(const char *str) +static int string_print(const char *str) { int count = 0; @@ -87,7 +84,7 @@ static int unsigned_num_print(unsigned long long int unum, unsigned int radix, * The print exits on all other formats specifiers other than valid * combinations of the above specifiers. *******************************************************************/ -int tf_vprintf(const char *fmt, va_list args) +int vprintf(const char *fmt, va_list args) { int l_count; long long int num; @@ -121,12 +118,12 @@ loop: break; case 's': str = va_arg(args, char *); - count += tf_string_print(str); + count += string_print(str); break; case 'p': unum = (uintptr_t)va_arg(args, void *); if (unum) { - count += tf_string_print("0x"); + count += string_print("0x"); padn -= 2; } @@ -180,13 +177,13 @@ loop: return count; } -int tf_printf(const char *fmt, ...) +int printf(const char *fmt, ...) { int count; va_list va; va_start(va, fmt); - count = tf_vprintf(fmt, va); + count = vprintf(fmt, va); va_end(va); return count; diff --git a/common/tf_snprintf.c b/lib/libc/snprintf.c similarity index 95% rename from common/tf_snprintf.c rename to lib/libc/snprintf.c index 6df13772..0738a869 100644 --- a/common/tf_snprintf.c +++ b/lib/libc/snprintf.c @@ -52,7 +52,7 @@ static void unsigned_dec_print(char **s, size_t n, size_t *chars_printed, * buffer was big enough. If it returns a value lower than n, the * whole string has been written. *******************************************************************/ -int tf_snprintf(char *s, size_t n, const char *fmt, ...) +int snprintf(char *s, size_t n, const char *fmt, ...) { va_list args; int num; @@ -102,7 +102,7 @@ int tf_snprintf(char *s, size_t n, const char *fmt, ...) break; default: /* Panic on any other format specifier. */ - ERROR("tf_snprintf: specifier with ASCII code '%d' not supported.", + ERROR("snprintf: specifier with ASCII code '%d' not supported.", *fmt); plat_panic_handler(); } -- 2.30.2