From a64e1f83301a612c383daeb903295edab61a7f86 Mon Sep 17 00:00:00 2001 From: zzy <2450266535@qq.com> Date: Fri, 20 Mar 2026 14:22:33 +0800 Subject: [PATCH] =?UTF-8?q?feat(ir2amd64):=20=E6=94=AF=E6=8C=81=E5=87=BD?= =?UTF-8?q?=E6=95=B0=E8=BF=94=E5=9B=9E=E5=80=BC=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在RET节点中添加对返回值的处理逻辑 - 解析返回值位置并加载到RAX寄存器 refactor(pe_builder): 禁用PE构建器中的日志输出 - 定义空的LOG_INFO宏以禁用调试信息 - 避免在PE构建过程中产生不必要的日志输出 --- libs/ir2mcode/src/ir2amd64.c | 4 ++++ libs/target/pe/src/scc_pe_builder.c | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/libs/ir2mcode/src/ir2amd64.c b/libs/ir2mcode/src/ir2amd64.c index 3170708..79e5d43 100644 --- a/libs/ir2mcode/src/ir2amd64.c +++ b/libs/ir2mcode/src/ir2amd64.c @@ -156,6 +156,10 @@ static void parse_node(scc_ir2mcode_ctx_t *ctx, scc_ir_bblock_ref_t node_ref, LOG_ERROR("Unsupported node type: %d", node->tag); break; case SCC_IR_NODE_RET: ///< 函数返回 + if (node->data.ret.ret_val) { + scc_reg_loc_t *loc = parse_location(ctx, node->data.ret.ret_val); + load_value_to_reg(&ctx->mcode, loc, SCC_AMD64_RAX); + } scc_mcode_amd64_mov_r64_r64(&ctx->mcode, SCC_AMD64_RSP, SCC_AMD64_RBP); scc_mcode_amd64_pop_r64(&ctx->mcode, SCC_AMD64_RBP); scc_mcode_amd64_ret(&ctx->mcode); diff --git a/libs/target/pe/src/scc_pe_builder.c b/libs/target/pe/src/scc_pe_builder.c index d243954..4cfa7a2 100644 --- a/libs/target/pe/src/scc_pe_builder.c +++ b/libs/target/pe/src/scc_pe_builder.c @@ -1,5 +1,10 @@ #include +#ifdef LOG_INFO +#undef LOG_INFO +#endif +#define LOG_INFO(...) + #define reserve_align(offset, size) ((offset) + ((size) - 1)) & ~((size) - 1) void scc_pe_builder_init(scc_pe_builder_t *builder, bool is_64,