我正在查看 Linux 内核(版本 v2.6.38)的源代码,我偶然发现了一个未定义的struct map_segment
定义exec_domain
:
struct exec_domain {
const char *name; /* name of the execdomain */
handler_t handler; /* handler for syscalls */
unsigned char pers_low; /* lowest personality */
unsigned char pers_high; /* highest personality */
unsigned long *signal_map; /* signal mapping */
unsigned long *signal_invmap; /* reverse signal mapping */
struct map_segment *err_map; /* error mapping */
struct map_segment *socktype_map; /* socket type mapping */
struct map_segment *sockopt_map; /* socket option mapping */
struct map_segment *af_map; /* address family mapping */
struct module *module; /* module context of the ed. */
struct exec_domain *next; /* linked list (internal) */
};
exec_domain
用于thread_info
.
我的问题:
- 在哪里
map_segment
定义的? (所有成员变量是什么?到目前为止我最好的猜测是它指向一些低级体系结构相关结构) - 它的目的是什么以及在哪里使用? (在评论中,它说它可以在套接字类型映射中使用,但我对此不太熟悉。套接字类型映射是什么?)
任何有关此主题的信息将不胜感激。
答案1
struct map_segment
没有在内核中的任何地方定义,至少在 2.6.38 版本中没有定义。这在 C 中没问题——只要永远不需要成员的内容,编译器需要知道的只是字段的大小,并且由于那是一个指针,所以它只是指针的大小。这些
struct map_segment
字段从未被使用过。我想他们的目的是让个性来定义映射——可能errno
值在err_map
,插座类型在socktype_map
,插座选项在sockopt_map
, 和地址家庭在af_map
。
这exec_domain
结构在内核版本 4.1 中被删除。