Linux, 工作, 生活, 家人

Embedded

arm gcc 的幾個 flag.

arm gcc 早期的版本和目前的版本(3.4.2), 在參數上有幾個小差異

-mshort-load-bytes
-mapcs-32
-malignment-traps

根據 Renaming -mshort-load-bytes 的說法是將 “-mshort-load-bytes” 改成 “-malignment-traps”

而 “-mshort-load-bytes” 在新的 gcc 是 default enable (也就是拿掉這個選項了)
至於 apcs-32 是使用 ARM Processor count 32 bit 的模式, 不過我現在用的 CPU 不支援 26bit 的模式, 所以這個也免了.
而 “-malignment-traps” 在新版的 gcc 預設也是開啟的.

奇怪的是, linux kernel 內的寫法是

CFLAGS_ABI :=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)
CFLAGS +=$(CFLAGS_ABI) $(arch-y) $(tune-y) $(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,)) -msoft-float -Uarm

看起來應該是會去檢查 CC 是不是有 apcs-32 的支援, 如果有, 會加入這個參數, 不過實際上使用時是會直接加入這個參數, 在 kernel compile 時會 compile 不過, 然後我就很白爛的改成

CFLAGS_ABI :=$(call cc-option,-mabi=apcs-gnu)
CFLAGS +=$(CFLAGS_ABI) $(arch-y) $(tune-y) $(call cc-option,$(call cc-option,-malignment-traps,)) -msoft-float -Uarm

也就是直接移掉的意思………
真是一整個 Orz

發佈留言