ok. Sun 2011/4/13 朱庆 <zqing1...@gmail.com>: > Hi Sun, > > Any feedback? > Can I check in with the orignal patch? > > Thanks > zhuqing > 在 2011年4月12日 下午3:22,朱庆 <zqing1...@gmail.com> 写道: >> Yes, here blk is the actual arguments segment, the call stack is as >> follows, it will merge blk to its base ".SP" >> #5 0x558a980d in Allocate_Space (base=0x80b3d5c, blk=0x80b3c54, >> lpad=0, rpad=0, maxsize=2147483647) >> at >> /export/home/zhuqing/trunk/objdir/osprey/../../osprey/be/com/data_layout.cxx:655 >> #6 0x558a9fd3 in ST_Block_Merge (block=0x80b3d5c, sym=0x80b3c54, >> lpad=0, rpad=0, maxsize=2147483647) >> at >> /export/home/zhuqing/trunk/objdir/osprey/../../osprey/be/com/data_layout.cxx:754 >> #7 0x558aa434 in Merge_Fixed_Stack_Frame (SP_baseST=0x80b3d5c, >> FP_baseST=0x80b3d88) >> at >> /export/home/zhuqing/trunk/objdir/osprey/../../osprey/be/com/data_layout.cxx:2181 >> #8 0x558acaac in Calculate_Stack_Frame_Sizes (PU_tree=0x90fcde8) >> >> >> Thanks >> zhuqing >> 在 2011年4月12日 下午1:38,Sun Chan <sun.c...@gmail.com> 写道: >>> this is a stack variable isn't it. The data layout for this is dones >>> elsewhere. >>> Sun >>> >>> 2011/4/12 朱庆 <zqing1...@gmail.com>: >>>> Hi Sun, >>>> >>>> For above test case the error place sym_class of blk is CLASS_BLOCK >>>> but not CLASS_FUNC, so only assert on CLASS_FUNC will not work. >>>> The dump_st of blk is: >>>> Actual_Arg_StkSeg <2,1> Block (#13570) >>>> Address: 0(.SP<2,7>) >>>> Flags: 0x00000000, XLOCAL >>>> Sclass: UNKNOWN >>>> size 0, align 4, flags 0x0000, section 0, scninfo 0 >>>> >>>> How do you think? >>>> >>>> Thanks >>>> zhuqing >>>> >>>> 2011/4/11 Sun Chan <sun.c...@gmail.com>: >>>>> looks fine to me. >>>>> BTW, if sym_class is FUNC, you should never see it in this routine. >>>>> May be you should assert that. >>>>> sun >>>>> >>>>> On Mon, Apr 11, 2011 at 6:25 PM, 朱庆 <zqing1...@gmail.com> wrote: >>>>>> Hi all, >>>>>> >>>>>> Can gatekeeper help review this fix? >>>>>> >>>>>> The problem is that for expr TY_kind(ST_type(blk)), the ty_idx for blk >>>>>> is invalid if the sym_class is CLASS_FUNC or CLASS_BLOCK,CLASS_NAME. >>>>>> >>>>>> svn diff for r3492: >>>>>> Modified: trunk/osprey/be/com/data_layout.cxx >>>>>> =================================================================== >>>>>> --- trunk/osprey/be/com/data_layout.cxx 2011-02-24 22:51:04 UTC (rev >>>>>> 3491) >>>>>> +++ trunk/osprey/be/com/data_layout.cxx 2011-02-25 09:58:56 UTC (rev >>>>>> 3492) >>>>>> @@ -652,7 +652,7 @@ >>>>>> INT64 size; >>>>>> INITO_IDX ino_idx; >>>>>> // if blk is variable length struct, its size should be inito size. >>>>>> - if (TY_kind(ST_type(blk)) == KIND_STRUCT && (ino_idx = >>>>>> Find_INITO_For_Symbol(blk)) != 0) >>>>>> + if (TY_kind(ST_type(blk)) == KIND_STRUCT && (ino_idx = >>>>>> Find_INITO_For_Symbol(blk)) != 0 && INITV_kind(INITO_val(ino_idx)) == >>>>>> INITVKIND_BLOCK) >>>>>> { >>>>>> size = Get_INITO_Size(ino_idx); >>>>>> Is_True(size >= ST_size(blk),("%s's inito size smaller than >>>>>> ST_size",ST_name(blk))); >>>>>> >>>>>> Here is the case, may need to enlarge file number to reproduce: >>>>>> >>>>>> n=1 >>>>>> while [ $n -lt 2500 ] >>>>>> do >>>>>> echo "Processing $n" >>>>>> echo "void myfunc$n(){}" > file$n.c >>>>>> opencc -Ofast -c -o file$n.o file$n.c >>>>>> n=`expr $n + 1` >>>>>> >>>>>> done >>>>>> >>>>>> opencc -Ofast -shared -o a.so *.o >>>>>> >>>>>> The fix is: >>>>>> Index: be/com/data_layout.cxx >>>>>> =================================================================== >>>>>> --- be/com/data_layout.cxx (revision 3537) >>>>>> +++ be/com/data_layout.cxx (working copy) >>>>>> @@ -652,7 +652,10 @@ >>>>>> INT64 size; >>>>>> INITO_IDX ino_idx; >>>>>> // if blk is variable length struct, its size should be inito size. >>>>>> - if (TY_kind(ST_type(blk)) == KIND_STRUCT && (ino_idx = >>>>>> Find_INITO_For_Symbol(blk)) != 0 && INITV_kind(INITO_val(ino_idx)) == >>>>>> INITVKIND_BLOCK) >>>>>> + if ( ST_class(blk) == CLASS_VAR && >>>>>> + TY_kind(ST_type(blk)) == KIND_STRUCT && >>>>>> + (ino_idx = Find_INITO_For_Symbol(blk)) != 0 && >>>>>> + INITV_kind(INITO_val(ino_idx)) == INITVKIND_BLOCK ) >>>>>> { >>>>>> size = Get_INITO_Size(ino_idx); >>>>>> Is_True(size >= ST_size(blk),("%s's inito size smaller than >>>>>> ST_size",ST_name(blk))); >>>>>> >>>>>> Thanks Michael Lai point out the issue and provide the case! >>>>>> >>>>>> Thanks >>>>>> zhuqing >>>>>> >>>>>> ------------------------------------------------------------------------------ >>>>>> Xperia(TM) PLAY >>>>>> It's a major breakthrough. An authentic gaming >>>>>> smartphone on the nation's most reliable network. >>>>>> And it wants your games. >>>>>> http://p.sf.net/sfu/verizon-sfdev >>>>>> _______________________________________________ >>>>>> Open64-devel mailing list >>>>>> Open64-devel@lists.sourceforge.net >>>>>> https://lists.sourceforge.net/lists/listinfo/open64-devel >>>>>> >>>>> >>>> >>> >> >
------------------------------------------------------------------------------ Forrester Wave Report - Recovery time is now measured in hours and minutes not days. Key insights are discussed in the 2010 Forrester Wave Report as part of an in-depth evaluation of disaster recovery service providers. Forrester found the best-in-class provider in terms of services and vision. Read this report now! http://p.sf.net/sfu/ibm-webcastpromo _______________________________________________ Open64-devel mailing list Open64-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/open64-devel