C-Funktion zur Ausrichtung des GCC
Ich versuche, byte-align-Funktion in 16-byte-Grenze mit dem 'aligned(16)' - Attribut. Ich habe die folgenden: void __attribute__((aligned(16))) function() { }
(Quelle: http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html)
Aber wenn ich kompilieren (gcc foo.c ; keine makefiles oder linker-Skripte verwendet), bekomme ich die folgende Fehlermeldung:
FOO.c:99: Fehler: "Ausrichtung" kann nicht angegeben werden, für die 'Funktion'
Habe ich versucht ausrichten zu 4,8,32, etc, aber der Fehler bleibt der gleiche.
Ich brauche das ausrichten einer Interrupt Service Routine für einen powerpc-basierten Prozessor. Was ist der richtige Weg, dies zu tun ?
- Warum wollen Sie dies tun?
- Die OP erklärt hat, warum genau Sie brauchen, um dies zu tun, im vorletzten Satz.
- Eine andere herrlich böse verwenden Sie zum ausrichten von Funktionen ist die Speicherung zusätzlicher Daten in der niedrigen bits von Funktions-Zeiger-Variablen...
- böse. Genauso wie die Speicherung im high-byte von 32-bit-Adressen auf den 680EC30 oder 68000-Prozessoren. Sehr böse Tat.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Warum nimmst du nicht einfach die -falign-Funktionen=16, dass gcc beim kompilieren?
Anpassung von meine Antwort auf dieser GCC Frage, können Sie versuchen, #pragma-Direktiven, etwa so:
Den
#pragma push_options
undpop_options
Makros werden verwendet, um den Umfang der Kontrolle deroptimize
pragma-Effekt. Weitere Informationen zu diesen Makros finden Sie in der GCC-docs.Alternativ, wenn Sie bevorzugen GCC Attribut-syntax, Sie sollten in der Lage sein, etwas zu tun:
Vermutlich verwenden Sie eine ältere version von gcc nicht unterstützt dieses Attribut. Der link zur Dokumentation ist für die "aktuelle Entwicklung" des gcc. Auf der Suche durch die verschiedenen Versionen, die das Attribut erscheint nur in der Dokumentation für den gcc 4.3 und darüber hinaus.