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-07-02 17:26:43 +08:00 via Android
特定编译器的表现吧
|
2
zhng920823 2023-07-02 17:58:57 +08:00
你这是写单片机程序还是别的不依赖操作系统的程序?
按说即便以来依赖这个也是默认连接上了啊。 |
3
zhng920823 2023-07-02 18:03:41 +08:00
写了个类似的程序, 但是分析程序连接的库函数后, 没有发现依赖 memset memcpy
也可能优化掉了,虽然用了 -O0 |
4
yuanix OP @zhng920823 不依赖操作系统的,写个玩具 kernel
|
5
LaTero 2023-07-02 19:00:30 +08:00 via Android
会不会是你的初始化顺序和字段的定义顺序不一样?不一样的时候 gcc 会报警告 iso c++不支持,可能是 gnu 拓展会到用 memset 和 memcpy 。我没有 freestanding 开发经验,瞎猜的。
|
6
zhng920823 2023-07-02 20:29:19 +08:00
@yuanix #3 仰望大佬 是给 X86 机器写的还是给那些嵌入式设备写的? 有没有 github 地址
|
7
yuanix OP @zhng920823 小菜鸡一个,摸鱼了解一点新东西,为 QEMU 模拟器的虚拟 RISC-V 设备写,刚开始写: https://github.com/peiyuanix/yuanix-riscv-os ,欢迎一起交流学习呀
|
8
zagfai 2023-07-02 21:27:08 +08:00
确实是会影响性能~
|
9
agagega 2023-07-03 15:52:13 +08:00
没有装到 RISCV 的 cross GCC ,试了下 clang 和其他平台的 GCC ,没发现有这个行为。可以试试加上 -fno-builtin 和 -ffreestanding
|