【问题标题】:Write and test sub func编写和测试子函数
【发布时间】:2010-12-21 20:37:35
【问题描述】:

我正在尝试为 nachOS 编写子函数,但是当我组合它时它不起作用。不知道原因。 细节: 在../userprog/syscall.h 添加:

#define SC_Sub 11
int Sub(int a, int b);

../test/

 .globl Sub
 .ent Sub
Sub: 
 addiu $2,$0,SC_Sub
 syscall
 j  $31
 .end Sub

之后我写了一个 sub.c:

#include "syscall.h"
int main()
{
   int result;
   result = Sub(100,99);
   Halt();
}

在 exception.cc 中: 我尝试捕捉异常:

case SC_Sub:
   op1 = machine->ReadRegister(4);
   op2 = machine->ReadRegister(5);
   result = op1 - op2;
   printf("op1:%d\n",op1);
   printf("op2:%d\n",op2);   
   printf("result:%d\n",result);
   machine->WriteRegister(2,result);
   machine->WriteRegister(PCReg,machine->ReadRegister(PCReg)+4);  
   break;

要合并我去/code/gmake all 我有错误:(

../../../gnu-decstation-ultrix/decstation-ultrix/2.95.3/gcc -B../../../gnu-decstation-ultrix/ -T script -N  sub.o   -o sub
../../../gnu-decstation-ultrix/decstation-ultrix/2.95.3/ld: cannot open crt0.o: No such file or directory
make[1]: *** [sub] Error 1
make[1]: Leaving directory `/home/nxqd/Desktop/nachos-3.4/code/test'
gmake: *** [all] Error 2

这是 nachos 的文件夹。它不包含我写的“bug”子函数。

http://www.mediafire.com/?g3mnjxz4wdc
enter code here

【问题讨论】:

  • 我已经重新标记了您的问题,因为 nachos(根据我的发现)与 linux 无关。如果我不正确,有人可以重新标记linux
  • 感谢新标签玉米片 :)

标签: c++ kernel nachos


【解决方案1】:

hmm.. 好吧,我对 NachOS 一无所知,但我做过一些操作系统开发。

cannot open crt0.o: No such file or directory

您是否发送了正确的链接器命令?让我们看看你的链接器脚本。

我假设您已经构建了 MIPS 交叉编译器。您是否将其配置为使用标准库。如果没有标准库,您是否将其配置为使用默认 crt0?

请注意,crt0 是一个“引导”对象。它包含__main,这是操作系统执行的第一件事。这个引导对象然后解析命令行参数和其他初始化的东西,然后调用你的main 函数。我不确定 NachOS 中有多少东西,但您甚至可能需要制作自己的 crt0 并将其与链接器脚本链接作为启动图像(不记得确切的名称)

【讨论】:

  • 我只是操作系统写作的初学者(刚上学)。但我认为问题不在于 crt0.o 。链接器脚本?你的意思是玉米片中的咖啡,noff?
  • gcc -B../../../gnu-decstation-ultrix/ -T script -N sub.o -o sub -T script 表示它包含链接器脚本script。让我们也看看那个文件(也许这是问题的一部分),只需用那个文件编辑你的问题,因为 cmets 没有格式
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-22
  • 1970-01-01
  • 2022-01-11
  • 2014-09-20
  • 1970-01-01
相关资源
最近更新 更多