Почему код gcc emmiting выровнен с границей 2 байта для набора команд ARM?

Я проверяю вывод ассемблера программы C, которую я компилирую для платформы Android ARM, используя GCC (версия, включенная в Android NDK).

Я указываю набор команд ARM длиной 4 байта, а не THUMB, но удивительно, что код языка ассемблерных ассемблеров совмещает функции с 2-байтовой границей!

Вот пример сгенерированного кода, показывающий неправильную директиву .align:

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

Согласно этому документу , правильное выравнивание должно быть 4, что имеет смысл.

Я пытаюсь заставить выравнивание, используя -falign-functions = 4, но игнорируется.

Вот флагов сборки, которые я указываю в файле 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) 

Кто-нибудь может понять, что я делаю неправильно, или знаю, как я могу обеспечить правильное выравнивание кода? Заранее большое спасибо!

Solutions Collecting From Web of "Почему код gcc emmiting выровнен с границей 2 байта для набора команд ARM?"