uclinux-2008R1-RC8(bf561)到VDSP5的移植(43):__builtin_return_address的問題
__builtin_return_address (LEVEL):這是GCC的內建函數,用於返回當前函數或其調用者的返回地址,參數LEVEL 指定在棧上搜索框架的個數,0 表示當前函數的返回地址,1 表示當前函數的調用者的返回地址,依此類推。在VDSP中,通過FP的循環取值可以完成相似的功能(參見以前的文章《使用FP取得函數的調用堆棧》)。查了下內核對此函數的使用,僅在drivers/md/md.c中使用了1,2,3幾個LEVEL,其余的地方僅使用了0這個LEVEL,因此在這裡使用了一個簡單的替代實現方式,僅適用於LEVLE0:
#define __builtin_return_address(level) ({void* addr; /
asm("%0 = rets;" : "=a"(addr)); addr;})
uclinux-2008R1-RC8(bf561)到VDSP5的移植(62)
uclinux-2008R1-RC8(bf561)到VDSP5的移植(60):current_text_addr
uclinux-2008R1-RC8(bf561)到VDSP5的移植(58)
uclinux-2008R1-RC8(bf561)到VDSP5的移植(57)
uclinux-2008R1-RC8(bf561)到VDSP5的移植(56):__grab_cache_page
uclinux-2008R1-RC8(bf561)到VDSP5的移植(46):raw_rwlock_t