const volatile behaviour change in GCC 7
Sergey Organov
sorganov@gmail.com
Thu Sep 22 17:19:00 GMT 2016
Sebastian Huber <sebastian.huber@embedded-brains.de> writes:
> On 22/09/16 14:11, Sergey Organov wrote:
>> Sebastian Huber <sebastian.huber@embedded-brains.de> writes:
>>> Hello,
[...]
>> Alternatively, try (untested, and I removed attributes to make my point
>> clearer):
>>
>> /* Linker-defined symbols */
>>
>> rtems_sysinit_item const _Linker_set__Sysinit_begin[0]
>> __attribute__((__section__(".rtemsroset." "_Sysinit" ".begin")))
>> __attribute__((__used__));
>>
>> rtems_sysinit_item const _Linker_set__Sysinit_end[0]
>> __attribute__((__section__(".rtemsroset." "_Sysinit" ".end")))
>> __attribute__((__used__));
>>
>> /* Get volatile pointers to the above */
>> static rtems_sysinit_item const *volatile begin_ = _Linker_set__Sysinit_begin;
>> static rtems_sysinit_item const *volatile end_ = _Linker_set__Sysinit_end;
>>
>> void rtems_initialize_executive(void)
>> {
>> rtems_sysinit_item const *cur = begin_;
>> rtems_sysinit_item const *end = end_;
>>
>> while(cur != end) {
>> cur->handler();
>> ++cur;
>> }
>> }
>>
>>
>
> I don't want any storage for these begin/end markers.
Why? 8 more bytes in context of RTEMS? It likely doesn't matter. At all.
-- Sergey
More information about the Gcc
mailing list