Kann ein gcc-Programm erkennen, wenn Link Zeitoptimierung (-flto) aktiviert ist?

stimmen
1

Ich habe einige Code, um korrekt zu arbeiten aktiviert sein, Link Zeitoptimierung haben. Ich muss konstanter Ausdruck Auswertung von:

  extern const char[] PROGMEM constantTable = {1,2,3,4,5};
    :
   char x = constantTable[4];

(PROGMEM ist ein avr-gcc - Konstrukt, das das Konstante in einem separaten Speicherbereich setzt , die anschließend in Flash geladen wird , statt Widdern und zur Ausführungszeit benötigt besondere Pflege zu erreichen. Aber nicht bei der Kompilierung ...)

Gibt es eine Möglichkeit, dass ich bei der Kompilierung (oder Link Zeit) erkennen kann, dass -flto nicht angegeben hat, so dass ich eine Fehlermeldung ausgeben kann?

Ich habe schon im Vergleich die vordefinierten Symbole mit und ohne -flto mit dem „dM -E“ Trick, und es scheinbar keine Unterschiede. Jede Idee, für andere Tricks?

(Sollte __builtin_constant_p () für -flto „ausgewertet“ beim Linken werden? Es ist nicht so von gcc 5.4.0 (neueste „Anbieter unterstützt“ avr-Compiler.))

Veröffentlicht am 08/11/2018 um 00:01
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
0

Eine Möglichkeit ist, zu versuchen, eine externe globale Variable für einen unmöglichen Wert zu testen:

// foo.c
const int LTO_in_use = 1;

und

// bar.c
#include <stdio.h>
extern int LTO_in_use;
void LTO_Not_Enabled(void) __attribute__ (( error("") ));

int main() {
    if (LTO_in_use == 99) {
        LTO_Not_Enabled();
    }
}

Jede globale Variable wird funktionieren, solange Sie einen unmöglichen Wert kennen. Wenn Sie eine neue Variable specifc tun erstellen, sollte es eigentlich nie am Ende der Laufzeit Bezug genommen wird, so wird es von lto sowieso bekommen GC'ed.

Beantwortet am 09/11/2018 um 02:51
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more