0

会调用哪个函数?</p>

cscope:</p>

[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 是如何知道要链接哪个函数的?</p>

4

1 回答 1

1

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

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

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

SRC:维基,gnu.org

于 2013-04-12T04:44:24.327 回答