腾讯云
开发者社区
文档
建议反馈
控制台
登录/注册
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
搜索
搜索
关闭
发布
首页
学习
活动
专区
工具
TVP
最新优惠活动
返回腾讯云官网
homura的博客
专栏成员
举报
56
文章
26934
阅读量
13
订阅数
订阅专栏
申请加入专栏
全部文章(56)
函数(24)
开发(21)
源码阅读(16)
llvm(11)
编译(10)
对象(10)
file(8)
数据(8)
优化(8)
异常(7)
std(6)
变量(6)
继承(6)
指针(5)
size(4)
symbols(4)
遍历(4)
工作(4)
管理(4)
语法(4)
字符串(4)
exception(3)
sh(3)
命令行(3)
设计(3)
系统(3)
源码(3)
缓存(2)
analysis(2)
ast(2)
label(2)
layout(2)
offset(2)
oop(2)
编译器(2)
测试(2)
程序(2)
多线程(2)
工具(2)
架构(2)
接口(2)
内存(2)
排序(2)
数组(2)
算法(2)
调试(2)
压缩(2)
源码学习(2)
重构(2)
官方文档(1)
c++(1)
正则表达式(1)
hexo(1)
数据结构(1)
迁移(1)
add(1)
callback(1)
ci(1)
counter(1)
cursor(1)
deployment(1)
documentation(1)
function(1)
gc(1)
glibc(1)
header(1)
lexer(1)
post(1)
push(1)
return(1)
riscv(1)
server(1)
version(1)
void(1)
编程(1)
编程语言(1)
博客(1)
程序员(1)
递归(1)
队列(1)
翻译(1)
基础(1)
兼容性(1)
脚本(1)
教程(1)
进程(1)
量化(1)
模型(1)
配置(1)
搜索(1)
效率(1)
异常处理(1)
原理(1)
搜索文章
搜索
搜索
关闭
LLVM异常实现零 异常的多层结构与实现方式
exception
llvm
函数
异常
语法
本系列的博客的内容是LLVM异常实现的整个过程,从C++生成LLVM IR开始,到运行时实际调用的库函数,会从抛出异常的过程开始结合llvm相关的代码进行讲解。这一期主要内容是讲解异常相关的结构、底层实现方式等基础信息,之后从顶向下逐层分解其中的实现(这部分形式有些类似于笔记),在最后一期会将整个结构串起来,同时有一个流程图供读者进行参考,中间几期细节比较多,很容易迷失在其中,可以参照最后一期的图来阅读中间的内容。
AkemiHomura
2024-10-03
94
0
LLVM异常实现四 personality
数据
异常
异常处理
exception
llvm
前面libunwind的过程中多次和personality进行交互,这部分是由语言提供和语言相关的内容。libunwind的两个阶段对应到这一个函数之中,personality部分根据libunwind扫描到的平台相关的信息,在ehframe中扫描到当前栈帧对应的异常处理信息。
AkemiHomura
2024-10-03
92
0
LLVM异常实现三 libunwind
return
函数
异常
cursor
llvm
上期提到的__cxa_xxx相关函数的实现离不开libunwind的相关接口,libunwind专门用于平台无关的堆栈展开和错误处理,内部做了很多平台相关的兼容工作,这期我们主要来介绍一下libunwind相关接口的具体实现。
AkemiHomura
2024-10-03
65
0
LLVM异常实现二 libcxxabi
对象
异常
exception
header
llvm
在之前的博客提到带有异常相关的C++代码编译成llvm ir后,会插入libcxxabi的__cxa_xxx函数,这期则是来了解这些函数的实现。
AkemiHomura
2024-10-03
60
0
LLVM异常实现一 LLVM IR
llvm
void
函数
异常
label
这一期我们通过编译C++到LLVM代码来查看这部分的实现。在此之前我们需要了解一些简单的基础知识,之后我们将从一个最小抛出异常的代码开始,逐渐复杂化这个例子,查看生成不同的LLVM IR来理解整个过程。
AkemiHomura
2024-10-03
87
0
LLVM异常实现五 总结回顾
编译
对象
函数
异常
llvm
整个异常处理的过程中,涉及到各种层级之间相互调用,同时还有一些函数还会负责处理不同的功能(比如说personality会同时处理search以及clean),这都导致了整个过程相对复杂,因此在这里选择将异常抛出的整个过程再次用文字整理一遍,省略去庞大的代码细节的同时相对轻易的看到了整个过程是如何运转,都做了哪些事情,利于我们的理解。
AkemiHomura
2024-10-03
109
0
mold源码阅读十三 计算shdr以及osec offset
offset
sh
size
优化
源码阅读
本期的内容主要是更新section header以及set output section offsets相关。当这些操作结束后,虚拟地址会固定,因此输出文件的memory layout就固定下来了。
AkemiHomura
2023-10-22
234
0
mold源码阅读十二 创建一些输出段
file
offset
size
symbols
源码阅读
这里对verdef和verneed段进行构造,实际写入内容。其中包含了字符串信息,因此还会将字符串写入dynstr中。
AkemiHomura
2023-10-22
180
0
mold源码阅读十一 relr and dynsym
symbols
变量
程序
函数
源码阅读
将OutputSection以及Got中的relocations以压缩的形式存储到relr.dyn,在这之后rel段的大小和layout就固定了。
AkemiHomura
2023-10-22
296
0
mold源码阅读九 未解析符号的处理
file
std
symbols
遍历
源码阅读
本期内容主要是claim_unresolved_symbols的部分,其次是其他一些简单的处理
AkemiHomura
2023-10-22
197
0
mold源码阅读八 创建输出段
add
file
std
函数
源码阅读
上一期介绍了一些创建输出段之前的工作,本期主要是把创建输出相关的最后一些前置准备讲解完成。根据代码中的注释,add_synthetic_symbols以后,不会再有任何新的文件添加到ctx.objs和ctx.dsos中了。之后会再讲解简单的命令行参数处理,下一期再讲对于输出chunk中的一些处理
AkemiHomura
2023-10-22
162
0
mold源码阅读十四 固定文件layout以及创建输出
layout
sh
数据
压缩
源码阅读
上一期主要讲解了shdr计算更新的部分以及osec offset的设置,这期则是做链接最后的工作。上期在对段shrink的时候也提到部分synthetic的符号值还未固定,本期就会从这部分的值提起,之后则是对debug_section进行压缩,同时文件的大小也会产生变化,到了这里整个文件内部的layout以及文件的大小也就固定了。
AkemiHomura
2023-10-16
216
0
mold源码阅读十四 固定文件layout以及创建输出
layout
sh
数据
压缩
源码阅读
上一期主要讲解了shdr计算更新的部分以及osec offset的设置,这期则是做链接最后的工作。上期在对段shrink的时候也提到部分synthetic的符号值还未固定,本期就会从这部分的值提起,之后则是对debug_section进行压缩,同时文件的大小也会产生变化,到了这里整个文件内部的layout以及文件的大小也就固定了。
AkemiHomura
2023-10-16
277
0
mold源码阅读十五 最后的收尾工作
counter
file
std
工作
源码阅读
将所有依赖,也就是链接过程中所有读取的文件,并且写入到文件中。可以用于确认某个文件是否被加入到链接过程中。
AkemiHomura
2023-10-16
246
0
mold源码阅读七 创建输出段之前
file
push
size
std
源码阅读
上期的内容主要是section size相关的优化,这期内容是创建输出段前的最后一些处理
AkemiHomura
2023-05-21
316
0
mold源码阅读六 section size优化
file
size
std
优化
源码阅读
上一期我们讲解了一些符号相关的处理,这一期我们来讲一些对于section size的优化处理。
AkemiHomura
2023-05-10
548
0
mold源码阅读五 符号相关
file
std
symbols
version
源码阅读
上期讲完了resolve_section_pieces,在这之后本应是combine_object,但是combine_object几乎包含了后面的所有过程,因此等到整个流程讲完后或许会再回来讲,这一期的内容以符号版本的处理为主。
AkemiHomura
2023-05-03
308
0
mold源码阅读 其四 mergeable section
数据结构
数据
源码阅读
指针
字符串
上一期的内容讲完了一些针对文件的简单处理以及符号决议,这一期的主要内容是在这之后针对mergeable section的决议与合并。
AkemiHomura
2023-04-24
370
0
mold源码阅读 其三 符号决议
对象
多线程
函数
命令行
源码阅读
前面两期将读取输入的部分全部讲完了,本期开始涉及链接过程中的处理。在讲主要的符号决议之前,先讲一下mold在符号决议执行之前做的一些其他处理。
AkemiHomura
2023-04-12
369
0
mold源码阅读 其二 读取SharedFile
数据
搜索
效率
异常
源码阅读
这期的内容主要是讲完读取输入的部分,有一些之前遗漏的信息,以及之前未讲完的初始化ehframe以及shared object读取的部分。有许多地方默认读者读过上期内容,建议先阅读上期内容后再来查看本期。
AkemiHomura
2023-04-07
405
0
点击加载更多
社区活动
【纪录片】中国数据库前世今生
穿越半个世纪,探寻中国数据库50年的发展历程
立即查看
Python精品学习库
代码在线跑,知识轻松学
立即查看
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
立即体验
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
立即查看
领券
问题归档
专栏文章
快讯文章归档
关键词归档
开发者手册归档
开发者手册 Section 归档