From 657a54dc7bf8c901a5cf009606d179fe9ae8fd68 Mon Sep 17 00:00:00 2001 From: Kshitij Sisodia Date: Thu, 22 Dec 2022 16:51:23 +0000 Subject: MLECO-3748: Documentation updates Added documentation around known issue with Arm GNU toolchain version 12.2.1. Minor change for MLECO-3731 also included. Link-time warnings for Arm GNU toolchain 11.3.1 also fixed. Change-Id: Ia8215e9f71327eeb59868aea91729d7b19dd6d34 Signed-off-by: Kshitij Sisodia --- docs/sections/building.md | 7 ++- docs/sections/troubleshooting.md | 28 +++++++++- .../hal/source/components/stdout/source/retarget.c | 52 +++++++++++++++++- source/log/include/log_macros.h | 62 +++++++++++++--------- 4 files changed, 120 insertions(+), 29 deletions(-) diff --git a/docs/sections/building.md b/docs/sections/building.md index 1489343..a7a894a 100644 --- a/docs/sections/building.md +++ b/docs/sections/building.md @@ -35,7 +35,12 @@ This section assumes that you are using an **x86_64 Linux** build machine. Before proceeding, it is *essential* to ensure that the following prerequisites have been fulfilled: - GNU Arm embedded toolchain 10.2.1 (or higher) or the Arm Compiler version 6.16, or higher, is installed and available - on the path. Test the compiler by running: + on the path. + +> **Note**: There is a known issue with Arm GNU Embedded Toolchain version 12.2.Rel1. See +> [Internal Compiler Error](./troubleshooting.md#internal-compiler-error) for details. + + Test the compiler by running: ```commandline armclang -v diff --git a/docs/sections/troubleshooting.md b/docs/sections/troubleshooting.md index d5224c4..0b6f4f9 100644 --- a/docs/sections/troubleshooting.md +++ b/docs/sections/troubleshooting.md @@ -9,6 +9,7 @@ - [No matching distribution found for ethos-u-vela==3.5.0](./troubleshooting.md#no-matching-distribution-found-for-ethos_u_vela) - [How to update Python3 package to 3.7 version](./troubleshooting.md#how-to-update-python3-package-to-newer-version) - [Error trying to build on Arm Virtual Hardware](./troubleshooting.md#error-trying-to-build-on-arm-virtual-hardware) + - [Internal Compiler Error](./troubleshooting.md#internal-compiler-error) ## Inference results are incorrect for my custom files @@ -247,4 +248,29 @@ You can then try rebuilding again e.g. ```commandline python3 ./build_default.py ``` -and the error should be fixed. \ No newline at end of file +and the error should be fixed. + +## Internal Compiler Error + +There is a known issue with the Arm GNU toolchain version 12.2 (release December 22, 2022). +Compiler from this toolchain throws up this error: + +``` +during RTL pass: combine +/home/user/ml-embedded-evaluation-kit/dependencies/cmsis-nn/Source/SoftmaxFunctions/arm_softmax_s8.c: In function 'arm_exp_on_negative_values_mve_32x4': +/home/user/ml-embedded-evaluation-kit/dependencies/cmsis-nn/Source/SoftmaxFunctions/arm_softmax_s8.c:74:1: internal compiler error: in trunc_int_for_mode, at explow.cc:59 + 74 | } + | ^ +0x7f0343d9b082 __libc_start_main + ../csu/libc-start.c:308 +Please submit a full bug report, with preprocessed source (by using -freport-bug). +Please include the complete backtrace with any bug report. +See for instructions. +``` + +This is expected to be fixed in the next release of the toolchain. We recommend using the previous version 11.3.Rel1 +(from August 2022). + +See +- [GCC patches: PR107987](https://gcc.gnu.org/pipermail/gcc-patches/2022-December/607963.html) +- [CMSIS-NN issue 13](https://github.com/ARM-software/CMSIS-NN/issues/13) diff --git a/source/hal/source/components/stdout/source/retarget.c b/source/hal/source/components/stdout/source/retarget.c index 47d5189..41c070a 100644 --- a/source/hal/source/components/stdout/source/retarget.c +++ b/source/hal/source/components/stdout/source/retarget.c @@ -1,6 +1,6 @@ /* - * SPDX-FileCopyrightText: Copyright 2022 Arm Limited and/or its affiliates - * SPDX-License-Identifier: Apache-2.0 + * SPDX-FileCopyrightText: Copyright 2022 Arm Limited and/or its affiliates + * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -287,3 +287,51 @@ int ferror(FILE* f) #endif /* #ifndef ferror */ #endif /* !defined(USE_SEMIHOSTING) */ + +/* If using GNU compiler */ +#if defined(__GNUC__) + +/* If Arm GNU compiler version > 11.3.0 */ +#if __GNUC__ > 11 || \ + (__GNUC__ == 11 && (__GNUC_MINOR__ > 3 || (__GNUC_MINOR__ == 3 && __GNUC_PATCHLEVEL__ > 0))) +struct stat; +int _fstat_r(struct _reent* r, int fdes, struct stat* s) +{ + (void)(r); + (void)(fdes); + (void)(s); + return -1; +} + +int _getpid_r(struct _reent* r) +{ + (void)(r); + return -1; +} + +int _isatty_r(struct _reent* r, int desc) +{ + (void)(r); + (void)(desc); + return -1; +} + +int _kill_r(struct _reent* r, int pid, int signal) +{ + (void)(r); + (void)(pid); + (void)(signal); + return -1; +} + +_off_t _lseek_r(struct _reent* r, int fdes, _off_t offset, int w) +{ + (void)(r); + (void)(fdes); + (void)(offset); + (void)(w); + return -1; +} + +#endif /* GNU toolchain version > 11.3.0 */ +#endif /* If using GNU toolchain */ diff --git a/source/log/include/log_macros.h b/source/log/include/log_macros.h index faf8435..6c115ab 100644 --- a/source/log/include/log_macros.h +++ b/source/log/include/log_macros.h @@ -1,6 +1,6 @@ /* - * SPDX-FileCopyrightText: Copyright 2021 Arm Limited and/or its affiliates - * SPDX-License-Identifier: Apache-2.0 + * SPDX-FileCopyrightText: Copyright 2021 Arm Limited and/or its affiliates + * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,50 +21,62 @@ extern "C" { #endif -#include #include +#include -#define LOG_LEVEL_TRACE 0 -#define LOG_LEVEL_DEBUG 1 -#define LOG_LEVEL_INFO 2 -#define LOG_LEVEL_WARN 3 -#define LOG_LEVEL_ERROR 4 +#define LOG_LEVEL_TRACE 0 +#define LOG_LEVEL_DEBUG 1 +#define LOG_LEVEL_INFO 2 +#define LOG_LEVEL_WARN 3 +#define LOG_LEVEL_ERROR 4 #ifndef LOG_LEVEL -#define LOG_LEVEL LOG_LEVEL_INFO +#define LOG_LEVEL LOG_LEVEL_INFO #endif /*LOG_LEVEL*/ -#define UNUSED(x) ((void)(x)) +#if !defined(UNUSED) +#define UNUSED(x) ((void)(x)) +#endif /* #if !defined(UNUSED) */ #if (LOG_LEVEL == LOG_LEVEL_TRACE) - #define trace(...) printf("TRACE - "); printf(__VA_ARGS__) +#define trace(...) \ + printf("TRACE - "); \ + printf(__VA_ARGS__) #else - #define trace(...) -#endif /* LOG_LEVEL == LOG_LEVEL_TRACE */ +#define trace(...) +#endif /* LOG_LEVEL == LOG_LEVEL_TRACE */ #if (LOG_LEVEL <= LOG_LEVEL_DEBUG) - #define debug(...) printf("DEBUG - "); printf(__VA_ARGS__) +#define debug(...) \ + printf("DEBUG - "); \ + printf(__VA_ARGS__) #else - #define debug(...) -#endif /* LOG_LEVEL > LOG_LEVEL_TRACE */ +#define debug(...) +#endif /* LOG_LEVEL > LOG_LEVEL_TRACE */ #if (LOG_LEVEL <= LOG_LEVEL_INFO) - #define info(...) printf("INFO - "); printf(__VA_ARGS__) +#define info(...) \ + printf("INFO - "); \ + printf(__VA_ARGS__) #else - #define info(...) -#endif /* LOG_LEVEL > LOG_LEVEL_DEBUG */ +#define info(...) +#endif /* LOG_LEVEL > LOG_LEVEL_DEBUG */ #if (LOG_LEVEL <= LOG_LEVEL_WARN) - #define warn(...) printf("WARN - "); printf(__VA_ARGS__) +#define warn(...) \ + printf("WARN - "); \ + printf(__VA_ARGS__) #else - #define warn(...) -#endif /* LOG_LEVEL > LOG_LEVEL_INFO */ +#define warn(...) +#endif /* LOG_LEVEL > LOG_LEVEL_INFO */ #if (LOG_LEVEL <= LOG_LEVEL_ERROR) - #define printf_err(...) printf("ERROR - "); printf(__VA_ARGS__) +#define printf_err(...) \ + printf("ERROR - "); \ + printf(__VA_ARGS__) #else - #define printf_err(...) -#endif /* LOG_LEVEL > LOG_LEVEL_INFO */ +#define printf_err(...) +#endif /* LOG_LEVEL > LOG_LEVEL_INFO */ #ifdef __cplusplus } -- cgit v1.2.1