Difference between revisions of "Placing external library symbols at specific address"
(Created page with "One of the big benefits of the SEGGER Linker is its simple usage. In this scenario an external library will be placed in a specific memory location. * Usually everything is pl...") |
|||
Line 1: | Line 1: | ||
− | One of the big benefits of the SEGGER Linker is its simple usage. |
+ | One of the big benefits of the SEGGER Linker is its simple usage. |
+ | In this scenario an external library will be placed in a specific memory location. |
||
− | * Usually everything is placed under .text section. Check your symbol browser or map file to locate how the subsection of the external library is called. For this example we will show how the libc library can be placed into a different Flash memory region. |
||
+ | * Usually everything is placed under .text section. Check your symbol browser or map file to locate how the subsection of the external library is called. For this example we will show how the libc library can be placed into a different memory region. |
||
* Open your projects linker script(.icf file) for editing. |
* Open your projects linker script(.icf file) for editing. |
||
+ | * Add a new placement for your particular library subsection into the desired region. e.g. |
||
− | * Make sure the memory regions you are looking to use are defined in your memory map file or in project settings in memory segments. e.g. |
||
− | <pre>define region FLASH = FLASH1; |
||
− | define region FLASH_LIB = FLASH2;</pre> |
||
− | * Add a new Flash placement for your particular library subsection e.g. |
||
<pre> |
<pre> |
||
− | place in |
+ | place in MEM_LIB { section .text.libc, section .text.libc.*}; |
</pre> |
</pre> |
||
− | * In the general |
+ | * In the general placement where other code sections are placed, add an exception for this subsection otherwise the linker will throw an error that the same symbols are linked twice. |
<pre> |
<pre> |
||
place in FLASH with minimum size order { section .init, section .init.*, // Init code section |
place in FLASH with minimum size order { section .init, section .init.*, // Init code section |
||
Line 21: | Line 19: | ||
except { section .text.libc, section .text.libc.*}; |
except { section .text.libc, section .text.libc.*}; |
||
</pre> |
</pre> |
||
− | * Now everything should be set up and all libc function should be linked into region |
+ | * Now everything should be set up and all libc function should be linked into region MEM_LIB. |
Revision as of 15:40, 14 January 2020
One of the big benefits of the SEGGER Linker is its simple usage. In this scenario an external library will be placed in a specific memory location.
- Usually everything is placed under .text section. Check your symbol browser or map file to locate how the subsection of the external library is called. For this example we will show how the libc library can be placed into a different memory region.
- Open your projects linker script(.icf file) for editing.
- Add a new placement for your particular library subsection into the desired region. e.g.
place in MEM_LIB { section .text.libc, section .text.libc.*};
- In the general placement where other code sections are placed, add an exception for this subsection otherwise the linker will throw an error that the same symbols are linked twice.
place in FLASH with minimum size order { section .init, section .init.*, // Init code section section .init_rodata, section .init_rodata.*, // Init read-only section section .text, section .text.*, // Code section section .rodata, section .rodata.*, // Read-only data section section .segger.*, // Auto-generated initialization block exidx, // ARM exception unwinding block block ctors, // Constructors block block dtors } // Destructors block except { section .text.libc, section .text.libc.*};
- Now everything should be set up and all libc function should be linked into region MEM_LIB.