Gang, The code tells me that SL should have gone through the same logic. Can you double check why your's work? Sun
On Thu, Nov 18, 2010 at 5:41 PM, 朱庆 <zqing1...@gmail.com> wrote: > Hi, All > > Can gatekeeper help review this fix? > > Case a.c: > struct line { char a[0];}; > static struct line line3; > static struct line line4; > static const char a[3]={0,1,2}; > int main() > { > return 0; > } > > The feature of the case is: at least two global var in .bss section and the > type size of them is 0, then a var in .rodata or .data.rel.ro.local section. > > $opencc -O0 a.c -keep > a.s: Assembler messages: > a.s:65: Error: attempt to move .org backwards > > $cat a.s > 19 .text > 20 .align 2 > 21 > 22 .section .bss, "wa",@nobits > 23 > 24 .section .rodata, "a",@progbits > 25 .type line3, @object > 26 .size line3, 1 > 27 line3: # 0x0 > 28 .skip 16 > 29 .type line4, @object > 30 .size line4, 1 > 31 line4: # 0x10 > .... > 63 > 64 .section .rodata > 65 .org 0x0 > 66 .align 0 > 67 .type a, @object > 68 .size a, 3 > 69 a: # 0x0 > 70 # offset 0 > 71 .byte 0 > 72 # offset 1 > 73 .byte 1 > 74 # offset 2 > 75 .byte 2 > 76 # end of initialization for a > > Apperently, line25-31, should be in section .bss, so there is missing > section name emit. To fix the problem, there are many methods(cgemit.cxx): > 1. change all size from 0 to 1 like C++ empty calss > 8090 size = TY_size(ST_type(sym)); > 8091 // C++ requires empty classes to have unique addresses. > 8092 if (size == 0 && (pu == NULL || PU_cxx_lang(*pu)/*bug > 13826*/)) > 8093 size = 1; > 2. remove the "size!=0" from the branch > 8122 if (!has_named_section && size != 0) { > 8123 Change_Section_Origin (base, ofst); > 8124 if ( !Simd_Reallocate_Objects ) { > 8125 // If Simd_Reallocate_Objects, we already emitted > alignment > 8126 // inside Change_Section_Origin - may be screwed up > but we did > 3. add emit for section name: > patch: > Index: osprey/be/cg/cgemit.cxx > =================================================================== > --- osprey/be/cg/cgemit.cxx (revision 3403) > +++ osprey/be/cg/cgemit.cxx (working copy) > @@ -8167,8 +8167,13 @@ > size = TY_size(ST_type(sym)); > #ifdef KEY > // C++ requires empty classes to have unique addresses. > - if (size == 0) > + if (size == 0) { > + if (base != cur_section) { > + fprintf ( Asm_File, "\n\t%s %s\n", AS_SECTION, > ST_name(base)); > + cur_section = base; > + } > Print_Label (Asm_File, sym, 1); > + } > else > #endif > Print_Label (Asm_File, sym, size); > > I prefer the last one, are there any other suggestions? > > > Best Regards, > Zhu Qing > ------------------------------------------------------------------------------ > Beautiful is writing same markup. Internet Explorer 9 supports > standards for HTML5, CSS3, SVG 1.1, ECMAScript5, and DOM L2 & L3. > Spend less time writing and rewriting code and more time creating great > experiences on the web. Be a part of the beta today > http://p.sf.net/sfu/msIE9-sfdev2dev > _______________________________________________ > Open64-devel mailing list > Open64-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/open64-devel > > ------------------------------------------------------------------------------ Beautiful is writing same markup. Internet Explorer 9 supports standards for HTML5, CSS3, SVG 1.1, ECMAScript5, and DOM L2 & L3. Spend less time writing and rewriting code and more time creating great experiences on the web. Be a part of the beta today http://p.sf.net/sfu/msIE9-sfdev2dev _______________________________________________ Open64-devel mailing list Open64-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/open64-devel