当前位置: 技术问答>linux和unix
kernel跳转到task的地址问题
来源: 互联网 发布时间:2016-10-15
本文导语: 大牛们好! 如果我task_a.c如下定义, int task_a() { printf("task_a print"); return 0; } 请问如果我执行链接命令:gcc boot.o loader.o kernel.o task_a.o -o kernel的时候,那么task_a.o task_a的地址是多少? 为什么在kernel.as中直接call...
大牛们好!
如果我task_a.c如下定义,
int task_a()
{
printf("task_a print");
return 0;
}
请问如果我执行链接命令:gcc boot.o loader.o kernel.o task_a.o -o kernel的时候,那么task_a.o task_a的地址是多少?
为什么在kernel.as中直接call task_a, (段内跳转) 就能跳到这里执行呢??怎么保证task_a和kernel在一个段内的?
麻烦大牛给解释一下,打搅了。
如果我task_a.c如下定义,
int task_a()
{
printf("task_a print");
return 0;
}
请问如果我执行链接命令:gcc boot.o loader.o kernel.o task_a.o -o kernel的时候,那么task_a.o task_a的地址是多少?
为什么在kernel.as中直接call task_a, (段内跳转) 就能跳到这里执行呢??怎么保证task_a和kernel在一个段内的?
麻烦大牛给解释一下,打搅了。
|
段定义好像要专门的指令,可以在makefile改吧。
|
这个是连接器做的事情
有空看看Linkers and loaders
有空看看Linkers and loaders
|
lds文件有函数段地址的指定
|
连接器做好的,不用担心,只管调就是了。
不过貌似起码的global一下吧?
不过貌似起码的global一下吧?