想偷懒

天气晴 在给自己想一个理由断更,但是没想出来。 最近在给 gcc 摘 RISC-V 的樱桃,纯纯体力活,不过稍微还是瞟了几眼。 观测到性价比高的办公室了,也算有着落。 更新:性价比高的办公室凉了。

<span title='2024-01-24 11:30:03 +0000 UTC'>January 24, 2024</span>&nbsp;·&nbsp;xyenchi

尝试学习 signal 写法

天气雨 今日观测不同架构 linux kernel 中的源代码关于 signal 的写法,因为不会用,所以也没有看懂。明日继续研究。 但也算是找到了 uc_mcontext 的出处?不过并没有理解 gprofng 此处用法是什么,也许我在舍本逐末。 又回想起了一些小时候的事情。时间过得可真快。

<span title='2024-01-16 11:30:03 +0000 UTC'>January 16, 2024</span>&nbsp;·&nbsp;xyenchi

尝试阅读 stack unwind

天气阴 找到了 GET_SP 的文件。 https://github.com/bminor/binutils-gdb/blob/master/gprofng/libcollector/unwind.c 观察 Aarch64 代码编造了一些 REG_S0 REG_SP REG_PC,但是非常不 work 。 明日继续研究。 发现不是很懂 stack unwind,搜到了一些文章,大致了解了一下,近日没有耐心阅读学习,一心想回家过年大呼特呼,而且也不懂该如何在 RISC-V 上使用。 像 Aarch64 一样简单添加并不能解决问题,SPARC 和 x86 都有大量相关代码。预计我也需要写大量 RISC-V 相关代码。 今日观测民生银行大厦其他楼层办公室,物不甚美,胜在价廉。 龙龙 和 Pigy 来办公室玩耍,刷 leetcode 题目,好强。

<span title='2024-01-15 11:30:03 +0000 UTC'>January 15, 2024</span>&nbsp;·&nbsp;xyenchi

记录 RISC-V 的 gdb 异常使用 watch

天气晴 搭建好的qemu system使用watch ncpus可以快速发现被优化,但这完全是我编译的时候忘记了修改 Makefile 里面的 -O0. 修改完成之后 watchpoint 正在消耗大量时间。 结束 watch 之后,传入 -O0 又有了新的报错。 [root@172 build]# ./gprofng/src/gp-collect-app echo 1 Creating experiment directory test.6.er (Process ID: 354740) ... echo: symbol lookup error: /usr/local/lib/gprofng/libgp-collector.so: undefined symbol: GET_SP 找到了 GET_SP 的文件。 https://github.com/bminor/binutils-gdb/blob/master/gprofng/libcollector/unwind.c 明日继续研究。 #define _GNU_SOURCE #include <stdio.h> #include <sched.h> #include <sys/syscall.h> #include <unistd.h> #include <asm/hwprobe.h> void main() { int ncpus; int npages; int page_size; struct riscv_hwprobe res; res.key = RISCV_HWPROBE_KEY_MVENDORID; cpu_set_t cpu_set; int __riscv_hwprobe (struct riscv_hwprobe *pairs, long pair_count, long cpu_count, unsigned long *cpus, unsigned long flags) { return syscall(__NR_riscv_hwprobe, pairs, pair_count, cpu_count, cpus, flags); } CPU_ZERO(&cpu_set); CPU_SET(0, &cpu_set); long ret = __riscv_hwprobe(&res, 1, 1, &cpu_set, 0); ncpus = sysconf (_SC_NPROCESSORS_CONF); npages = sysconf (_SC_PHYS_PAGES); page_size = sysconf (_SC_PAGE_SIZE); printf("ncpus: %d,\nnpages: %d,\npage_size: %d\n", ncpus, npages, page_size); printf("riscv_hwprobe:%x\n", ret); printf("riscv_mvendorid:%x\n", res.value); } 测试出了新内核可以读取 vendorid 和使用最新最热系统调用。 重要的是通过例子看懂了 kernel 文档里面的用法。 ...

<span title='2024-01-11 11:30:03 +0000 UTC'>January 11, 2024</span>&nbsp;·&nbsp;xyenchi

解决搭建qemu system遇到的问题

天气晴 近日听说新的sbi和kernel支持 profile sampling 打算搭建 qemu system 进行实验。 搭建过程遇到 nfs 的网桥难关。 今日跨越网桥配置难关。 https://wiki.archlinux.org/title/Systemd-networkd#Bridge_interface 在cyy的指导下根据上述链接将网桥绑在网络接口并配置了静态 ip 。 由于我电脑的home目录是加密的,所以无法 mount nfs。于是将 archriscv 的系统镜像移到了 /var。 搭建好的qemu system使用watch ncpus可以快速发现被优化,但这完全是我编译的时候忘记了修改 Makefile 里面的 -O0. 修改完成之后 watchpoint 正在消耗大量时间。

<span title='2024-01-10 11:30:03 +0000 UTC'>January 10, 2024</span>&nbsp;·&nbsp;xyenchi