Update chapter3_traps.md

pull/1/head
Zhiyuan Shao 3 years ago
parent dffe1ba4b7
commit c06fc5cef5

@ -363,7 +363,7 @@ Disassembly of section .text:
另外我们看到main函数中进行的printf调用实际上转换成了对puts函数的调用而我们并未实现该函数。这是因为采用`riscv64-unknown-elf-gcc`对源程序进行的编译和链接实际上是静态链接也就是会将应用程序中的常用函数调用转换为编译器自带的程序库的调用并在最终生成的ELF文件中带入自带程序库中的实现。对于printf编译器在对其字符串参数进行转化后就自然转换为puts库函数调用了这也是为什么我们在反汇编的代码中找不到printf的原因。
通过以上讲解可以看到RISC-V程序的编译链接其实跟我们在x86平台上编写、编译和链接一个C语言程序的过程一摸一样唯一的不同是将以上的命令加上了`riscv64-unknown-elf-`前缀而已基本的过程是完全一样的。除此之外我们生成的可执行代码如以上的helloworld采用是RISC-V指令集准确的说是RV64G指令集是不能在我们的x86开发电脑上直接执行的也就是说我们不能通过`./helloworld`命令直接执行之前编写的C语言程序。
通过以上讲解可以看到RISC-V程序的编译链接其实跟我们在x86平台上编写、编译和链接一个C语言程序的过程一摸一样唯一的不同是将以上的命令加上了`riscv64-unknown-elf-`前缀而已基本的过程是完全一样的。除此之外我们生成的可执行代码如以上的helloworld采用是RISC-V指令集准确的说是RV64G指令集是不能在我们的x86开发电脑上直接执行的也就是说我们不能通过`./helloworld`命令直接执行之前编写的C语言程序。
为了执行helloworld文件首先我们需要1一个支持RISC-V指令集的机器2一个能够在该RISC-V机器上运行的操作系统。在PKE实验中我们采用spike模拟RISC-V机器以满足第一个要求通过实验设计操作系统内核以满足第二个要求。实际上PKE的实验设计正是从应用出发考虑为给定应用设计“刚刚好”的内核使得给定应用能够在spike模拟的RISC-V机器上正确地执行。

Loading…
Cancel
Save