1 /*
2  * Copyright (c) 2023, Google, Inc.
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 /**
8  * @file
9  * @brief LLVM LLD linker defs
10  *
11  * This header file defines the necessary macros used by the linker script for
12  * use with the LLD linker.
13  */
14 
15 #ifndef ZEPHYR_INCLUDE_LINKER_LINKER_TOOL_LLD_H_
16 #define ZEPHYR_INCLUDE_LINKER_LINKER_TOOL_LLD_H_
17 
18 #include <zephyr/linker/linker-tool-gcc.h>
19 
20 /**
21  * @def SECTION_PROLOGUE
22  *
23  * The SECTION_PROLOGUE() macro is used to define the beginning of a section.
24  *
25  * When --omagic (-N) option is provided to LLD then only the first output
26  * section of given region has aligned LMA (by default, without --omagic, LLD
27  * aligns LMA and VMA of every section to the same value) and the difference
28  * between VMA addresses (0 is this is the first section) is added.
29  * The difference between LMA and VMA is constant for every section, so this
30  * emulates ALIGN_WITH_INPUT option present in GNU LD (required by XIP systems).
31  *
32  * The --omagic flag is defined in cmake/linker/lld/target_baremetal.cmake
33  *
34  * @param name Name of the output section
35  * @param options Section options, such as (NOLOAD), or left blank
36  * @param align Alignment directives, such as SUBALIGN(). May be blank.
37  */
38 #undef SECTION_PROLOGUE
39 #define SECTION_PROLOGUE(name, options, align) \
40 	name options : align
41 
42 /**
43  * @def SECTION_DATA_PROLOGUE
44  *
45  * Same as for SECTION_PROLOGUE(), except that this one must be used
46  * for data sections which on XIP platforms will have differing
47  * virtual and load addresses (i.e. they'll be copied into RAM at
48  * program startup).  Such a section must also use
49  * GROUP_DATA_LINK_IN to specify the correct output load address.
50  *
51  * This is equivalent to SECTION_PROLOGUE() when linking using LLD.
52  *
53  * @param name Name of the output section
54  * @param options Section options, or left blank
55  * @param align Alignment directives, such as SUBALIGN(). May be blank.
56  */
57 #undef SECTION_DATA_PROLOGUE
58 #define SECTION_DATA_PROLOGUE(name, options, align) \
59 	SECTION_PROLOGUE(name, options, align)
60 
61 #endif /* ZEPHYR_INCLUDE_LINKER_LINKER_TOOL_LLD_H_ */
62