ksco 的工作日志
emit_fcache_enter_common >>> append_fcache_enter_prologue mv a1, a5 # dont care mv a5, a0 # 将 ARG1(dc) 赋值给 a5,因为 a5 是 REG_DCXT ... >>>>>> insert_load_dr_tls_base sd tp, 0(a5) # 将原始 tp 放到 dc 的 X0 slot 中保存 ld tp, -8(tp) # 拿到 dtv.private 所指向的结构体(spill_state)…
append_save_gpr 这里需要把 tls slots 中 a0 和 a1 的值放回 dc ,不然下一个 bb 执行的时候,dc 的状态是错误的!
ksco 的工作日志
append_save_gpr 这里需要把 tls slots 中 a0 和 a1 的值放回 dc ,不然下一个 bb 执行的时候,dc 的状态是错误的!
这里不能用
a0 作为 scratch reg!!!!因为 a0 里面存着 last exit 。对于入职已经满一年的 PLCT 员工而言,6 月也是一个告别的季节:PLCT 实验室将会从 6 月底开始,鼓励和要求已经可以独当一面的青年工程师离开 PLCT 实验室,走出去,在更大的平台上做出超越过去的自己的成绩。此次团队组织调整将会涉及近一半的员工,延续到 2023Q3 结束。悲伤与痛苦都不可避免,也无需回避。让我们且歌且行,相互祝福,迈向更为广阔的世界。
(草)
(草)
fragment writes all 6 flags prior to reading any
bb ilist before mangling:
TAG 0x00000000000100c4
<raw 0x00000000000100c4-0x00000000000100c8>::
+0 L3 @0x0000003dd284dc98 ff010113 addi %sp -16 -> %sp
---- multi-instr boundary ----
<raw 0x00000000000100c8-0x00000000000100cc>::
+4 L3 @0x0000003dd284dd68 00113423 sd %ra -> +0x08(%sp)[8byte]
---- multi-instr boundary ----
<raw 0x00000000000100cc-0x00000000000100d0>::
+8 L3 @0x0000003dd284ddd8 02b00513 addi %zero 43 -> %a0
---- multi-instr boundary ----
<raw 0x00000000000100d0-0x00000000000100d4>::
<translation 0x00000000000100d0>::
+12 L3 @0x0000003dd284de90 fe1ff0ef jal $0x00000000000100b0 -> %ra
---- multi-instr boundary ----
END 0x00000000000100c4
bb ilist after mangling:
TAG 0x00000000000100c4
<raw 0x00000000000100c4-0x00000000000100c8>::
+0 L3 @0x0000003dd284dc98 ff010113 addi %sp -16 -> %sp
---- multi-instr boundary ----
<raw 0x00000000000100c8-0x00000000000100cc>::
+4 L3 @0x0000003dd284dd68 00113423 sd %ra -> +0x08(%sp)[8byte]
---- multi-instr boundary ----
<raw 0x00000000000100cc-0x00000000000100d0>::
+8 L3 @0x0000003dd284ddd8 02b00513 addi %zero 43 -> %a0
---- multi-instr boundary ----
+12 m4 @0x0000003dd284df00 000100b7 lui 0x10 -> %ra
---- multi-instr boundary ----
+16 m4 @0x0000003dd284df70 0d40809b addiw %ra 212 -> %ra
---- multi-instr boundary ----
END 0x00000000000100c4
Before mangle 的 bb 似乎不太对,after mangle 之后,jal 直接被删掉了,所以 before 应该复制一份 position dependent 的,然后标记为 meta instruction,但我好像没在 Aarch64 port 上看到这个行为 🤔️
断点打在 jit code 上,第三个 bb segfaulted,问题出在
emit_indirect_branch_lookup ,明天继续!!终于开始着手实现 ibl 相关的东西了,进展比预计的要顺利很多,DR 设计得真是不错。终于下定决心找找为什么 DynamoRIO RV64 port 会重复编译。预期要花很久,但实际很快就解决了:https://github.com/DynamoRIO/dynamorio/pull/6252
发现 CMake 还挺直观的,虽然从来没学过,但还是可以根据直觉来修 bug。
发现 CMake 还挺直观的,虽然从来没学过,但还是可以根据直觉来修 bug。
从 Revy 那里用将近半价的价格收了一台 Matebook E Go (Windows on ARM),用了四天了,这设备真的是一堆破问题。
本身就不太喜欢 Windows,再加上 ARM 原生的应用不多(尤其是华为自带的软件竟然全都是 x86_64 的,简直不可原谅),Windows x86 Emulation 转译的效率又极其低下,体验真是一言难尽(微软你看看隔壁罗塞塔 2!)。
所以我把能卸载 x86 的应用全都卸载了,好在我日常用的软件都是有 ARM 原生的,最可惜的就是失去了华为生态的所有功能(比如笔和键盘的电量显示)。
但我还是很喜欢这个设备,硬件素质很好,生产力/娱乐性都可以吊打 iPad,还有 WSL/WSA,多核性能直逼 M1 的 80%,只要 3000 块,还要什么自行车。
本身就不太喜欢 Windows,再加上 ARM 原生的应用不多(尤其是华为自带的软件竟然全都是 x86_64 的,简直不可原谅),Windows x86 Emulation 转译的效率又极其低下,体验真是一言难尽(微软你看看隔壁罗塞塔 2!)。
所以我把能卸载 x86 的应用全都卸载了,好在我日常用的软件都是有 ARM 原生的,最可惜的就是失去了华为生态的所有功能(比如笔和键盘的电量显示)。
但我还是很喜欢这个设备,硬件素质很好,生产力/娱乐性都可以吊打 iPad,还有 WSL/WSA,多核性能直逼 M1 的 80%,只要 3000 块,还要什么自行车。
#DynamoRIO
emit fragment 分为两个阶段:1)求大小;2)emit 代码
fragment prefix 大小固定为 8,两个阶段一致;exit stub size 固定为 64,两个阶段一致;所以问题应该出在 bb 本身的代码上。
大小差了 2,猜测大概率是 compressed 指令导致的?
emit fragment 分为两个阶段:1)求大小;2)emit 代码
fragment prefix 大小固定为 8,两个阶段一致;exit stub size 固定为 64,两个阶段一致;所以问题应该出在 bb 本身的代码上。
大小差了 2,猜测大概率是 compressed 指令导致的?