gcc - 從C GCC ( 裸金屬) 調用ARM程序集

  显示原文与译文双语对照的内容
67 3

我正在嘗試在ARM中做一些裸金屬編程,並在QEMU上測試。每當我從C 中調用一個ARM標籤時,我的程序掛起。在這個代碼中,我有一個簡單的代碼示例顯示了問題,當我在這個代碼中調用 activate() 時,它將掛起。

我已經經觀察到,當我從程序集到C 代碼( 從 _start ) 時,它會生成一個小的包裝器來切換到拇指。看起來C 代碼都是用拇指指令生成的,但是我所有的程序集都是在 ARM ( 32位 ) 指令中生成的。我不知道這是為什麼或者如何修復它。

时间:原作者:0个回答

77 3

為了從C 中定義的THUMB模式函數中調用assembly模式函數,需要在程序集中定義符號,而工具的( Linaro gcc ) 將生成 blx 指令,而不是 bl

例如:

@ Here, we suppose that this part of code is inside of. code 32
.type fn, %function
fn:
 mov pc, lr
原作者:
...