Jerry

Results 6 comments of Jerry

> 与第二章相同,所有应用的 ELF 格式执行文件都经过 objcopy 工具丢掉所有 ELF header 和符号变为二进制镜像文件,随后以同样的格式通过在操作系统内核中嵌入 **link_user.S** 文件,在编译时直接把应用链接到内核的数据段中。 **多道程序放置**一节中此处的link_user.S是否应为link_app.S?

笔记:此处pub extern "C"的作用: ```rust #[no_mangle] #[link_section = ".text.entry"] pub extern "C" fn _start() -> ! { clear_bss(); exit(main()); panic!("unreachable after sys_exit!"); } ``` ref: Rust程序设计语言,从其它语言调用Rust函数 可以使用 extern 来创建一个允许其他语言调用 Rust 函数的接口,这里创建一个C的ABI,此用法无需unsafe,因为使用Rust定义的函数安全性由Rust负责

最后一段:“带接收” 应为 “待接收”

[改进sys_write](https://rcore-os.cn/rCore-Tutorial-Book-v3/chapter4/6multitasking-based-on-as.html#sys-write)一节中translated_byte_buffer的实现似乎没有更新为源码仓库中最新的版本,文档中的版本对于跨物理页end_va的offset为0的情况会出现push区间为空? 文档: ```rust v.push(&ppn.get_bytes_array()[start_va.page_offset()..end_va.page_offset()]); ``` 仓库: ```rust if end_va.page_offset() == 0 { v.push(&mut ppn.get_bytes_array()[start_va.page_offset()..]); } else { v.push(&mut ppn.get_bytes_array()[start_va.page_offset()..end_va.page_offset()]); } ```

请问为什么Rust通过外部调用访问linker中的全局符号是通过函数的形式? 在Rust的手册中对于extern的使用方法只简要介绍了C函数调用,不知道到哪里找相应的规范。 查找到在C代码中调用链接脚本中的变量的方式是将其作为extern int A导入,其地址&A是对应的符号地址。 在这里Rust使用的两个函数sbss()及ebss()返回的就是相应全局符号的地址吗?而之后还是通过变量的方式进行使用,看起来其实还是某种调用规范? ```rust extern "C" { fn sbss(); fn ebss(); } (sbss as usize..ebss as usize).for_each(|a| { unsafe { (a as *mut u8).write_volatile(0) } }); ```