Commit 870ce3dd authored by Antonio Nino Diaz's avatar Antonio Nino Diaz
Browse files

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: default avatarAntonio Nino Diaz <antonio.ninodiaz@arm.com>
parent cb6dbfe3
...@@ -202,8 +202,6 @@ include lib/libc/libc.mk ...@@ -202,8 +202,6 @@ include lib/libc/libc.mk
BL_COMMON_SOURCES += common/bl_common.c \ BL_COMMON_SOURCES += common/bl_common.c \
common/tf_log.c \ common/tf_log.c \
common/tf_printf.c \
common/tf_snprintf.c \
common/${ARCH}/debug.S \ common/${ARCH}/debug.S \
lib/${ARCH}/cache_helpers.S \ lib/${ARCH}/cache_helpers.S \
lib/${ARCH}/misc_helpers.S \ lib/${ARCH}/misc_helpers.S \
......
/* /*
* 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 * SPDX-License-Identifier: BSD-3-Clause
*/ */
...@@ -36,11 +36,11 @@ void tf_log(const char *fmt, ...) ...@@ -36,11 +36,11 @@ void tf_log(const char *fmt, ...)
prefix_str = plat_log_get_prefix(log_level); prefix_str = plat_log_get_prefix(log_level);
if (prefix_str != NULL) while (*prefix_str)
tf_string_print(prefix_str); putchar(*prefix_str++);
va_start(args, fmt); va_start(args, fmt);
tf_vprintf(fmt+1, args); vprintf(fmt + 1, args);
va_end(args); va_end(args);
} }
......
...@@ -319,7 +319,7 @@ and some helper utilities for assert, print and memory operations as listed ...@@ -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 below. The TF-A source tree provides implementations for all
these functions but the EL3 Runtime Software may use its own implementation. 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. 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 ...@@ -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 This function will be called by the PSCI library on encountering a critical
failure that cannot be recovered from. This function **must not** return. 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 CPU Context management API
~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~
......
...@@ -4,8 +4,8 @@ ...@@ -4,8 +4,8 @@
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
#ifndef __DEBUG_H__ #ifndef DEBUG_H
#define __DEBUG_H__ #define DEBUG_H
/* /*
* The log output macros print output to the console. These macros produce * The log output macros print output to the console. These macros produce
...@@ -90,11 +90,7 @@ void __dead2 do_panic(void); ...@@ -90,11 +90,7 @@ void __dead2 do_panic(void);
void __dead2 __stack_chk_fail(void); void __dead2 __stack_chk_fail(void);
void tf_log(const char *fmt, ...) __printflike(1, 2); 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); void tf_log_set_max_level(unsigned int log_level);
#endif /* __ASSEMBLY__ */ #endif /* __ASSEMBLY__ */
#endif /* __DEBUG_H__ */ #endif /* DEBUG_H */
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#ifndef STDIO_H #ifndef STDIO_H
#define STDIO_H #define STDIO_H
#include <cdefs.h>
#include <stdio_.h> #include <stdio_.h>
#ifndef NULL #ifndef NULL
...@@ -19,14 +20,11 @@ ...@@ -19,14 +20,11 @@
#define EOF -1 #define EOF -1
int printf(const char *fmt, ...); int printf(const char *fmt, ...) __printflike(1, 2);
int snprintf(char *s, size_t n, const char *fmt, ...); int snprintf(char *s, size_t n, const char *fmt, ...) __printflike(3, 4);
int sprintf(char *s, const char *fmt, ...);
int sscanf(const char *s, const char *fmt, ...);
#ifdef STDARG_H #ifdef STDARG_H
int vsnprintf(char *s, size_t n, const char *fmt, va_list arg); int vprintf(const char *fmt, va_list args);
int vsprintf(char *s, const char *fmt, va_list arg);
#endif #endif
int putchar(int c); int putchar(int c);
......
...@@ -16,12 +16,12 @@ LIBC_SRCS := $(addprefix lib/libc/, \ ...@@ -16,12 +16,12 @@ LIBC_SRCS := $(addprefix lib/libc/, \
printf.c \ printf.c \
putchar.c \ putchar.c \
puts.c \ puts.c \
snprintf.c \
strchr.c \ strchr.c \
strcmp.c \ strcmp.c \
strlen.c \ strlen.c \
strncmp.c \ strncmp.c \
strnlen.c \ strnlen.c)
subr_prf.c)
INCLUDES += -Iinclude/lib/libc \ INCLUDES += -Iinclude/lib/libc \
-Iinclude/lib/libc/$(ARCH) \ -Iinclude/lib/libc/$(ARCH) \
/* /*
* 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 * SPDX-License-Identifier: BSD-3-Clause
*/ */
#include <arch.h>
#include <arch_helpers.h>
#include <assert.h> #include <assert.h>
#include <debug.h> #include <debug.h>
#include <limits.h>
#include <stdarg.h> #include <stdarg.h>
#include <stdint.h> #include <stdint.h>
...@@ -23,7 +20,7 @@ ...@@ -23,7 +20,7 @@
(((_lcount) > 1) ? va_arg(_args, unsigned long long int) : \ (((_lcount) > 1) ? va_arg(_args, unsigned long long int) : \
((_lcount) ? va_arg(_args, unsigned long int) : va_arg(_args, unsigned 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; int count = 0;
...@@ -87,7 +84,7 @@ static int unsigned_num_print(unsigned long long int unum, unsigned int radix, ...@@ -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 * The print exits on all other formats specifiers other than valid
* combinations of the above specifiers. * 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; int l_count;
long long int num; long long int num;
...@@ -121,12 +118,12 @@ loop: ...@@ -121,12 +118,12 @@ loop:
break; break;
case 's': case 's':
str = va_arg(args, char *); str = va_arg(args, char *);
count += tf_string_print(str); count += string_print(str);
break; break;
case 'p': case 'p':
unum = (uintptr_t)va_arg(args, void *); unum = (uintptr_t)va_arg(args, void *);
if (unum) { if (unum) {
count += tf_string_print("0x"); count += string_print("0x");
padn -= 2; padn -= 2;
} }
...@@ -180,13 +177,13 @@ loop: ...@@ -180,13 +177,13 @@ loop:
return count; return count;
} }
int tf_printf(const char *fmt, ...) int printf(const char *fmt, ...)
{ {
int count; int count;
va_list va; va_list va;
va_start(va, fmt); va_start(va, fmt);
count = tf_vprintf(fmt, va); count = vprintf(fmt, va);
va_end(va); va_end(va);
return count; return count;
......
...@@ -52,7 +52,7 @@ static void unsigned_dec_print(char **s, size_t n, size_t *chars_printed, ...@@ -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 * buffer was big enough. If it returns a value lower than n, the
* whole string has been written. * 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; va_list args;
int num; int num;
...@@ -102,7 +102,7 @@ int tf_snprintf(char *s, size_t n, const char *fmt, ...) ...@@ -102,7 +102,7 @@ int tf_snprintf(char *s, size_t n, const char *fmt, ...)
break; break;
default: default:
/* Panic on any other format specifier. */ /* 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); *fmt);
plat_panic_handler(); plat_panic_handler();
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment