Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Arm Trusted Firmware
Commits
f60a5004
Unverified
Commit
f60a5004
authored
Aug 30, 2018
by
Dimitris Papastamos
Committed by
GitHub
Aug 30, 2018
Browse files
Merge pull request #1546 from antonio-nino-diaz-arm/an/log-misra
Fix some MISRA defect in log helpers
parents
dcf95e7e
5a22e461
Changes
7
Hide whitespace changes
Inline
Side-by-side
common/tf_log.c
View file @
f60a5004
...
@@ -28,19 +28,21 @@ void tf_log(const char *fmt, ...)
...
@@ -28,19 +28,21 @@ void tf_log(const char *fmt, ...)
log_level
=
fmt
[
0
];
log_level
=
fmt
[
0
];
/* Verify that log_level is one of LOG_MARKER_* macro defined in debug.h */
/* Verify that log_level is one of LOG_MARKER_* macro defined in debug.h */
assert
(
log_level
&&
log_level
<=
LOG_LEVEL_VERBOSE
);
assert
(
(
log_level
>
0U
)
&&
(
log_level
<=
LOG_LEVEL_VERBOSE
)
)
;
assert
(
log_level
%
10
==
0
);
assert
(
(
log_level
%
10
U
)
==
0
U
);
if
(
log_level
>
max_log_level
)
if
(
log_level
>
max_log_level
)
return
;
return
;
prefix_str
=
plat_log_get_prefix
(
log_level
);
prefix_str
=
plat_log_get_prefix
(
log_level
);
while
(
*
prefix_str
)
while
(
*
prefix_str
!=
'\0'
)
{
putchar
(
*
prefix_str
++
);
(
void
)
putchar
(
*
prefix_str
);
prefix_str
++
;
}
va_start
(
args
,
fmt
);
va_start
(
args
,
fmt
);
vprintf
(
fmt
+
1
,
args
);
(
void
)
vprintf
(
fmt
+
1
,
args
);
va_end
(
args
);
va_end
(
args
);
}
}
...
@@ -52,10 +54,9 @@ void tf_log(const char *fmt, ...)
...
@@ -52,10 +54,9 @@ void tf_log(const char *fmt, ...)
void
tf_log_set_max_level
(
unsigned
int
log_level
)
void
tf_log_set_max_level
(
unsigned
int
log_level
)
{
{
assert
(
log_level
<=
LOG_LEVEL_VERBOSE
);
assert
(
log_level
<=
LOG_LEVEL_VERBOSE
);
assert
((
log_level
%
10
)
==
0
);
assert
((
log_level
%
10
U
)
==
0
U
);
/* Cap log_level to the compile time maximum. */
/* Cap log_level to the compile time maximum. */
if
(
log_level
<
LOG_LEVEL
)
if
(
log_level
<
(
unsigned
int
)
LOG_LEVEL
)
max_log_level
=
log_level
;
max_log_level
=
log_level
;
}
}
include/common/debug.h
View file @
f60a5004
...
@@ -7,6 +7,8 @@
...
@@ -7,6 +7,8 @@
#ifndef DEBUG_H
#ifndef DEBUG_H
#define DEBUG_H
#define DEBUG_H
#include <utils_def.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
* compiled log output only if the LOG_LEVEL defined in the makefile (or the
* compiled log output only if the LOG_LEVEL defined in the makefile (or the
...
@@ -18,12 +20,12 @@
...
@@ -18,12 +20,12 @@
* WARN("Warning %s.\n", "message") -> WARNING: Warning message.
* WARN("Warning %s.\n", "message") -> WARNING: Warning message.
*/
*/
#define LOG_LEVEL_NONE
0
#define LOG_LEVEL_NONE
U(0)
#define LOG_LEVEL_ERROR 10
#define LOG_LEVEL_ERROR
U(
10
)
#define LOG_LEVEL_NOTICE 20
#define LOG_LEVEL_NOTICE
U(
20
)
#define LOG_LEVEL_WARNING 30
#define LOG_LEVEL_WARNING
U(
30
)
#define LOG_LEVEL_INFO 40
#define LOG_LEVEL_INFO
U(
40
)
#define LOG_LEVEL_VERBOSE 50
#define LOG_LEVEL_VERBOSE
U(
50
)
#ifndef __ASSEMBLY__
#ifndef __ASSEMBLY__
#include <cdefs.h>
#include <cdefs.h>
...
@@ -50,10 +52,10 @@
...
@@ -50,10 +52,10 @@
*/
*/
#define no_tf_log(fmt, ...) \
#define no_tf_log(fmt, ...) \
do { \
do { \
if (
0
) { \
if (
false
) { \
tf_log(fmt, ##__VA_ARGS__); \
tf_log(fmt, ##__VA_ARGS__); \
} \
} \
} while (
0
)
} while (
false
)
#if LOG_LEVEL >= LOG_LEVEL_NOTICE
#if LOG_LEVEL >= LOG_LEVEL_NOTICE
# define NOTICE(...) tf_log(LOG_MARKER_NOTICE __VA_ARGS__)
# define NOTICE(...) tf_log(LOG_MARKER_NOTICE __VA_ARGS__)
...
...
lib/libc/exit.c
View file @
f60a5004
...
@@ -10,7 +10,7 @@ static void (*exitfun)(void);
...
@@ -10,7 +10,7 @@ static void (*exitfun)(void);
void
exit
(
int
status
)
void
exit
(
int
status
)
{
{
if
(
exitfun
)
if
(
exitfun
!=
NULL
)
(
*
exitfun
)();
(
*
exitfun
)();
for
(;;)
for
(;;)
;
;
...
@@ -18,7 +18,7 @@ void exit(int status)
...
@@ -18,7 +18,7 @@ void exit(int status)
int
atexit
(
void
(
*
fun
)(
void
))
int
atexit
(
void
(
*
fun
)(
void
))
{
{
if
(
exitfun
)
if
(
exitfun
!=
NULL
)
return
-
1
;
return
-
1
;
exitfun
=
fun
;
exitfun
=
fun
;
...
...
lib/libc/printf.c
View file @
f60a5004
...
@@ -6,28 +6,27 @@
...
@@ -6,28 +6,27 @@
#include <assert.h>
#include <assert.h>
#include <debug.h>
#include <debug.h>
#include <stdarg.h>
#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdint.h>
/***********************************************************
#define get_num_va_args(_args, _lcount) \
* The printf implementation for all BL stages
(((_lcount) > 1) ? va_arg(_args, long long int) : \
***********************************************************/
(((_lcount) == 1) ? va_arg(_args, long int) : \
va_arg(_args, int)))
#define get_num_va_args(_args, _lcount) \
#define get_unum_va_args(_args, _lcount) \
(((_lcount) > 1) ? va_arg(_args, long long int) : \
(((_lcount) > 1) ? va_arg(_args, unsigned long long int) : \
((_lcount) ? va_arg(_args, long int) : va_arg(_args, int)))
(((_lcount) == 1) ? va_arg(_args, unsigned long int) : \
va_arg(_args, unsigned int)))
#define get_unum_va_args(_args, _lcount) \
(((_lcount) > 1) ? va_arg(_args, unsigned long long int) : \
((_lcount) ? va_arg(_args, unsigned long int) : va_arg(_args, unsigned int)))
static
int
string_print
(
const
char
*
str
)
static
int
string_print
(
const
char
*
str
)
{
{
int
count
=
0
;
int
count
=
0
;
assert
(
str
);
assert
(
str
!=
NULL
);
while
(
*
str
)
{
for
(
;
*
str
!=
'\0'
;
str
++
)
{
putchar
(
*
str
++
);
(
void
)
putchar
(
*
str
);
count
++
;
count
++
;
}
}
...
@@ -38,26 +37,30 @@ static int unsigned_num_print(unsigned long long int unum, unsigned int radix,
...
@@ -38,26 +37,30 @@ static int unsigned_num_print(unsigned long long int unum, unsigned int radix,
char
padc
,
int
padn
)
char
padc
,
int
padn
)
{
{
/* Just need enough space to store 64 bit decimal integer */
/* Just need enough space to store 64 bit decimal integer */
unsigned
char
num_buf
[
20
];
char
num_buf
[
20
];
int
i
=
0
,
rem
,
count
=
0
;
int
i
=
0
,
count
=
0
;
unsigned
int
rem
;
do
{
do
{
rem
=
unum
%
radix
;
rem
=
unum
%
radix
;
if
(
rem
<
0xa
)
if
(
rem
<
0xa
)
num_buf
[
i
++
]
=
'0'
+
rem
;
num_buf
[
i
]
=
'0'
+
rem
;
else
else
num_buf
[
i
++
]
=
'a'
+
(
rem
-
0xa
);
num_buf
[
i
]
=
'a'
+
(
rem
-
0xa
);
}
while
(
unum
/=
radix
);
i
++
;
unum
/=
radix
;
}
while
(
unum
>
0U
);
if
(
padn
>
0
)
{
if
(
padn
>
0
)
{
while
(
i
<
padn
--
)
{
while
(
i
<
padn
)
{
putchar
(
padc
);
(
void
)
putchar
(
padc
);
count
++
;
count
++
;
padn
--
;
}
}
}
}
while
(
--
i
>=
0
)
{
while
(
--
i
>=
0
)
{
putchar
(
num_buf
[
i
]);
(
void
)
putchar
(
num_buf
[
i
]);
count
++
;
count
++
;
}
}
...
@@ -90,11 +93,11 @@ int vprintf(const char *fmt, va_list args)
...
@@ -90,11 +93,11 @@ int vprintf(const char *fmt, va_list args)
long
long
int
num
;
long
long
int
num
;
unsigned
long
long
int
unum
;
unsigned
long
long
int
unum
;
char
*
str
;
char
*
str
;
char
padc
=
0
;
/* Padding character */
char
padc
=
'\0'
;
/* Padding character */
int
padn
;
/* Number of characters to pad */
int
padn
;
/* Number of characters to pad */
int
count
=
0
;
/* Number of printed characters */
int
count
=
0
;
/* Number of printed characters */
while
(
*
fmt
)
{
while
(
*
fmt
!=
'\0'
)
{
l_count
=
0
;
l_count
=
0
;
padn
=
0
;
padn
=
0
;
...
@@ -107,7 +110,7 @@ loop:
...
@@ -107,7 +110,7 @@ loop:
case
'd'
:
case
'd'
:
num
=
get_num_va_args
(
args
,
l_count
);
num
=
get_num_va_args
(
args
,
l_count
);
if
(
num
<
0
)
{
if
(
num
<
0
)
{
putchar
(
'-'
);
(
void
)
putchar
(
'-'
);
unum
=
(
unsigned
long
long
int
)
-
num
;
unum
=
(
unsigned
long
long
int
)
-
num
;
padn
--
;
padn
--
;
}
else
}
else
...
@@ -122,7 +125,7 @@ loop:
...
@@ -122,7 +125,7 @@ loop:
break
;
break
;
case
'p'
:
case
'p'
:
unum
=
(
uintptr_t
)
va_arg
(
args
,
void
*
);
unum
=
(
uintptr_t
)
va_arg
(
args
,
void
*
);
if
(
unum
)
{
if
(
unum
>
0U
)
{
count
+=
string_print
(
"0x"
);
count
+=
string_print
(
"0x"
);
padn
-=
2
;
padn
-=
2
;
}
}
...
@@ -136,7 +139,7 @@ loop:
...
@@ -136,7 +139,7 @@ loop:
padc
,
padn
);
padc
,
padn
);
break
;
break
;
case
'z'
:
case
'z'
:
if
(
sizeof
(
size_t
)
==
8
)
if
(
sizeof
(
size_t
)
==
8
U
)
l_count
=
2
;
l_count
=
2
;
fmt
++
;
fmt
++
;
...
@@ -155,9 +158,9 @@ loop:
...
@@ -155,9 +158,9 @@ loop:
padn
=
0
;
padn
=
0
;
fmt
++
;
fmt
++
;
while
(
1
)
{
for
(;;
)
{
char
ch
=
*
fmt
;
char
ch
=
*
fmt
;
if
(
ch
<
'0'
||
ch
>
'9'
)
{
if
(
(
ch
<
'0'
)
||
(
ch
>
'9'
)
)
{
goto
loop
;
goto
loop
;
}
}
padn
=
(
padn
*
10
)
+
(
ch
-
'0'
);
padn
=
(
padn
*
10
)
+
(
ch
-
'0'
);
...
@@ -170,7 +173,8 @@ loop:
...
@@ -170,7 +173,8 @@ loop:
fmt
++
;
fmt
++
;
continue
;
continue
;
}
}
putchar
(
*
fmt
++
);
(
void
)
putchar
(
*
fmt
);
fmt
++
;
count
++
;
count
++
;
}
}
...
...
lib/libc/puts.c
View file @
f60a5004
...
@@ -10,9 +10,10 @@ int puts(const char *s)
...
@@ -10,9 +10,10 @@ int puts(const char *s)
{
{
int
count
=
0
;
int
count
=
0
;
while
(
*
s
)
{
while
(
*
s
!=
'\0'
)
{
if
(
putchar
(
*
s
++
)
==
EOF
)
if
(
putchar
(
*
s
)
==
EOF
)
return
EOF
;
return
EOF
;
s
++
;
count
++
;
count
++
;
}
}
...
...
lib/libc/snprintf.c
View file @
f60a5004
/*
/*
* 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
*/
*/
...
@@ -11,9 +11,12 @@
...
@@ -11,9 +11,12 @@
static
void
string_print
(
char
**
s
,
size_t
n
,
size_t
*
chars_printed
,
static
void
string_print
(
char
**
s
,
size_t
n
,
size_t
*
chars_printed
,
const
char
*
str
)
const
char
*
str
)
{
{
while
(
*
str
)
{
while
(
*
str
!=
'\0'
)
{
if
(
*
chars_printed
<
n
)
if
(
*
chars_printed
<
n
)
{
*
(
*
s
)
++
=
*
str
;
*
(
*
s
)
=
*
str
;
(
*
s
)
++
;
}
(
*
chars_printed
)
++
;
(
*
chars_printed
)
++
;
str
++
;
str
++
;
}
}
...
@@ -23,17 +26,22 @@ static void unsigned_dec_print(char **s, size_t n, size_t *chars_printed,
...
@@ -23,17 +26,22 @@ static void unsigned_dec_print(char **s, size_t n, size_t *chars_printed,
unsigned
int
unum
)
unsigned
int
unum
)
{
{
/* Enough for a 32-bit unsigned decimal integer (4294967295). */
/* Enough for a 32-bit unsigned decimal integer (4294967295). */
unsigned
char
num_buf
[
10
];
char
num_buf
[
10
];
int
i
=
0
,
rem
;
int
i
=
0
;
unsigned
int
rem
;
do
{
do
{
rem
=
unum
%
10
;
rem
=
unum
%
10
U
;
num_buf
[
i
++
]
=
'0'
+
rem
;
num_buf
[
i
++
]
=
'0'
+
rem
;
}
while
(
unum
/=
10
);
unum
/=
10U
;
}
while
(
unum
>
0U
);
while
(
--
i
>=
0
)
{
while
(
--
i
>=
0
)
{
if
(
*
chars_printed
<
n
)
if
(
*
chars_printed
<
n
)
{
*
(
*
s
)
++
=
num_buf
[
i
];
*
(
*
s
)
=
num_buf
[
i
];
(
*
s
)
++
;
}
(
*
chars_printed
)
++
;
(
*
chars_printed
)
++
;
}
}
}
}
...
@@ -58,19 +66,21 @@ int snprintf(char *s, size_t n, const char *fmt, ...)
...
@@ -58,19 +66,21 @@ int snprintf(char *s, size_t n, const char *fmt, ...)
int
num
;
int
num
;
unsigned
int
unum
;
unsigned
int
unum
;
char
*
str
;
char
*
str
;
size_t
chars_printed
=
0
;
size_t
chars_printed
=
0
U
;
if
(
n
==
1
)
{
if
(
n
==
0U
)
{
/* There isn't space for anything. */
}
else
if
(
n
==
1U
)
{
/* Buffer is too small to actually write anything else. */
/* Buffer is too small to actually write anything else. */
*
s
=
'\0'
;
*
s
=
'\0'
;
n
=
0
;
n
=
0
U
;
}
else
if
(
n
>=
2
)
{
}
else
{
/* Reserve space for the terminator character. */
/* Reserve space for the terminator character. */
n
--
;
n
--
;
}
}
va_start
(
args
,
fmt
);
va_start
(
args
,
fmt
);
while
(
*
fmt
)
{
while
(
*
fmt
!=
'\0'
)
{
if
(
*
fmt
==
'%'
)
{
if
(
*
fmt
==
'%'
)
{
fmt
++
;
fmt
++
;
...
@@ -81,8 +91,10 @@ int snprintf(char *s, size_t n, const char *fmt, ...)
...
@@ -81,8 +91,10 @@ int snprintf(char *s, size_t n, const char *fmt, ...)
num
=
va_arg
(
args
,
int
);
num
=
va_arg
(
args
,
int
);
if
(
num
<
0
)
{
if
(
num
<
0
)
{
if
(
chars_printed
<
n
)
if
(
chars_printed
<
n
)
{
*
s
++
=
'-'
;
*
s
=
'-'
;
s
++
;
}
chars_printed
++
;
chars_printed
++
;
unum
=
(
unsigned
int
)
-
num
;
unum
=
(
unsigned
int
)
-
num
;
...
@@ -110,16 +122,19 @@ int snprintf(char *s, size_t n, const char *fmt, ...)
...
@@ -110,16 +122,19 @@ int snprintf(char *s, size_t n, const char *fmt, ...)
continue
;
continue
;
}
}
if
(
chars_printed
<
n
)
if
(
chars_printed
<
n
)
{
*
s
++
=
*
fmt
;
*
s
=
*
fmt
;
s
++
;
}
fmt
++
;
fmt
++
;
chars_printed
++
;
chars_printed
++
;
}
}
va_end
(
args
);
va_end
(
args
);
if
(
n
>
0
)
if
(
n
>
0
U
)
*
s
=
'\0'
;
*
s
=
'\0'
;
return
chars_printed
;
return
(
int
)
chars_printed
;
}
}
plat/common/plat_log_common.c
View file @
f60a5004
/*
/*
* 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
*/
*/
#include <assert.h>
#include <debug.h>
#include <debug.h>
#include <platform.h>
/* Allow platforms to override the log prefix string */
/* Allow platforms to override the log prefix string */
#pragma weak plat_log_get_prefix
#pragma weak plat_log_get_prefix
static
const
char
*
prefix_str
[]
=
{
static
const
char
*
plat_
prefix_str
[]
=
{
"ERROR: "
,
"NOTICE: "
,
"WARNING: "
,
"INFO: "
,
"VERBOSE: "
};
"ERROR: "
,
"NOTICE: "
,
"WARNING: "
,
"INFO: "
,
"VERBOSE: "
};
const
char
*
plat_log_get_prefix
(
unsigned
int
log_level
)
const
char
*
plat_log_get_prefix
(
unsigned
int
log_level
)
{
{
if
(
log_level
<
LOG_LEVEL_ERROR
)
unsigned
int
level
;
log_level
=
LOG_LEVEL_ERROR
;
else
if
(
log_level
>
LOG_LEVEL_VERBOSE
)
log_level
=
LOG_LEVEL_VERBOSE
;
return
prefix_str
[(
log_level
/
10
)
-
1
];
if
(
log_level
<
LOG_LEVEL_ERROR
)
{
level
=
LOG_LEVEL_ERROR
;
}
else
if
(
log_level
>
LOG_LEVEL_VERBOSE
)
{
level
=
LOG_LEVEL_VERBOSE
;
}
else
{
level
=
log_level
;
}
return
plat_prefix_str
[(
level
/
10U
)
-
1U
];
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment