@@ -97,10 +97,42 @@ SECTIONS
9797 *(.glue_7 )/* glue arm to thumb code*/
9898 *(.glue_7t )/* glue thumb to arm code*/
9999
100+ KEEP (*(.init ))
101+ KEEP (*(.fini ))
102+
100103 . =ALIGN (4 );
101104 _etext = .;
102105 } >FLASH
103106
107+ .preinit_array (READONLY) :
108+ {
109+ . =ALIGN (4 );
110+ PROVIDE_HIDDEN (__preinit_array_start = .);
111+ KEEP (*(.preinit_array *))
112+ PROVIDE_HIDDEN (__preinit_array_end = .);
113+ . =ALIGN (4 );
114+ } >FLASH
115+
116+ .init_array (READONLY) :
117+ {
118+ . =ALIGN (4 );
119+ PROVIDE_HIDDEN (__init_array_start = .);
120+ KEEP (*(SORT (.init_array .*)))
121+ KEEP (*(.init_array *))
122+ PROVIDE_HIDDEN (__init_array_end = .);
123+ . =ALIGN (4 );
124+ } >FLASH
125+
126+ .fini_array (READONLY) :
127+ {
128+ . =ALIGN (4 );
129+ PROVIDE_HIDDEN (__fini_array_start = .);
130+ KEEP (*(SORT (.fini_array .*)))
131+ KEEP (*(.fini_array *))
132+ PROVIDE_HIDDEN (__fini_array_end = .);
133+ . =ALIGN (4 );
134+ } >FLASH
135+
104136/* used by the startup to initialize data*/
105137 _sidata =LOADADDR (.data );
106138