我正在使用gas並試圖對齊16字節的.lcomm緩衝區。Gas .align指令無法正常工作
代碼:
.align 16
.lcomm Buffer, size
但檢查緩衝區的使用萊亞爾指令的地址的時候。它似乎沒有對齊。我認爲.align指令無法正常工作。
請問您有什麼想法嗎?
我正在使用gas並試圖對齊16字節的.lcomm緩衝區。Gas .align指令無法正常工作
代碼:
.align 16
.lcomm Buffer, size
但檢查緩衝區的使用萊亞爾指令的地址的時候。它似乎沒有對齊。我認爲.align指令無法正常工作。
請問您有什麼想法嗎?
當然,它工作正常,但你用它錯了。 manual says:
某些目標允許第三個參數與.lcomm一起使用。此 參數指定bss中的符號所需的對齊方式 部分。
所以正確的代碼是.lcomm Buffer, size, 16
。 請注意,.align
不會影響.lcomm
,特別是如果您不在.bss
部分。如果要手動分配物料,請切換到.bss
,然後使用.align
,然後使用.space
而不是.lcomm
進行分配。
此外,manual gives a workaround suggestion爲:
爲目標,其中.lcomm指令(見lcomm命令)不接受 對準的說法,這是大多數ELF目標的情況下,。本地 指令可以與.comm結合使用(參見Comm),以定義對齊的本地公用數據 。
事實上,在x86 ELF對齊參數不被支持,那麼實施這種方法看起來像:(感謝@wumpus-q-wumbley指出這一點)
.local Buffer
.comm Buffer, size, 16
也有一個建議根據['.local'](https://sourceware.org/binutils/docs/as/Local.html)在不支持第三個參數的目標上使用'.local'和'.comm'。 –