2017-05-18 21 views
0

我使用GCC爲使一些powerpc64可執行文件,但有時職能之間,我有以下錯誤:ScreenshotGCC PPC64對齊功能

powerpc的指令格式仍然在4個字節,我嘗試了一些gcc的命令(-fno -align-functions),但編譯器仍然在函數之間填充字節。

我希望我的函數在前面的函數結束後直接啓動,沒有任何值/零填充(在截圖中函數應該從0x124開始)。

謝謝。

回答

1

PPC64 ABI指定追加到函數的追蹤表。零可能是由於回溯表而與校準無關。嘗試使用命令行選項 -mtraceback=no

0

除了在上一個答案中提到的回溯表問題之外,函數通常在16字節的邊界上對齊。這對於各種原因很重要,包括編譯器可以將熱循環與​​16字節邊界對齊以提高icache性能。從GCC彙編代碼將有一個像指令:

.p2align 4日,15

每個函數定義執行此之前。所以即使沒有追蹤表,你的函數也不會從地址0x124開始,而不需要付出更多努力。

此行爲可以使用-fno-align-functions或使用優化級別-Os(優化大小)覆蓋。我已經嘗試了這兩種方法,並且都刪除了.p2align指令。使用-fno-align-functions是最好的,除非你真的想要更小和可能更慢的代碼。

(如果您正在使用-O0或-O1編譯,你將不會看到任何指示,但我們不建議在大小或速度如此低的優化級別進行編譯。)