有时在linux kernel调试时, 想知道当前函数的调用者是谁, 一直没查到内这个功能, 今天终于发现了这个好东西.
void * __init memblock_virt_alloc_try_nid_nopanic(
phys_addr_t size, phys_addr_t align,
phys_addr_t min_addr, phys_addr_t max_addr,
int nid)
{
pr_err("%s: %llu bytes align=0x%llx nid=%d from=0x%llx max_addr=0x%llx %pF\n",
__func__, (u64)size, (u64)align, nid, (u64)min_addr,
(u64)max_addr, (void *)_RET_IP_);
输出如下:
memblock_virt_alloc_try_nid_nopanic: 18726912 bytes align=0x0 nid=0 from=0x0 max_addr=0x0 alloc_node_mem_map.constprop.5+0x74/0xc4
%pF 是linux kernel printk支持的特殊格式, p是指针, F则打印出地址对应的符号, _RET_IP_是返回地址的指针.
参见内核文档Documentation/printk-formats.txt