Warum ist gcc emission Code auf eine 2-Byte-Grenze für die ARM-Befehlssatz ausgerichtet?

Ich bin Inspektion der Assembler-Sprache Ausgabe eines C-Programms Ich bin für die ARM Android-Plattform mit GCC (die Version in der Android NDK enthalten) kompilieren.

Ich spezifiziere die ARM-Befehlssatz, die 4 Bytes in der Länge statt THUMB sind, aber überraschenderweise ist der emmited Assembler-Sprachcode die Ausrichtung von Funktionen auf eine 2-Byte-Grenze!

  • Kann ich startService von Application # onCreate () starten?
  • Android UI: Wann kann ich eine Ansicht direkt ändern?
  • Android E-Mail EditText Validierung
  • Konvertieren von APK in JAR
  • Wie man den Handlungsmodus "fertig" richtig korrigiert?
  • Wie man Tablet nur Android-App mit Vektor-Zeichnen veröffentlichen kann
  • Hier ist ein Beispiel des generierten Codes, der die falsche .align-Direktive zeigt:

    .Ltext0: .global __aeabi_dmul .global __aeabi_d2iz .section .text.InitializeFIRFilter,"ax",%progbits .align 2 .global InitializeFIRFilter .type InitializeFIRFilter, %function InitializeFIRFilter: .fnstart 

    Nach diesem Dokument sollte die korrekte Ausrichtung 4 sein, was sinnvoll ist.

    Ich versuche, die Ausrichtung mit den -falign-functions = 4 zu erzwingen, aber es wird ignoriert.

    Hier sind die Build-Flags, die ich in der Android.mk-Datei spezifiziere

     LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_ARM_MODE := arm LOCAL_MODULE := nativeJadeMobile LOCAL_SRC_FILES := nativeJadeMobile.c fftasm.s LOCAL_LDLIBS := -llog LOCAL_CFLAGS += -marm -ffast-math -O2 -march=armv6 -falign-functions=4 -save-temps -S include $(BUILD_SHARED_LIBRARY) 

    Kann jemand vorstellen, was mache ich falsch, oder weiß, wie kann ich die korrekte Codeausrichtung erzwingen? Vielen Dank im Voraus!

  • Android Studio ADB Verbindung droht verdrahtet angeschlossenen Gerät seit 2.2 auf Macintosh
  • Kann ich den aktuellen Live-TV-Feed in einer Vollbild-googleTV-App anzeigen
  • Installieren von Android App auf dem Gerät von Android Studio
  • Android Volley Delete Methode, warum wird leere Parameter senden
  • Scan Android SD-Karte für neue Dateien
  • Android SDK Build Tool mehrere Versionen
  • One Solution collect form web for “Warum ist gcc emission Code auf eine 2-Byte-Grenze für die ARM-Befehlssatz ausgerichtet?”

    Nach der Dokumentation des Assemblers gibt das .align pseudo op eine Potenz von zwei für die ARM-Architektur an. Daher ist die Ausrichtung 2 ^ 2 = 4 Bytes, was korrekt ist.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.