mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-22 12:34:19 +00:00
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 <antonio.ninodiaz@arm.com>
This commit is contained in:
parent
cb6dbfe3dc
commit
870ce3ddd3
8 changed files with 23 additions and 42 deletions
2
Makefile
2
Makefile
|
@ -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 \
|
||||||
|
|
|
@ -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
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -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
|
||||||
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
|
||||||
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 @@
|
||||||
* 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);
|
||||||
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 @@
|
||||||
#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 @@
|
||||||
|
|
||||||
#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/, \
|
||||||
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) \
|
||||||
|
|
|
@ -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
|
* 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 @@
|
||||||
(((_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,
|
||||||
* 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:
|
||||||
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:
|
||||||
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,
|
||||||
* 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, ...)
|
||||||
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();
|
||||||
}
|
}
|
Loading…
Add table
Reference in a new issue