¿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!
- GCC cree que estoy ejecutando x86
- CMake para Android con Qt Creator - Bug
- ¿Cómo utilizar los encabezados precompilados en el proyecto Android NDK?
- Bambuser ffmpeg - "arm-linux-androideabi-gcc no puede crear un archivo ejecutable."
- Soporte de archivos grandes no funciona en Android
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!
- Cómo compilar un programa C para Genymotion (Android x86)
- Advertencia de ARM: swp {b} use está obsoleto para esta arquitectura
- OpenSSL compilado para ejecutarse en la arquitectura x86 de Android
- Cómo utilizar el compilador arm-linux-androideabi
- ¿Cómo ejecuto un binario compilado en Android?
- ¿Cómo enlazar con bibliotecas estáticas para Android?
- Convierta un comando gcc a CMake para android ndk
- Cómo cambiar entre gcc y clang en Android NDK Revision 11?
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.
- Actividad del asistente de actividad de pantalla completa. ¿Cómo dejo de mostrar la barra de acción cuando interactúo con el dispositivo?
- Mejor método de ver la salida de "bugreport adb"? “