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
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 \
......
/*
* 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);
}
......
......@@ -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
~~~~~~~~~~~~~~~~~~~~~~~~~~
......
......@@ -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 */
......@@ -11,6 +11,7 @@
#ifndef STDIO_H
#define STDIO_H
#include <cdefs.h>
#include <stdio_.h>
#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);
......
......@@ -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) \
/*
* 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 <arch.h>
#include <arch_helpers.h>
#include <assert.h>
#include <debug.h>
#include <limits.h>
#include <stdarg.h>
#include <stdint.h>
......@@ -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;
......
......@@ -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();
}
......
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