Μπορεί ένα gcc πρόγραμμα ανιχνεύει όταν είναι ενεργοποιημένη η βελτιστοποίηση του χρόνου σύνδεσμο (-flto);

ψήφοι
1

Δεν έχω κάποιο κώδικα που ΠΡΕΠΕΙ να έχουν τη βελτιστοποίηση του χρόνου σύνδεσμο σε θέση να λειτουργήσει σωστά. Χρειάζομαι συνεχή αξιολόγηση έκφραση:

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

(PROGMEM είναι ένα κατασκεύασμα avr-gcc που βάζει το σταθερό σε ένα ξεχωριστό τμήμα μνήμης που στη συνέχεια φορτώνονται σε flash αντί ram, και σε εκτέλεση χρόνο θα χρειαστεί ιδιαίτερη προσοχή στην πρόσβαση. Αλλά όχι κατά τη μεταγλώττιση ...)

Υπάρχει κάποιος τρόπος που μπορώ να εντοπίσει κατά τη μεταγλώττιση (ή χρόνο link) που -flto δεν έχει καθοριστεί, έτσι ώστε να μπορώ να εκδώσει ένα μήνυμα σφάλματος εκεί;

Έχω ήδη σε σύγκριση με τα προκαθορισμένα σύμβολα με και χωρίς -flto τη χρήση του «-dM -Ε» τέχνασμα, και δεν φαίνεται να υπάρχουν διαφορές. Οποιαδήποτε ιδέα για άλλα κόλπα;

(Θα πρέπει να __builtin_constant_p () να «αξιολογηθούν» σε χρόνο σύνδεσμο για -flto; Δεν είναι από gcc 5.4.0 (πιο πρόσφατη «πωλητής υποστηρίζεται» avr compiler.))

Δημοσιεύθηκε 08/11/2018 στις 00:01
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
0

Ένας τρόπος είναι να προσπαθήσει να δοκιμάσει μια εξωτερική καθολική μεταβλητή για μια αδύνατη τιμή:

// foo.c
const int LTO_in_use = 1;

και

// 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();
    }
}

Κάθε καθολική μεταβλητή θα λειτουργήσει, εφ 'όσον ξέρετε μια αδύνατη τιμή. Αν αποφασίσετε να δημιουργήσετε μια specifc νέα μεταβλητή, δεν πρέπει ποτέ πραγματικά να καταλήξει να αναφέρεται στο χρόνο εκτέλεσης, γι 'αυτό θα πάρει GC'ed από LTO ούτως ή άλλως.

Απαντήθηκε 09/11/2018 στις 02:51
πηγή χρήστη

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