I don't consider empty structs to be common, so I'm not that surprised. We should test this with both C and C++ (can fortran have empty structs?). NVISA avoids this path entirely and I don't have any other targets than x86 to test with (which I see is wrong).
-----Original Message----- From: Sun Chan [mailto:sun.c...@gmail.com] Sent: Thursday, November 18, 2010 10:27 AM To: Jian-Xin Lai Cc: open64-devel@lists.sourceforge.net Subject: Re: [Open64-devel] review request for missing .setion .bss in cgemit I understand that. I am just baffled that such obvious bug exists. And I am conjecturing this is due to some other changes that happened. That is why I am asking for a larger segment of code to look at Sun 2010/11/19 Jian-Xin Lai <laij...@gmail.com>: > Yes, line3 and line 4 should be in .saa, not .rodata. > > 2010/11/18 Sun Chan <sun.c...@gmail.com> >> >> this problem is too simple to be wrong, makes me think something >> really bad has happened. Can someone try the case for a different >> target (such as IA64, SL, Mips ...?) >> I'd like to know why this fails with a broader code fragment for review. >> >> Mike, >> What do you think? >> >> 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 > > > > -- > Regards, > Lai Jian-Xin > ------------------------------------------------------------------------------ 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 ----------------------------------------------------------------------------------- This email message is for the sole use of the intended recipient(s) and may contain confidential information. Any unauthorized review, use, disclosure or distribution is prohibited. If you are not the intended recipient, please contact the sender by reply email and destroy all copies of the original message. ----------------------------------------------------------------------------------- ------------------------------------------------------------------------------ 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