ok. So this is something introduced no in the original code.
Pls  check in. However, your print string does not need an extra '\n'
in front and should not.
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

Reply via email to