refactor(ast2ir): 重构ABI类型系统并修复union结构问题
- 将scc_ast_def.h中的attr_of从union改为struct以修复结构定义问题 - 添加type_abi依赖到ast2ir模块的cbuild.toml配置文件中 - 重命名scc_ast2ir.h中的abi字段为type_abi,并更新相关初始化函数签名 - 移除废弃的scc_abi_type.h和相关平台ABI头文件 - 添加辅助函数is_variadic_marker和fixed_param_count用于处理可变参数 - 添加数组和聚合类型初始化的辅助函数
This commit is contained in:
@@ -63,13 +63,19 @@ void scc_pe_idata_builder_init(scc_pe_idata_builder_t *builder,
|
||||
}
|
||||
|
||||
u32 scc_pe_reserve_idata(scc_pe_idata_builder_t *builder) {
|
||||
/* TODO overflow check: idata_size 为 u32, 乘法可能溢出,
|
||||
设计未定暂不插入 stdint 类型, 仅做简单防护 */
|
||||
u32 idata_size = (scc_vec_size(builder->idata_libs) + 1) *
|
||||
sizeof(IMAGE_IMPORT_DESCRIPTOR);
|
||||
|
||||
scc_vec_foreach(builder->idata_libs, i) {
|
||||
scc_pe_idata_lib_t *lib = &scc_vec_at(builder->idata_libs, i);
|
||||
idata_size += (scc_vec_size(lib->symbol_names) + 1) * 2 *
|
||||
sizeof(IMAGE_THUNK_DATA64);
|
||||
u32 thunk_size = (scc_vec_size(lib->symbol_names) + 1) * 2 *
|
||||
sizeof(IMAGE_THUNK_DATA64);
|
||||
if (idata_size + thunk_size < idata_size) {
|
||||
LOG_FATAL("scc_pe_reserve_idata: u32 overflow");
|
||||
}
|
||||
idata_size += thunk_size;
|
||||
scc_winpe_hnt_builder_push(&builder->hnt_builder, lib->name, 0);
|
||||
|
||||
scc_vec_foreach(lib->symbol_names, j) {
|
||||
@@ -78,6 +84,9 @@ u32 scc_pe_reserve_idata(scc_pe_idata_builder_t *builder) {
|
||||
}
|
||||
}
|
||||
builder->hnt_builder.section_offset = idata_size;
|
||||
if (idata_size + scc_vec_size(builder->hnt_builder.data) < idata_size) {
|
||||
LOG_FATAL("scc_pe_reserve_idata: u32 overflow on hnt data");
|
||||
}
|
||||
idata_size += scc_vec_size(builder->hnt_builder.data);
|
||||
|
||||
scc_vec_realloc(builder->buffer, idata_size);
|
||||
|
||||
Reference in New Issue
Block a user