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!

  • Android Fehler beim Aufblasen der Klasse SwipeRefreshLayout
  • Sortieren einer Liste der Karten <String, String>
  • Schließen der Datenbank in einem ContentProvider
  • Wie kann man erkennen, wann der Benutzer ein- und ausschaltet?
  • Android Emulator: Wählen Sie AVD (Android Virtual Device) standardmäßig aus
  • Android Service: onBind (Intent) und onUnbind (Intent) wird nur einmal genannt
  • 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!

  • Fehler beim Auflösen: com.google.firebase: firebase-core: 9.0.0
  • Wie kann man die Farbe der aktuellen Schriftrolle in ScrollView android ändern?
  • HttpURLConnection funktionierte gut in Android 2.x aber NICHT in 4.1: Keine Authentifizierungsherausforderungen gefunden
  • Android-Verbrauchsmaterial: "bereits besitzen dieses Element" aber inventory.hasPurchase () ist falsch
  • So stoppen Sie die Soft-Tastatur, die automatisch angezeigt wird, wenn der Fokus geändert wird (OnStart-Ereignis)
  • Sicherer Nummernkreis für meine eigenen IDs im dynamischen Layout?
  • 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.