Looks good to me. Please commit it. Thank you very much.

2011/11/28 Gang Yu <yugang...@gmail.com>:
> A sample case:
>
> typedef unsigned short __u16;
> typedef unsigned char __u8;
> typedef unsigned int __u32;
> typedef unsigned long kernel_ulong_t;
> struct pcmcia_device_id {
>  __u16 match_flags;
>  __u16 manf_id;
>  __u16 card_id;
>  __u8 func_id;
>  __u8 function;
>  __u8 device_no;
>  __u32 prod_id_hash[4]
>   __attribute__((aligned(sizeof(__u32))));
>  const char * prod_id[4];
>  kernel_ulong_t driver_info;
>  char * cisfile;
> };
> static struct pcmcia_device_id btuart_ids[5] ;
> extern const struct pcmcia_device_id __mod_pcmcia_device_table __attribute__
> ((unused, alias("btuart_ids")));
> there are no functions defined in this file, without the patch, when iterate
> the syms in BSS section, the condition
> 8264                if (ST_class(sym) == CLASS_VAR &&
>  8265                    ST_base_idx(sym) != ST_st_idx(sym) &&
>  8266                    !ST_is_equivalenced(sym) &&
>  8267                    ST_class(ST_base(sym)) != CLASS_BLOCK &&
> 8268                    pu != NULL && ! PU_ftn_lang(*pu) /* bug 13585 */)
> 8269                  goto skip_definition
>
> could be satisfied, so the aliased symbol not ignored and be wrongly emitted
> in the bss section, and later the alias symbol be emitted as alias again,
> which cause the assembler assert.
>
>
> Regards
> Gang
>
>
> On Mon, Nov 28, 2011 at 11:10 AM, Jian-Xin Lai <laij...@gmail.com> wrote:
>>
>> Could you please explain more about the changes in cgemit.cxx? Thank
>> you very much.
>>
>> 2011/11/25 Gang Yu <yugang...@gmail.com>:
>> > Hi,
>> >
>> >    Could a gatekeeper please help review the fix for bug924?
>> > https://bugs.open64.net/show_bug.cgi?id=924
>> >
>> > This is a kernel build bug, the cut-down bug case below:
>> >
>> > typedef unsigned int __u32;
>> > typedef unsigned long kernel_ulong_t;
>> > struct pci_device_id {
>> >  __u32 vendor, device;
>> >  __u32 subvendor, subdevice;
>> >  __u32 class, class_mask;
>> >  kernel_ulong_t driver_data;
>> > };
>> > static struct pci_device_id flexcop_pci_tbl[] = {
>> >  { .vendor = (0x13d0), .device = (0x2103), .subvendor = (~0), .subdevice
>> > =
>> > (~0) },
>> >  { },
>> > };
>> > extern const struct pci_device_id __mod_pci_device_table __attribute__
>> > ((unused, alias("flexcop_pci_tbl")));
>> > wgen asserts,
>> > ### Compiler Error during Writing WHIRL file phase:
>> > ### Invalid Storage class (COMMON) for ST Flag: (ST_INITIALIZED)
>> >
>> > If provided with the option -fno-common,
>> > ### Invalid Storage class (UGLOBAL) for ST Flag: (ST_INITIALIZED)
>> >
>> > Analysis:
>> >  current wgen does not handle the common kernel code pattern (base
>> > local,
>> > aliased extern const) correctly.
>> >
>> > Suggested patch(comments embedded in code):
>> >
>> > osprey/be/cg/cgemit.cxx    -- 0edf22d..ea2660c 100644
>> > --- a/osprey/be/cg/cgemit.cxx
>> > +++ b/osprey/be/cg/cgemit.cxx
>> > @@ -8265,7 +8265,9 @@ Process_Bss_Data (SYMTAB_IDX stab)
>> >                     ST_base_idx(sym) != ST_st_idx(sym) &&
>> >                     !ST_is_equivalenced(sym) &&
>> >                     ST_class(ST_base(sym)) != CLASS_BLOCK &&
>> > -                    pu != NULL && ! PU_ftn_lang(*pu) /* bug 13585 */)
>> > +                    // originally bug 13585. bug 924 open64.net.
>> > +                    // no pu case should also be considered.
>> > +                    ((!pu) || !PU_ftn_lang (*pu)))
>> >                   goto skip_definition;
>> >  #endif
>> >                 size = TY_size(ST_type(sym));
>> > osprey/wgen/wgen_decl.cxx    -- 8b37860..23f8143 100644
>> > --- a/osprey/wgen/wgen_decl.cxx
>> > +++ b/osprey/wgen/wgen_decl.cxx
>> > @@ -4723,12 +4723,28 @@ WGEN_Assemble_Alias (gs_t decl, gs_t target)
>> >    else {
>> >      Set_ST_base_idx (st, ST_st_idx (base_st));
>> >      Set_ST_emit_symbol(st);    // for cg
>> > -    if (ST_is_initialized (base_st))
>> > +    if (ST_is_initialized (base_st)) {
>> >        Set_ST_is_initialized (st);
>> > +      // bug924 open64.net. global alias symbol with base initialized
>> > +      // should set storage class SCLASS_DGLOBAL.
>> > +      if (ST_sclass(st) == SCLASS_COMMON || ST_sclass(st) ==
>> > SCLASS_UGLOBAL)
>> > +        Set_ST_sclass (st, SCLASS_DGLOBAL);
>> > +    }
>> >  #ifdef KEY
>> > -    if (ST_init_value_zero (base_st))
>> > +    if (ST_init_value_zero (base_st)) {
>> >        Set_ST_init_value_zero (st);
>> > +      // bug924 open64.net. Those base initialized zero
>> > +      // symbols should restore to SCLASS_UGLOBAL.
>> > +      if (ST_sclass(st) == SCLASS_DGLOBAL)
>> > +        Set_ST_sclass (st, SCLASS_UGLOBAL);
>> > +    }
>> >  #endif
>> > +    // bug924 open64.net aliased symbols in COMMON section should be
>> > +    // set to be uninitialized. Since aliased symbols themselves
>> > +    // should never be allocated.
>> > +    if (ST_sclass(st) == SCLASS_COMMON) {
>> > +      Set_ST_sclass (st, SCLASS_UGLOBAL);
>> > +    }
>> >    }
>> >  #ifdef KEY
>> >    if (!lang_cplus)
>> >  Would a gatekeeper please help a review? thanks
>> > Regards
>> > Gang
>> >
>> >
>> > ------------------------------------------------------------------------------
>> > All the data continuously generated in your IT infrastructure
>> > contains a definitive record of customers, application performance,
>> > security threats, fraudulent activity, and more. Splunk takes this
>> > data and makes sense of it. IT sense. And common sense.
>> > http://p.sf.net/sfu/splunk-novd2d
>> > _______________________________________________
>> > Open64-devel mailing list
>> > Open64-devel@lists.sourceforge.net
>> > https://lists.sourceforge.net/lists/listinfo/open64-devel
>> >
>> >
>>
>>
>>
>> --
>> Regards,
>> Lai Jian-Xin
>
>



-- 
Regards,
Lai Jian-Xin

------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure 
contains a definitive record of customers, application performance, 
security threats, fraudulent activity, and more. Splunk takes this 
data and makes sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-novd2d
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel

Reply via email to