Is the struct size 0 for the SL case too.

Murthy

-----Original Message-----
From: Sun Chan [mailto:sun.c...@gmail.com] 
Sent: Thursday, November 18, 2010 7:28 PM
To: 朱庆; Gang Yu
Cc: open64-devel@lists.sourceforge.net
Subject: Re: [Open64-devel] review request for missing .setion .bss in cgemit

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
------------------------------------------------------------------------------
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

Reply via email to