内核中具有相同名称的函数

时间:2013-04-12 04:33:18

标签: linux linux-kernel

将调用哪个函数?

cscope的:

[1] include/linux/sched.h 
Cscope tag: show_regs

1    108  /data/linux-3.4.7/arch/x86/kernel/process.c <<show_regs>>
         void show_regs(struct pt_regs *regs)
2     14  /data/linux-3.4.7/arch/x86/um/sysrq_32.c <<show_regs>>
         void show_regs(struct pt_regs *regs)
3     37  /data/linux-3.4.7/arch/x86/um/sysrq_64.c <<show_regs>>
         void show_regs(struct pt_regs *regs)

gcc如何知道将链接哪个功能?

1 个答案:

答案 0 :(得分:1)

在共享库中,对作为全局符号的函数的调用需要对所谓的PLT(过程链接表)中的代码位置进行“调用”指令,其中包含对实际函数的“跳转”指令。代码。

当语言允许使用相同的标识符命名不同的实体时,只要它们占用不同的命名空间(其中命名空间通常由模块,类或显式命名空间指令定义),通过名称的概念来解决冲突截断。

名称修改提供了一种在函数,结构,类或其他数据类型的名称中编码附加信息的方法,以便将更多语义信息从编译器传递给链接器。

SRC:Wiki,gnu.org