Yes, 258 is st_idx instead of pointer. It is the first symbol (258>>8)
of level 2 (258 & 0xff).

I suspect the symbol whose st-idx is 258 is reset for some reasons. Say,
the compiler
may replace the symbol with a PREG symbol. Set_ST_has_nested_ref(st)
will prevent
compiler from doing such opt.

Shuxin

Mike Murphy wrote:
> 258 is probably the st_idx, rather than ST*.  The idx is what is stored in 
> the whirl. 
>
> -----Original Message-----
> From: shuxin yang [mailto:shuxinyang2...@gmail.com] 
> Sent: Monday, June 21, 2010 1:22 PM
> To: eirc.lew
> Cc: open64-devel@lists.sourceforge.net
> Subject: Re: [Open64-devel] Best way to get at a symbol name in whirl / 
> symbol table memory scoping?
>
> It sounds very weird to me.
> I think the symbol with st-idx=258 is corrupted for some reasons.
>
> Do you call Set_ST_has_nested_ref(st) for the symbol defined in the 
> nesting func and
> ref in the nested func? If you don't, you certainly has problem in WOPT 
> (where uplevel reference is lowed)
> and downstream phases.  I don't know if lacking such flags will incur 
> problems in earlier phases.
> It is likely possible.
>
> Anyway, you can set a breakpoint at New_ST to catch the moment symbol 
> 258 is created,
> and made a hw watch to  its content. Then gdb will tell you when the 
> symbol is corrupted.
>
> If you cannot make a break at this function, you probably need to turn 
> on -fno-inline when
> building the compiler.
>
> osprey/common/com/symtab.h
>  94 inline ST*
>  95 New_ST (SYMTAB_IDX level)
>  96 {
>  97     UINT idx;
>  98     ST& s = Scope_tab[level].st_tab->New_entry (idx);
>  99     // Clear the random padding bits in ST.
> 100     // Otherwise, these random paddings may make bcmp/memcmp 
> mis-compare.
> 101     memset(&s, 0, sizeof(ST));  // bug 14141
> 102     Set_ST_st_idx (s, make_ST_IDX (idx, level));
> 103     return &s;
> 104 }
>
> Shuxin
>
>
> eirc.lew wrote:
>   
>> Hi,
>> Thank you for your reply.
>> The symbol I created is right, and the reason it encounters errors, I 
>> think it is because I create a child pu named  childpu and the childpu 
>> nested in the parent pu of ppu, When I do the same thing in the ppu, 
>> it seems all right.
>>   What I want to do is to create a new symbol sym in childpu which 
>> correspond to the symbol of orig_st in ppu, and I want to do is:
>>    sym = orig_st;
>>    But, when I want to LDID orig_st, it seems I can't do it this way.
>>  
>> Actually, what I want to do is like the inline_micro_task in OpenMP of 
>> open64, for example:
>>  
>>   int mian()
>>   {
>>     int sum = 10;
>>     int add()
>>     {
>>        for(int i = 0; i < 10; i++)
>> L1:       sum += i;
>>        return sum;
>>     } 
>>     return 0;
>>   }
>>  
>> I want to realize the L1 line by reconstruct the whirl tree of 
>> the program.
>>  
>>  
>>  
>>
>>         // in this function ,I can access orig_st and new_st by
>>         ST_name(orig_st);
>>         Gen_MP_Load_Store(v->orig_st, v->orig_offset, v->new_st,
>>         v->new_offset, v->is_dynamic_array)      
>>           //  in this function, ST_name(from_st) returns "i", the
>>         result is right.
>>           Gen_MP_Load ( from_st, from_offset )
>>         L1:  WN_RLdid (rtype=4, desc=4, offset=0, *sym=0x80920dc*,
>>         align=14850);// ST_name(sym) return the right result
>>         L2      WN_RLdid (rtype=4, desc=4, offset=0, *sym=258*,
>>         align=14850) // sym is st_idx, and ST_name(sym) return error;
>>          
>>                    
>>         L3:            WN_CreateLdid (opr=OPR_LDID, rtype=4, desc=4,
>>         offset=0,* st=258*, ty=14850, field_id=0)
>>          
>>           because the WN return from WN_CreatedLdid include the symbol
>>         of st, but when I do like below:
>>             p dump_tree(wn), it corrupts,
>>           but When  do: p dump_tree_no_st(wn), it returns the right
>>         result as below:
>>           I4I4LDID 0 <null-st> T<### ERROR: null ptr>
>>          
>>         But, I find sometime the same operation on L2, it is also
>>         right, but this it fails.
>>          
>>         What is the reason?
>>          
>>          
>>
>>     
>
>
> ------------------------------------------------------------------------------
> ThinkGeek and WIRED's GeekDad team up for the Ultimate 
> GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the 
> lucky parental unit.  See the prize list and enter to win: 
> http://p.sf.net/sfu/thinkgeek-promo
> _______________________________________________
> 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.
> -----------------------------------------------------------------------------------
>
>   


------------------------------------------------------------------------------
ThinkGeek and WIRED's GeekDad team up for the Ultimate 
GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the 
lucky parental unit.  See the prize list and enter to win: 
http://p.sf.net/sfu/thinkgeek-promo
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel

Reply via email to