This is the mail archive of the
ecos-discuss@sourceware.org
mailing list for the eCos project.
Macro cpu_to_je16 in jffs2.h compile error
- From: "Frank Lin" <franklin373 at gmail dot com>
- To: <ecos-discuss at ecos dot sourceware dot org>
- Date: Fri, 30 May 2008 11:51:14 +0800
- Subject: [ECOS] Macro cpu_to_je16 in jffs2.h compile error
Macro #define cpu_to_je16(x) ((jint16_t){x}) compile to:
struct jffs2_unknown_node marker = {
0xc11a13c <jffs2_mark_erased_block+608>: sub r3, r11, #76 ; 0x4c
0xc11a140 <jffs2_mark_erased_block+612>: mov r2, #12 ; 0xc
0xc11a144 <jffs2_mark_erased_block+616>: mov r0, r3
0xc11a148 <jffs2_mark_erased_block+620>: mov r1, #0 ; 0x0
0xc11a14c <jffs2_mark_erased_block+624>: bl 0xc10bf60 <_memset>
.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK),
0xc11a150 <jffs2_mark_erased_block+628>: ldr r3, [pc, #1024] ; 0xc11a558 <jffs2_mark_erased_block+1660>
0xc11a154 <jffs2_mark_erased_block+632>: sub r2, r11, #80 ; 0x50
0xc11a158 <jffs2_mark_erased_block+636>: mov r12, #2 ; 0x2
0xc11a15c <jffs2_mark_erased_block+640>: mov r0, r2
0xc11a160 <jffs2_mark_erased_block+644>: mov r1, r3
0xc11a164 <jffs2_mark_erased_block+648>: mov r2, r12
0xc11a168 <jffs2_mark_erased_block+652>: bl 0xc10bd04 <_memcpy>
0xc11a16c <jffs2_mark_erased_block+656>: ldrh r3, [r11, -#80]
0xc11a170 <jffs2_mark_erased_block+660>: strh r3, [r11, -#76]
.nodetype = cpu_to_je16(JFFS2_NODETYPE_CLEANMARKER),
0xc11a174 <jffs2_mark_erased_block+664>: ldr r3, [pc, #992] ; 0xc11a55c <jffs2_mark_erased_block+1664>
0xc11a178 <jffs2_mark_erased_block+668>: sub r2, r11, #76 ; 0x4c
0xc11a17c <jffs2_mark_erased_block+672>: mov r12, #2 ; 0x2
0xc11a180 <jffs2_mark_erased_block+676>: mov r0, r2
0xc11a184 <jffs2_mark_erased_block+680>: mov r1, r3
0xc11a188 <jffs2_mark_erased_block+684>: mov r2, r12
0xc11a18c <jffs2_mark_erased_block+688>: bl 0xc10bd04 <_memcpy>
0xc11a190 <jffs2_mark_erased_block+692>: ldrh r3, [r11, -#76] <-------these two instruction obviously error
0xc11a194 <jffs2_mark_erased_block+696>: strh r3, [r11, -#74] <-------ram will be same value
.totlen = cpu_to_je32(c->cleanmarker_size)
I don't know why, maybe gcc bug, now I change macro to:
#define cpu_to_je16(x) ({jint16_t temp;temp.v16=x;temp;})
now result OK.