- 博客(179)
- 收藏
- 关注
原创 QEMU RISCV TCG 详解十一 -- RISCV CPU 状态在TCG Variables中的表示(Representation)
在 TCG IR 中,是如何对 RISCV CPU 的寄存器进行访问。关键点在于对 struct ArchCPU* cpu,struct CPUArchState* env,TCGv_*,TCGTemp*,TCGArg 的理解。
2025-07-30 16:43:58
937
原创 QEMU RISCV TCG 详解九 -- 初见SoftMMU (软内存管理器)
Guest Virtual Address -> Guest Physical Address -> Host Virtual Address。
2025-07-29 10:47:19
914
原创 QEMU RISCV TCG 详解八 -- TCGTBCPUState 值的获得
在《指令转译宏观过程》 中,TB 在 key 值由 一个 TCGTBCPUState 定义,那么 TCGTBCPUState 的 值是如何而来的呢?
2025-07-28 10:13:24
226
原创 QEMU RISCV TCG 详解六 -- RISCV CPU 的使能(How a RISCV CPU Realized)
RISCV CPU 的初始过程有:1. RISCV CPU 类型的注册,基于QEMU类型注册机制, type_init();2. RISCV CPU 的创建,基于 QOM 机制;3. RISCV CPU 的初始化,基于QOM机制;4. RISCV CPU 的使得(realize),基于 realize 属性(property)机制,属于 QOM 的一部分;5. RISCV CPU 的执行(TCG 执行循环)。
2025-07-25 10:20:21
1058
原创 QEMU RISCV TCG 详解五 -- RISCV CPU 的初始化(How a RISCV CPU Initialized)
RISCV CPU 的初始化
2025-07-24 17:05:18
256
原创 QEMU RISCV TCG 详解四 -- RISCV CPU 的构建(How a RISCV CPU Created)
讲述QEMU中 RISCV CPU 的构建过程。
2025-07-24 15:59:46
661
原创 QEMU RISCV TCG 详解二 -- RISCV CPU Representation
在 QEMU 里,如何表征 RISCV CPU 呢?该代码就位于 qemu/target/riscv/cpu-qom.h 中。
2025-07-23 15:34:03
271
原创 QEMU RISCV TCG 详解一 -- 主执行循环(Main Execution Loop)
在分析例子之前,先在源代码中,找到对应的解析执行代码,通过代码来查看 QEMU TCG 是如何 将 RISCV ISA 转换成 Host ISA (即 X86_64 ISA)的。
2025-07-23 10:29:04
808
原创 RISCV Linux 虚拟内存精讲系列三 -- setup_vm()
setup_vm()将 kernel_map, trampoline_pg_dir 及 early_pg_dir 配置完成,使得后续的 relocate 可以正常执行,切入虚拟地址访问机制。
2025-07-08 12:00:21
670
原创 RISCV Linux 虚拟内存精讲系列一 Sv39
以 RISCV Linux 以及 RISCV Sv39 为例,通过一系列的文章,详细地梳理清楚 在 RISCV Sv39 上,Linux 是如何实现其虚拟内存机制的。这是该系列的第一篇文章,主要讲述 RISCV Sv39。
2025-07-07 15:09:59
1000
1
原创 QEMU TCG RISCV 转 X86 例子注解 ( RISCV Binary Code to X86 Example Annotation)
例子的功能是往地址 0x1000'0000 写入 'a',即 0x61。
2025-06-19 14:42:27
241
原创 C语言之 比特(bit)、字节(Byte)、字(Word)、整数(Int)
字(Word)的概念就在这些原生类型中抽象出来的,是在语义级(Semantics)上的概念,也就是跟业务逻辑(Business Logic)相关的概念。其由字节(Bytes)所组成,具体多少字节形成一个字(Word),也叫单字(Single World),由其业务逻辑所定义,通常一个字(Word)的大小等于一个整数(Int)。
2025-05-19 11:31:28
383
原创 C语言中类型(Type)的意义
在C语言中,类型(Type)为内存块赋予意义,定义其允许的操作。对象(Object)实质上是内存块,其意义由对象类型决定。类型可视为集合,定义了其包含的值和允许的操作,集合的大小表示该类型的信息量,通过内存块(对象)表示。C语言操作对象是内存块,程序逻辑从类型出发,确保程序正确性。由于C语言的类型系统不丰富,许多程序逻辑无法直接通过类型系统表达,需程序员额外保证正确性,这也是C语言被认为不安全的原因。然而,C语言的高效性源于其对裸机的最薄抽象。因此,使用C语言时,需明确程序逻辑、类型表达及最终生成的汇编代码
2025-05-13 09:33:19
327
原创 C 语言中的 对象(object),表征(Representation),类型(Type),值(Value)
C语言的抽象计算模型(Abstract Computational Model)是图灵完备的图灵机(Turing-Completed Turing Machine)。因此,C语言中所操作的对象(Object)是一块内存。型是用于对内存块赋予意义的,从而定义其允许的操作。而对象实质上内存块,其意义由其对象类型所赋予,并定义其允许的操作。
2025-05-09 15:09:40
251
原创 RISCV GCC 后端 -- 依赖(Dependence)简析
当编译器中的一种优化转换(Optimization Transformation)保留了(Preserve)程序的依赖关系,那么,保留了(Preserve)程序的意义(Meaning),那么该转换(Transformation)是有效的(Valid)。
2025-04-07 11:57:11
388
原创 RISCV GCC 后端 -- 数据流(Data Flow)的一些理解
由于基础块(Basic Block)的属性,连续按顺序执行其指令序列,可以将一个基础块看成一个复合指令,如 <BBOp> defs, uses。
2025-04-02 10:06:44
347
原创 GCC RISCV 后端 -- 控制流(Control Flow)的一些理解
那么,对于不同的指令,抽象来看,都会有其 定义的值/变量(Definitions),以及有其 使用的值或变量(Uses),如上面的,result 为 其定义(defintion),src0, src1为其使用(use)。那么,通过对指令的定义及使用的分析,逐步往上,扩展到 基础块(Basic Block),控制流图(Control Flow Graph)等,实现程序的数据流分析(Data-Flow Analysis)。又例如,Domination Tree 的构建,Live-variable 等。
2025-04-01 17:27:02
360
原创 GCC RISCV 后端 -- GCC Passes 注释
总结来说,经过初始化后,所有处理过程的实体会以单向列表的形式,分类地有层级地存放在 pass_manager 里面。
2025-03-06 14:40:53
677
原创 GCC RISCV 后端 -- C语言语法分析过程
关键是说明 C 源代码在解析(Parse)后,所存在的形式,如何提供到后面基于过程(Pass)机制的处理。
2025-03-05 19:19:08
538
原创 GCC RISCV 后端 -- cc1 入口
具体到C/C++的代码时,其最小抽象单元是函数,也就是理解函数在业务逻辑中的抽象意涵,也就是,知道函数的原型(Prototype),即其输入、输出、函数名,就能明白其作用。再往上抽象一层就是,类(Class),即对数据结构及相关处理函数的封装。再往上一层抽象就是库(library)。再往上就是包(Package)。这样一步步往上抽象,来组织管理整个程序代码,以使得其复杂度可以控制在便于维护及理解的程度。
2025-03-05 15:47:07
480
原创 GCC RISCV 后端 -- GCC 后端框架的一些理解
GCC 已经提供了一整套的编译框架,从前端(Frontend / GENERIC-Tree)对编程语言的语法语义处理,到中端(Middle-End / GIMPLE-Tree)的目标机器无关(Target Indepndent)的优化处理,再到后端(Backend / RTL)的目标机器相关的处理,即目标机器码生成(Code - Generation)的相关处理。整个流程,GCC都已经提供了一个框架。因此,对于不同部分的新增功能,只要对框架中对应部分进行修改即可。
2025-03-04 10:57:24
495
原创 LEAN Compiler Toolchain 之 main 函数入口
前文已经对 LEAN Compiler Toolchain 的构建系统进行了简述,感兴趣的读者可以翻阅一下。本文主要是确定 lean 的 主函数入口,即 main 函数,在那个源文件里。
2025-01-03 15:25:33
306
原创 LEAN Compiler Toolchain 之 构建系统(Build System)
前文有提及过,要研究一个项目,要从其构建系统(Build System)着手。因为,构建系统是用于构建出对应项目的可执行程序(executable, binary)、相关库(libraries)、资源(resources)等。因此,通过对构建系统的研究,可以知道,该项目所要构建的东西是如何一步步构建出来的。
2025-01-03 14:43:05
405
原创 CompCert 之 eval_expr 解析
在 Clight.v 中,定义了 Clight 中间语言的 表达式(Expression)、语句(Statement),以及使用了在 Ctypes.v 中定义的 type,Values.v中定义的 val。因此,在Clight中,涉及到,C语言标准中定义的类型(Type),语句(Statement)以及表达式(Expression)。其中,每个表达式会对应一个类型,以及返回一个值(val)。
2025-01-02 16:17:36
914
原创 CompCert 之 SimplExpr.transl_stmt 与 SimpExpr.transl_expr
CompCert 中的 SimpExpr.transl_stmt 与 SimpExpr.transl_expr 是 将 CompCert C 中间语言(IR) 转换成 Clight 中间语言(IR)的核心处理函数。也就是通过 形式的变换,将 CompCert C 中的带有副作用(side-effect)的表达式,抽出来,转换成,赋值语句(statement)与纯表达式(Pure Expression)。
2024-12-26 12:00:40
174
原创 CompCert 之 Ctypes 表达 C 类型
在《C语言的理解》一文中,强调了 类型系统 是 编程语言的核心作用。那么,在CompCert中,Ctypes 模块(module)便对C语言的类型进行了抽象定义。
2024-12-23 08:42:30
312
原创 C 语言的理解
一门编程语言的表达力(Expressiveness)是由其类型系统(Type System)定义的。该类型系统定义了,怎么样的表达式(Expression)有什么样的意义,即 表达式的语义(Semantics)。C语言的类型系统大致就是,原生类型 + 复合类型,或,数据类型+函数类型。也就是,常说的,程序 = 数据结构 + 算法。
2024-12-21 10:03:20
590
原创 CompCert 之 <CompCert C AST> to <Clight>
本文介绍,从CompCert C AST,对应文件是,*.compcert.c 到Clight,对应文件是,*.light.c 的转换,作用函数为,SimplExpr.transl_program 。
2024-12-20 09:02:51
603
原创 CompCert 之 csyntax
CompCert 中csyntax,又称,CompCert C AST,对应的中间文件是,.compcert.c。
2024-12-19 08:55:33
388
原创 CompCert 之 C代码处理过程 -- HelloWorld
前文《C代码处理的宏观过程》是从代码的角度去看C代码的处理过程,本文结合,在处理过程中输出的中间文件,加以说明。
2024-12-19 08:55:22
763
The Type Theory of LEAN by Mario Carneiro in 2019
2024-08-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人