This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
David Brown<david@westcontrol.com> writes:
Some toolchains are configured to have a series of "init" sections at startup (technically, that's a matter of the default linker scripts and libraries rather than the compiler). You can get code to run at specific times during startup by placing the instructions directly within these sections - but it must be "raw" instructions, not function definitions (and definitely no "return" statement).
Note that this only works with modern gcc with -fno-reorder-toplevel, which disables some optimizations, and is currently broken in several ways with LTO (in progress of being fixed)
void my_init_portb (void) __attribute__ ((naked)) __attribute__ ((section (".init3"))); void my_init_portb (void) { PORTB = 0xff; DDRB = 0xff; }
Normally you don't get any defined order in these sections, both unit-at-a-time and LTO do reorder. The linker may also in some circumstances.
So it's somewhat dangerous to rely on.
-Andi
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |