簡體   English   中英

為什么gcc發送代碼與ARM指令集的2字節邊界對齊?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM