解決龍芯2F使用oprofile-0.9.7無法採樣應用程序函數的問題

原因:
oprofile-0.9.7中create_cookie()調用lookup_dcookie(),該函數定義爲:
 75 static inline int lookup_dcookie(cookie_tcookie, char * buf, size_t size)
 76 {
 77 ____returnsyscall(__NR_lookup_dcookie,
 78 ________      (unsigned long)(cookie& 0xffffffff),
 79 ________      (unsigned long)(cookie>> 32), buf, size);
 80 }
該系統調用在2.6.27內核(DingXing2F用的是該版本內核)中進入arch/mips/kernel/scall64-o32.S的handle_sys,handle_sys根據__NR_lookup_dcookie查詢syscall_table,最後跳到sys_lookup_dcookie中執行,而該函數默認傳進來的地址爲64位,而不是兩個32位,導致lookup_dcookie失敗,從而無法找到cookie對應的程序,因此無法採樣應用程序的函數。
而2.6.36內核在scall64-o32.S的syscall_table中,__NR_lookup_dcookie對應的是sys32_lookup_dcookie,該函數將兩個32位的地址按照小尾端格式拼成一個64位地址,再調用sys_lookup_dcookie,所以正確。

解決方法:
參考2.6.36內核進行修改即可。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章