模块API之__module_text_address

来源:互联网 发布:数据库置疑修复 编辑:程序博客网 时间:2024/05/15 00:45
__module_text_addres函数根据位于模块代码段的地址,返回这个模块具体例子在kernel/jump_label.cstruct module *mod;preempt_disable();mod = __module_text_address((unsigned long)start);WARN_ON_ONCE(__module_text_address((unsigned long)end) != mod);preempt_enable();可见使用前要通过preempt_disable禁止内核抢占。struct module *__module_text_address(unsigned long addr){struct module *mod = __module_address(addr);if (mod) {/* Make sure it's within the text section. */if (!within(addr, mod->init_layout.base, mod->init_layout.text_size)    && !within(addr, mod->core_layout.base, mod->core_layout.text_size))mod = NULL;}return mod;}这个函数就是__module_address的一个子函数。其中在__module_address 已经通过within_module 判断这个地址在init_layout或者core_layout 中,不知道在__module_text_address中为啥还要判断一次。和__module_address想比,__module_address只要是这个模块中的地址就行,而__module_text_address必须是在这个模块中,且必须在text段。条件比__module_address更严格