[英]Error: lo register required when build libunwind in android ndk
我想在 Eclipse 中使用 ndk r10d 從 Android 源代碼構建 libunwind。 但是我在編譯 "Gresume.c" 時失敗了,它在 asm code 上也失敗了。 我看不懂匯編代碼,我搜索了任何地方都找不到有同樣問題的人,所以我希望有人能幫助我。
錯誤代碼行是:
asm __volatile__ (
"ldmia %0, {r4-r12, lr}\n"
"mov sp, r12\n"
"bx lr\n"
: : "r" (regs) ,
"m" (*(struct regs_overlay *)regs)
);
錯誤輸出:
[armeabi] 編譯拇指:MyBacktrace <= Gresume.c /var/folders/g7/9gd3cwy96z12qt3vlf7sc5q80000gn/T//cc6jsBSj.s:匯編程序消息:/var/folders/g7/9gd3cwy96js0fj0s0cc:/var/folders/g7/9gd3cwy96z12qt3vlf7sc5q80000gn/T//cc6jsBSj.s : 需要注冊 -- `ldmia r2,{r4-r12,lr}' make: *** [obj/local/armeabi/objs/MyBacktrace/libunwind/src/arm/Gresume.o] 錯誤 1
完整代碼可以在下面的鏈接中找到。
您似乎正在構建 Thumb 代碼,所以我猜您看到這一點是因為您針對的是錯誤的架構版本。 傳統上,大多數 Thumb 指令只能使用“低寄存器” r0-r7
- 能夠移動“高寄存器”(即r8-r12, r14
此處)的ldmia
的 Thumb 版本直到 ARMv7 *才存在。 據我所知,Android 的最低公分母仍然是 ARMv5,所以如果你默認針對它,那么匯編器將拒絕在該指令集版本中不可能的事情。
將您的構建設置更改為目標 ARMv7,或者只是構建為 ARM 代碼而不是 Thumb,應該將相關選項傳遞給匯編程序,以便它可以為該指令找到合適的編碼。
* 技術上是 ARMv6T2,但我很確定 ARM1156 與 Android 上下文無關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.