
struct proc test_proc_1 = { .name = "test_proc_1", .pid = 1, .hartid = 0, .state = PROC_READY, .cpu = { .pc = (u64)&test_proc_1, }}; 这段代码在链接的时候提示:
undefined reference to `memset' undefined reference to `memcpy' 让 ChatGPT 给我实现了一下,编译链接进去就好了。
#include "kstring.h" void *memset(void *s, int c, size_t n) { unsigned char *p = s; while (n--) *p++ = (unsigned char)c; return s; } void *memcpy(void *dest, const void *src, size_t n) { unsigned char *d = dest; const unsigned char *s = src; while (n--) *d++ = *s++; return dest; } 1 nightwitch 2023 年 7 月 2 日 via Android 特定编译器的表现吧 |
2 zhng920823 2023 年 7 月 2 日 你这是写单片机程序还是别的不依赖操作系统的程序? 按说即便以来依赖这个也是默认连接上了啊。 |
3 zhng920823 2023 年 7 月 2 日 写了个类似的程序, 但是分析程序连接的库函数后, 没有发现依赖 memset memcpy 也可能优化掉了,虽然用了 -O0 |
4 yuanix OP @zhng920823 不依赖操作系统的,写个玩具 kernel |
5 LaTero 2023 年 7 月 2 日 via Android 会不会是你的初始化顺序和字段的定义顺序不一样?不一样的时候 gcc 会报警告 iso c++不支持,可能是 gnu 拓展会到用 memset 和 memcpy 。我没有 freestanding 开发经验,瞎猜的。 |
6 zhng920823 2023 年 7 月 2 日 @yuanix #3 仰望大佬 是给 X86 机器写的还是给那些嵌入式设备写的? 有没有 github 地址 |
7 yuanix OP @zhng920823 小菜鸡一个,摸鱼了解一点新东西,为 QEMU 模拟器的虚拟 RISC-V 设备写,刚开始写: https://github.com/peiyuanix/yuanix-riscv-os ,欢迎一起交流学习呀 |
8 zagfai 2023 年 7 月 2 日 确实是会影响性能~ |
9 agagega 2023 年 7 月 3 日 没有装到 RISCV 的 cross GCC ,试了下 clang 和其他平台的 GCC ,没发现有这个行为。可以试试加上 -fno-builtin 和 -ffreestanding |