• Gerrnperl Lu's avatar
    fix: move kernel link-args to build.rs from cargo config · 45e895fe
    Gerrnperl Lu authored
    这个错误导致用户程序链接时同时使用了内核的链接参数。
    目测会导致用户程序入口地址错误(从 0x80400000 变为内核入口地址 0x80200000)
    
    由于没有地址重定位,用户程序中所有使用绝对地址的地方都可能出错。
    
    在调试过程中遇到的问题包括但不限于:
    1. 触发 Rust 调试断言, 在执行 main 函数附近的代码时触发
    
    ```
    0x8020a358 <.L__unnamed_6> "unsafe precondition(s) violated:
    slice::from_raw_parts_mut requires the pointer to be aligned and non-null,
    and the total size of the slice not to exceed
    `isize::MAX`src/trap/context.rs\000"
    ```
    
    提交 fb9d968e 尝试解决此问题,现已撤销。
    
    2. 格式化异常,在 core::fmt 进行格式化时可能出现错误指令/非法指令。
    3. 输出异常,用户程序通过系统调用传递给内核的字符串地址错误,导致输出异常。
    4. 以上两点导致 panic 信息也无法正常输出。
    5. 在指令执行过程不定位置出现错误,使得调试困难。
    
    🥹
    45e895fe