[英]Why is gcc emmiting code aligned to a 2 byte boundary for the ARM instruction set?
我正在检查我正在使用GCC(Android NDK中包含的版本)为ARM Android平台编译的C程序的汇编语言输出。
我指定的ARM指令集长度为4个字节而不是THUMB,但令人惊讶的是,emmited汇编语言代码将函数与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)
任何人都可以发现我做错了什么,或者知道如何强制执行正确的代码对齐? 非常感谢你提前!
根据汇编程序的文档 , .align
伪op指定ARM体系结构的2的幂。 因此,对齐是2 ^ 2 = 4个字节,这是正确的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.