首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“错误:尝试向后移动.org”使用Xtensa XCC,GCC工作得很好

“错误:尝试向后移动.org”使用Xtensa XCC,GCC工作得很好
EN

Stack Overflow用户
提问于 2020-07-23 16:34:06
回答 2查看 466关注 0票数 1

下面是一个最小的可重现性示例:

代码语言:javascript
复制
/*
 * Example for Xtensa xt-xcc compiler "error: attempt to move .org backwards".
 */

struct k_dict
{
    char *m_name_dict;
    char *p_name_dict;
    union
    {
        float f_value;
        int i_value;
        char* s_value;
    };
};

struct k_mode
{
    const char*  m_name;
          int    p_number;
    const struct k_dict *p;
    const struct k_dict pars[];
};

struct k_dict P1[] =
{
    {.m_name_dict="M1", .p_name_dict="P1", .s_value="string"},
    {.m_name_dict="M2", .p_name_dict="P2", .i_value=5       },
    {.m_name_dict="M3", .p_name_dict="P3", .f_value=48.0    }
};

struct k_mode mode_default =
{
    .m_name   = "default",
    .p_number = 1,
    .p        = P1,
    .pars =
    {
        {.m_name_dict = "m", .p_name_dict="p", .s_value="s"}
    }
};


int main( int argc, char **argv )
{
    return 0;
}

使用Tensil2Xtensa xcc编译器编译它会给出汇编程序错误:

代码语言:javascript
复制
"xt-xcc" -c -g -O0 -std=c11 -fmessage-length=0 -DPROC_hifi3_tv_car_5 -DCONFIG_hifi3_tv_car_5 --xtensa-system=hifi3_tv_car_5/config --xtensa-core=hifi3_tv_car_5 --xtensa-params= "\"HelloWorld/main.c\"" -o "\"HelloWorld/bin/hifi3_tv_car_5/Debug/main.o\"" 
/Temp/cc0s#6c7c.a32040: Assembler messages:
/Temp/cc0s#6c7c.a32040:39: Error: attempt to move .org backwards
xt-xcc ERROR: XtensaTools/bin/xt-as.exe returned non-zero status 1   

这是从哪来的?

注: GCC工作很好。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-27 12:18:24

C11似乎不受xt-xcc的支持,即使在添加-std=c11标志时编译器也没有报告警告。

在Xtensa手册中:“只有在Clang前端才能使用-std=c11选项启用对-std=c11标准的支持。(.)从RG-2017.7发行版开始,XCC包括一个基于LLVM项目的ClangVersion3.4的可选编译器前端。在以后的版本中,Clang前端将取代GCC。Clang前端是通过使用-clang编译器选项来选择的。”

使用Clang,上面的代码编译得很好。

票数 3
EN

Stack Overflow用户

发布于 2020-07-28 04:27:08

此问题来自为初始化mode_default而生成的代码。

代码语言:javascript
复制
        .data
        .org 0x0
        .align  16
        .global mode_default
        .type   mode_default, @object
        .size   mode_default, 12
mode_default:   # 0x0
        .long   .L_g_7
        # offset 4
        .long   1
        .long   P1 +0
        .long   .L_g_8
        .long   .L_g_9
        .long   .L_g_10
        # end of initialization for mode_default
        .org 0x10

它看起来像是编译器中的一个bug。有趣的是,我在xt-xccxt-xcc -clang中都观察到了同样的问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63059013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档