forked from zephyrproject-rtos/zephyr
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ARC: linker: implement linker related definition for MWDT
Implement linker related definitions and macros for MWDT toolchain. Signed-off-by: Eugeniy Paltsev <[email protected]>
- Loading branch information
1 parent
0a7b65e
commit c2bb7db
Showing
2 changed files
with
102 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,100 @@ | ||
/* | ||
* Copyright (c) 2020, Synopsys, Inc. | ||
* | ||
* SPDX-License-Identifier: Apache-2.0 | ||
*/ | ||
|
||
/** | ||
* @file | ||
* @brief Metware toolchain linker defs | ||
* | ||
* This header file defines the necessary macros used by the linker script for | ||
* use with the metware linker. | ||
*/ | ||
|
||
#ifndef ZEPHYR_INCLUDE_LINKER_LINKER_TOOL_MWDT_H_ | ||
#define ZEPHYR_INCLUDE_LINKER_LINKER_TOOL_MWDT_H_ | ||
|
||
/* | ||
* mwdt linker doesn't have the following directives | ||
*/ | ||
#define ASSERT(x, y) | ||
#define SUBALIGN(x) ALIGN(x) | ||
|
||
#define LOG2CEIL(x) ((((x) <= 2048) ? 11 : (((x) <= 4096)?12:(((x) <= 8192) ? \ | ||
13 : (((x) <= 16384) ? 14 : (((x) <= 32768) ? 15:(((x) <= 65536) ? \ | ||
16 : (((x) <= 131072) ? 17 : (((x) <= 262144) ? 18:(((x) <= 524288) ? \ | ||
19 : (((x) <= 1048576) ? 20 : (((x) <= 2097152) ? \ | ||
21 : (((x) <= 4194304) ? 22 : (((x) <= 8388608) ? \ | ||
23 : (((x) <= 16777216) ? 24 : (((x) <= 33554432) ? \ | ||
25 : (((x) <= 67108864) ? 26 : (((x) <= 134217728) ? \ | ||
27 : (((x) <= 268435456) ? 28 : (((x) <= 536870912) ? \ | ||
29 : (((x) <= 1073741824) ? 30 : (((x) <= 2147483648) ? \ | ||
31 : 32)))))))))))))))))))))) | ||
/* | ||
* The GROUP_START() and GROUP_END() macros are used to define a group | ||
* of sections located in one memory area, such as RAM, ROM, etc. | ||
* The <where> parameter is the name of the memory area. | ||
*/ | ||
#define GROUP_START(where) | ||
#define GROUP_END(where) | ||
|
||
/* | ||
* The GROUP_LINK_IN() macro is located at the end of the section | ||
* description and tells the linker that this section is located in | ||
* the memory area specified by <where> argument. | ||
*/ | ||
#define GROUP_LINK_IN(where) > where | ||
|
||
/* | ||
* As GROUP_LINK_IN(), but takes a second argument indicating the | ||
* memory region (e.g. "ROM") for the load address. Used for | ||
* initialized data sections that on XIP platforms must be copied at | ||
* startup. | ||
* | ||
* And, because output directives in GNU ld are "sticky", this must | ||
* also be used on the first section *after* such an initialized data | ||
* section, specifying the same memory region (e.g. "RAM") for both | ||
* vregion and lregion. | ||
*/ | ||
#ifdef CONFIG_XIP | ||
#define GROUP_DATA_LINK_IN(vregion, lregion) > vregion AT > lregion | ||
#else | ||
#define GROUP_DATA_LINK_IN(vregion, lregion) > vregion | ||
#endif | ||
|
||
/* | ||
* The GROUP_FOLLOWS_AT() macro is located at the end of the section | ||
* and indicates that the section does not specify an address at which | ||
* it is to be loaded, but that it follows a section which did specify | ||
* such an address | ||
*/ | ||
#define GROUP_FOLLOWS_AT(where) AT > where | ||
|
||
/* | ||
* The SECTION_PROLOGUE() macro is used to define the beginning of a section. | ||
* The <name> parameter is the name of the section, and the <option> parameter | ||
* is to include any special options such as (NOLOAD). Page alignment has its | ||
* own parameter since it needs abstraction across the different toolchains. | ||
* If not required, the <options> and <align> parameters should be left blank. | ||
*/ | ||
|
||
#define SECTION_PROLOGUE(name, options, align) name options align : | ||
|
||
/* | ||
* As for SECTION_PROLOGUE(), except that this one must (!) be used | ||
* for data sections which on XIP platforms will have differing | ||
* virtual and load addresses (i.e. they'll be copied into RAM at | ||
* program startup). Such a section must (!) also use | ||
* GROUP_LINK_IN_LMA to specify the correct output load address. | ||
*/ | ||
#ifdef CONFIG_XIP | ||
#define SECTION_DATA_PROLOGUE(name, options, align) \ | ||
name options ALIGN_WITH_INPUT align : | ||
#else | ||
#define SECTION_DATA_PROLOGUE(name, options, align) name options align : | ||
#endif | ||
|
||
#define SORT_BY_NAME(x) SORT(x) | ||
|
||
#endif /* ZEPHYR_INCLUDE_LINKER_LINKER_TOOL_MWDT_H_ */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters