diff options
| author | Bernard Xiong <[email protected]> | 2014-11-01 14:12:58 +0800 |
|---|---|---|
| committer | Bernard Xiong <[email protected]> | 2014-11-01 14:12:58 +0800 |
| commit | 1974bec8bf09e2e4e26bfc67ae0664c1b032eaae (patch) | |
| tree | 8e82a9fbd9ac92f2fb355f9be2d3cda8826b56c3 /components/cplusplus/README.md | |
| parent | 38be10cf89958872e15e650ba1271b234554d7e6 (diff) | |
[C++] fix the ctors initialization issue
Diffstat (limited to 'components/cplusplus/README.md')
| -rw-r--r-- | components/cplusplus/README.md | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/components/cplusplus/README.md b/components/cplusplus/README.md index cd133effaa..44851db56b 100644 --- a/components/cplusplus/README.md +++ b/components/cplusplus/README.md @@ -10,4 +10,44 @@ Because RT-Thread RTOS is used in embedded system mostly, there are some rules f 4. Static class variables are discouraged. The time and place to call their constructor function could not be precisely controlled and make multi-threaded programming a nightmare. 5. Multiple inheritance is strongly discouraged, as it can cause intolerable confusion. -*NOTE*: For armcc compiler, the libc must be enable. +*NOTE*: The libc must be enable. + +About GNU GCC compiler + +please add following string in your ld link script: +// in your .text section + PROVIDE(__ctors_start__ = .); + /* old GCC version uses .ctors */ + KEEP(*(SORT(.ctors.*))) + KEEP(*(.ctors)) + /* new GCC version uses .init_array */ + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array)) + PROVIDE(__ctors_end__ = .); + + . = ALIGN(4); + +// as a standalone section if you use ARM target. + + /* The .ARM.exidx section is used for C++ exception handling. */ + /* .ARM.exidx is sorted, so has to go in its own output section. */ + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + + /* This is used by the startup in order to initialize the .data secion */ + _sidata = .; + } > CODE + __exidx_end = .; + + /* .data section which is used for initialized data */ + +// in your .data section + PROVIDE(__dtors_start__ = .); + KEEP(*(SORT(.dtors.*))) + KEEP(*(.dtors)) + PROVIDE(__dtors_end__ = .); + + . = ALIGN(4); + |
