¿Por qué gcc emmiting código alineado a un límite de 2 bytes para el conjunto de instrucciones ARM?

Estoy inspeccionando la salida de lenguaje ensamblador de un programa C que estoy compilando para la plataforma ARM de Android usando GCC (la versión incluida en el Android NDK).

Estoy especificando el conjunto de instrucciones ARM que son 4 bytes de longitud en lugar de THUMB, pero sorprendentemente, el código de lenguaje ensamblado emmited es alinear las funciones a un límite de 2 bytes!

Aquí hay una muestra del código generado que muestra la directiva .align incorrecta:

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

De acuerdo con este documento , la alineación correcta debe ser 4 que tiene sentido.

Estoy tratando de forzar la alineación utilizando las funciones -falign = 4, pero se está ignorando.

Aquí están los indicadores de construcción que estoy especificando en el archivo Android.mk

 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) 

¿Puede alguien detectar lo que estoy haciendo mal, o saber cómo puedo aplicar la alineación de código correcto? ¡Muchas gracias por adelantado!

De acuerdo con la documentación del ensamblador , el pseudo op .align especifica una potencia de dos para la arquitectura ARM. Por lo tanto, la alineación es 2 ^ 2 = 4 bytes, lo cual es correcto.

  • ¿Cuál es la diferencia en GCC entre -std = gnu ++ 0x y -std = c ++ 0x y cuál debe ser utilizado?
  • Cómo compilar GCC para android?
  • Arm-linux-androideabi-gcc no puede crear un ejecutable - compilar ffmpeg para dispositivos android armeabi
  • ¿Tiene soporte para Android?
  • Comparación entre QAbstractButton y QPushButton * carece de un molde
  • Construir android con clang en lugar de gcc? Y el clang stl lib en lugar de gnustl lib?
  • Compile el código C en Android Phone
  • gcc disable -Wall flag para archivos / carpetas específicos
  • Compilación cruzada de GCC con newlib para ARM: cómo especificar opciones de GCC como -march?
  • ¿Por qué arm-linux-androideabi-gcc da error de iostream
  • Gcc en el brazo / android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.