Reputation: 8610
Here is a minimal reproducible example:
/*
* 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;
}
Compiling this using Tensilica Xtensa xt-xcc compiler gives assembler error:
"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
Where could this come from?
Note: GCC works fine.
Upvotes: 1
Views: 687
Reputation: 873
The issue comes from the code generated for initialization of mode_default
:
.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
and it looks like a bug in the compiler. Interestingly, I observe the same issue with both xt-xcc
and xt-xcc -clang
.
Upvotes: 2
Reputation: 8610
Seems like C11 is not supported by xt-xcc
, even there is no warning reported by the compiler when the -std=c11
flag is added.
From the Xtensa manual: "Support for the C11 standard can be enabled with the -std=c11
option only with the Clang front end. (...) Starting with the RG-2017.7 release, XCC includes an alternative compiler front end based on Clang version 3.4 from the LLVM project. In future versions, the Clang front end will replace GCC. The Clang front end is selected by using the -clang
compiler option."
Using Clang the above code compiles fine.
Upvotes: 3