Difference between revisions of "Ld"

From Wiki at Neela Nurseries
Jump to: navigation, search
m (Memory Use Report using ld.)
m (Memory Use Report - add link to Phillip Johnston article on correct memory use reporting via linker script crafting.)
 
Line 69: Line 69:
  
 
== Memory Use Report ==
 
== Memory Use Report ==
 +
 +
The GNU linker `ld` can report memory usage based on linker scripts parsing.  Following links to external articles go into some detail about this facility.
  
 
*  https://embeddedartistry.com/blog/2020/08/17/three-gcc-flags-for-analyzing-memory-usage/
 
*  https://embeddedartistry.com/blog/2020/08/17/three-gcc-flags-for-analyzing-memory-usage/
 +
 +
A good article by Phillip Johnston which describes how linker scripts provide for accurate or inaccurate memory use reporting:
 +
 +
*  https://embeddedartistry.com/blog/2023/03/01/configuring-a-linker-script-for-accurate-linker-memory-usage-reporting/
  
 
<!-- EOF -->
 
<!-- EOF -->

Latest revision as of 15:42, 13 March 2025

GNU and LLVM linker notes.

Overview

This NN page a starting point for notes, links to external references and examples of `ld` linker scripts. As of page creation time 2024 Q1 there appear to be two major linker variants: GNU ld and LLVM linker implementation.

Introductory References

Use of 'KEEP' key word in linker scripts:

How to place C global variables at a particular address:

A reference to gcc linker documentation:


2024-08-05 MON

Interesting linker script macro in one of Zephy's header files . . .

"
167 
168 #ifndef BUILD_ASSERT
169 /* Compile-time assertion that makes the build to fail.
170  * Common implementation swallows the message.
171  */
172 #define BUILD_ASSERT(EXPR, MSG...) \
173         enum _CONCAT(__build_assert_enum, __COUNTER__) { \
174                 _CONCAT(__build_assert, __COUNTER__) = 1 / !!(EXPR) \
175         }
176 #endif
177 
178 /*
179  * This is meant to be used in conjunction with __in_section() and similar
180  * where scattered structure instances are concatenated together by the linker
181  * and walked by the code at run time just like a contiguous array of such
182  * structures.
183  *
184  * Assemblers and linkers may insert alignment padding by default whose
185  * size is larger than the natural alignment for those structures when
186  * gathering various section segments together, messing up the array walk.
187  * To prevent this, we need to provide an explicit alignment not to rely
188  * on the default that might just work by luck.
189  *
190  * Alignment statements in  linker scripts are not sufficient as
191  * the assembler may add padding by itself to each segment when switching
192  * between sections within the same file even if it merges many such segments
193  * into a single section in the end.
194  */
195 #define Z_DECL_ALIGN(type) __aligned(__alignof(type)) type
196 

"~/projects-sandbox/workspace-for-nexus/zephyr/include/zephyr/toolchain/common.h" 214 lines --99%--

Memory Use Report

The GNU linker `ld` can report memory usage based on linker scripts parsing. Following links to external articles go into some detail about this facility.

A good article by Phillip Johnston which describes how linker scripts provide for accurate or inaccurate memory use reporting: