Gcc插件-向生成的程序集添加标签

Gcc插件-向生成的程序集添加标签,gcc,gcc-plugins,Gcc,Gcc Plugins,我正在尝试使用插件生成带有以下代码的标签: tree lab = build_decl (gimple_location (gsi_stmt (gsi)), LABEL_DECL, NULL_TREE, void_type_node); DECL_ARTIFICIAL (lab) = 0; DECL_IGNORED_P (lab) = 1; DECL_CONTEXT (lab) = current_function_decl; DECL_NAME(lab) = get_identifier("t

我正在尝试使用插件生成带有以下代码的标签:

tree lab = build_decl (gimple_location (gsi_stmt (gsi)),
LABEL_DECL, NULL_TREE, void_type_node);
DECL_ARTIFICIAL (lab) = 0;
DECL_IGNORED_P (lab) = 1;
DECL_CONTEXT (lab) = current_function_decl;
DECL_NAME(lab) = get_identifier("test_text");

location_t loc = gimple_location (gsi_stmt (gsi));
tree label = create_artificial_label (loc);
gsi_insert_before (&gsi, gimple_build_label (lab), GSI_SAME_STMT);
当我尝试为我的英特尔处理器生成代码时,这一点是有效的,但如果我在arm的交叉编译器中运行此插件,标签的名称将更改为带有随机名称的本地符号。例如,不是获取“test_text:”而是获取“.L4:”。此外,还添加了一条附加指令

下面是在未启用标签生成代码的情况下生成的代码示例

ldrb    r3, [fp, #-5]   @ zero_extendqisi2
add r2, r2, r3
movw    r3, #:lower16:b1
movt    r3, #:upper16:b1
str r2, [r3, #4]
现在,它遵循使用第一个显示的代码生成的代码(在树和gimple表示中生成标签)。您可以看到test_文本标签被.L5替代,并且在标签下面添加了一条add指令。这怎么可能

 ldrb   r3, [fp, #-5]   @ zero_extendqisi2
 add    r2, r2, r3
.L5:
 add    fp, fp, #4
 movw   r3, #:lower16:b1
 movt   r3, #:upper16:b1
 str    r2, [r3, #4]
我正在运行我的插件后,CFG通过。另外,我正在使用Linaro交叉编译器arm eabi gcc版本6.3.1

致意

编辑1: 还发现,通过使用-fdump树进行优化,在这一阶段之前,一切都很好。*.optmized文件的部分输出:

:
_8=i_2%3;
_9 = _8 == 0;
测试文本:
第3部分=第9部分;
_11=i_2%5