有沒有辦法讓GNU成爲只能在.S文件中擴展.macro指令,生成另一個不帶它們的.S文件?熟悉什麼gcc -E用C代碼。GNU as .macro指令擴展
請注意,這是關於彙編器.macro指令,如下面的代碼而不是關於C風格的#define宏,它們可以通過cpp擴展。
.macro my_macro src, so, dest
movl \so+10(\src), %r8d
有沒有辦法讓GNU成爲只能在.S文件中擴展.macro指令,生成另一個不帶它們的.S文件?熟悉什麼gcc -E用C代碼。GNU as .macro指令擴展
請注意,這是關於彙編器.macro指令,如下面的代碼而不是關於C風格的#define宏,它們可以通過cpp擴展。
.macro my_macro src, so, dest
movl \so+10(\src), %r8d
也許你可以使用 'cpp
',而不是評估的宏:
> cpp -P file.S
或宏展開後組裝:
> cpp -P file.S | as -o file.o
這不起作用,因爲它期望C風格的宏(#define)。我的問題是評估彙編宏(.macro)。 – 2012-01-31 10:18:31
GNU的預處理器doesn't handle.include
和作爲一切g從一個點開始實際上是一個彙編指令;因此,宏擴展是沿着程序集進行的,並且不能單獨完成,至少通過as來完成。
您有以下選擇:
當您使用.S
(大寫)擴展名來擴展用於填充氣體的彙編文件時,默認執行C型宏處理,並且還可以調用C預處理器獨立命令cpp
這是對問題的一個很好的說明(+1),但我不能接受「查找/寫你自己」作爲解決方案。 – 2016-12-07 16:33:24
不完全是這樣,但嘗試列表選項(例如, -alms)。 – 2012-01-30 14:45:21
我在man page中也發現了這個問題,但它並不能解決問題。 – 2012-01-30 15:10:45
從你的(刪除的)答案中,聽起來你可能試圖實現「爲OSX編譯GNU彙編語法文件」;上次我需要這樣做時,我使用了'objdump'和一個文本編輯器來構建一個完整的'.byte'指令的文件文件。可怕的,但它的工作。大多。 – 2013-12-11 13:15:59