From 2167ffbe457e582259f6b7ce11a6b6db527d5fa8 Mon Sep 17 00:00:00 2001 From: Eugeniy Paltsev Date: Wed, 2 Sep 2020 20:18:22 +0300 Subject: [PATCH] ARC: toolchain: handle difference in macros for MWDT and ARC GNU Create include/toolchain/mwdt.h to handle difference in several macros for MWDT and ARC GNU toolchains. Signed-off-by: Eugeniy Paltsev --- include/toolchain.h | 2 + include/toolchain/mwdt.h | 79 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 include/toolchain/mwdt.h diff --git a/include/toolchain.h b/include/toolchain.h index 3b7d5bfefcf..ea905a083b3 100644 --- a/include/toolchain.h +++ b/include/toolchain.h @@ -35,6 +35,8 @@ #if defined(__XCC__) #include +#elif defined(__CCAC__) +#include #elif defined(__GNUC__) || (defined(_LINKER) && defined(__GCC_LINKER_CMD__)) #include #else diff --git a/include/toolchain/mwdt.h b/include/toolchain/mwdt.h new file mode 100644 index 00000000000..3eb83fb3bd0 --- /dev/null +++ b/include/toolchain/mwdt.h @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2020 Synopsys. + * Author: Eugeniy Paltsev + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef ZEPHYR_INCLUDE_TOOLCHAIN_MWDT_H_ +#define ZEPHYR_INCLUDE_TOOLCHAIN_MWDT_H_ + +#ifndef _LINKER +#if defined(_ASMLANGUAGE) + +#include + +#define FUNC_CODE() +#define FUNC_INSTR(a) + +.macro section_var_mwdt, section, symbol + .section .\§ion\&.\&symbol, "aw" + symbol : +.endm + +.macro section_func_mwdt, section, symbol + .section .\§ion\&.\&symbol, "ax" + FUNC_CODE() + PERFOPT_ALIGN + symbol : + FUNC_INSTR(symbol) +.endm + +.macro section_subsec_func_mwdt, section, subsection, symbol + .section .\§ion\&.\&subsection, "ax" + PERFOPT_ALIGN + symbol : +.endm + +#define SECTION_VAR(sect, sym) section_var_mwdt sect, sym +#define SECTION_FUNC(sect, sym) section_func_mwdt sect, sym +#define SECTION_SUBSEC_FUNC(sect, subsec, sym) \ + section_subsec_func_mwdt sect, subsec, sym + +.macro glbl_text_mwdt, symbol + .globl symbol + .type symbol, @function +.endm + +.macro glbl_data_mwdt, symbol + .globl symbol + .type symbol, @object +.endm + +.macro weak_data_mwdt, symbol + .weak symbol + .type symbol, @object +.endm + +#define GTEXT(sym) glbl_text_mwdt sym +#define GDATA(sym) glbl_data_mwdt sym +#define WDATA(sym) weak_data_mwdt sym + +#else /* defined(_ASMLANGUAGE) */ + +#include + +/* Metaware toolchain has _Static_assert. However it not able to calculate + * conditional expression in build time for some realy complex cases. ARC GNU + * toolchain works fine in this cases, so it looks like MWDT bug. So, disable + * BUILD_ASSERT macro until we fix that issue in MWDT toolchain. + */ +#undef BUILD_ASSERT +#define BUILD_ASSERT(EXPR, MSG...) + +#define __builtin_arc_nop() _nop() + +#endif /* _ASMLANGUAGE */ + +#endif /* !_LINKER */ +#endif /* ZEPHYR_INCLUDE_TOOLCHAIN_MWDT_H_ */