Gcc behaviour for attribute aligned has changed a little in the last few years. Previously it used to state:
"The `aligned' attribute can only increase the alignment; but you can decrease it by specifying `packed' as well." and so it used to be okay for Adjust_Alignment to always increase the alignment. But in most gcc recent versions, it allows for attribute aligned to decrease alignment also, and so to match gcc behaviour, Adjust_Alignment ought not to increase the alignment in that case. So there needs to be some way to detect the case. The proposal is to handle that by adding a boolean flag indicating that the alignment was user-specified. (Ok, I'm just repeating what Jian-Xin Lai has already said... but with some explanation for why there used not to be a problem here.) Rgds, Steve. Sun Chan wrote: > the point is, I don't think you need two places to store alignment > info, user specified or not > Sun > > 2011/8/25 Jian-Xin Lai <laij...@gmail.com>: >> No, there is no case with 2 different alignment. ST's alignment is saved in >> ST's TY_IDX, not in the TY. The front end will set the correct alignment for >> the ST for all cases. TY only keeps the size of the type. TY doen't have the >> alignment size. >> >> 在 2011年8月25日 下午4:19,Sun Chan <sun.c...@gmail.com>写道: >>> it's not a question. I am saying, symbol of different alignment should >>> have different type. Hence, the alignment is associated at type table, >>> not symtab >>> Sim >>> >>> 2011/8/25 Jian-Xin Lai <laij...@gmail.com>: >>>> I'm not sure if I understand your question. The TY_IDX is composed by 2 >>>> parts: index to TY_TABLE and extra flags for volatile, restrict and >>>> alignment. Every symbol with the same TY has its own alignment embeded >>>> in >>>> the TY_IDX. >>>> >>>> 在 2011年8月25日 下午4:01,Sun Chan <sun.c...@gmail.com>写道: >>>>> I have problem having one attribute that have annotation in 2 >>>>> different places. Also, the reason it is in TYPE is that symbols of >>>>> the same declaration but of different alignment should really be of >>>>> different type. >>>>> Sun >>>>> >>>>> 2011/8/25 Jian-Xin Lai <laij...@gmail.com>: >>>>>> The TY has "packed" flag and it's detected in Adjust_Alignment: >>>>>> 125 align= TY_align(ty_idx); >>>>>> 126 >>>>>> 127 if (Is_Structure_Type(ty) && TY_is_packed(ty)) >>>>>> 128 { >>>>>> 129 return align; >>>>>> 130 } >>>>>> >>>>>> If the TY is packed, the BE don't change its alignment. We did the >>>>>> similar >>>>>> thing. The different is our change is applied on ST instead of TY >>>>>> because >>>>>> this is a GNU extension on variable. >>>>>> >>>>>> 在 2011年8月25日 下午3:05,Sun Chan <sun.c...@gmail.com>写道: >>>>>>> How would you classify "pack" data? >>>>>>> Sun >>>>>>> >>>>>>> 2011/8/25 Jian-Xin Lai <laij...@gmail.com>: >>>>>>>> The reason we introduce the "user align" is to separate this kind >>>>>>>> of >>>>>>>> case >>>>>>>> from the generic aggregate. So that we can do the two things well: >>>>>>>> If user specifies an alignment, we follow the size. Otherwise, the >>>>>>>> compiler >>>>>>>> can decide what's the proper alignment. >>>>>>>> >>>>>>>> 在 2011年8月25日 下午1:57,Mike Murphy <mmur...@nvidia.com>写道: >>>>>>>>> So Aggregate_Alignment is a settable option (defaults to 16 in >>>>>>>>> some >>>>>>>>> targets). What if you compile with -TENV:align_aggregates=8, or >>>>>>>>> don't >>>>>>>>> default it to 16? >>>>>>>>> >>>>>>>>> -----Original Message----- >>>>>>>>> From: 朱庆 [mailto:zqing1...@gmail.com] >>>>>>>>> Sent: Wednesday, August 24, 2011 10:53 PM >>>>>>>>> To: Mike Murphy >>>>>>>>> Cc: Sun Chan; open64-devel@lists.sourceforge.net >>>>>>>>> Subject: Re: [Open64-devel] Code Review request for bug832[wgen] >>>>>>>>> >>>>>>>>> The alignment is correct in .B file, but in Adjusted_Alignment >>>>>>>>> there >>>>>>>>> are following code to modify the align. In our case we do not >>>>>>>>> want >>>>>>>>> this happen. >>>>>>>>> else { >>>>>>>>> align = MAX(align, Aggregate_Alignment); >>>>>>>>> } >>>>>>>>> >>>>>>>>> Best wishes >>>>>>>>> zhuqing >>>>>>>>> 在 2011年8月25日 下午12:28,Mike Murphy <mmur...@nvidia.com> 写道: >>>>>>>>>> The alignment is stored in the ty_idx (see TY_align), and then >>>>>>>>>> there >>>>>>>>>> are >>>>>>>>>> routines like Adjusted_Alignment in stblock that can modify it. >>>>>>>>>> I >>>>>>>>>> suspect >>>>>>>>>> the problem here is that the alignment is being put on the >>>>>>>>>> object >>>>>>>>>> rather >>>>>>>>>> than the type, and then is lost (but should still be possible, >>>>>>>>>> because the >>>>>>>>>> TY_align is like qualifiers that can vary from the base type). >>>>>>>>>> Does >>>>>>>>>> the >>>>>>>>>> alignment show up properly in the intermediate .B file? >>>>>>>>>> >>>>>>>>>> -----Original Message----- >>>>>>>>>> From: Sun Chan [mailto:sun.c...@gmail.com] >>>>>>>>>> Sent: Wednesday, August 24, 2011 7:51 PM >>>>>>>>>> To: 朱庆 >>>>>>>>>> Cc: open64-devel@lists.sourceforge.net >>>>>>>>>> Subject: Re: [Open64-devel] Code Review request for >>>>>>>>>> bug832[wgen] >>>>>>>>>> >>>>>>>>>> The reason I asked for the file is that I think there has to be >>>>>>>>>> some >>>>>>>>>> alignment attribute somewhere. I am sure data alignment has >>>>>>>>>> been >>>>>>>>>> dealt >>>>>>>>>> with in the compiler. That it is due to user, or just language >>>>>>>>>> attribute might be irrelevant from compiler point of view. >>>>>>>>>> >>>>>>>>>> Mike or Murthy, >>>>>>>>>> Do you remember where alignment is handled? I only found >>>>>>>>>> Alignment >>>>>>>>>> field in BLK of the symtab_defs.h >>>>>>>>>> >>>>>>>>>> Sun >>>>>>>>>> >>>>>>>>>> 2011/8/25 朱庆 <zqing1...@gmail.com>: >>>>>>>>>>> Hi Sun, >>>>>>>>>>> >>>>>>>>>>> Attached symtab_defs.h. >>>>>>>>>>> >>>>>>>>>>> Thanks >>>>>>>>>>> zhuqing >>>>>>>>>>> 2011/8/24 Sun Chan <sun.c...@gmail.com>: >>>>>>>>>>>> can you send me the full symtab_defs.h? >>>>>>>>>>>> Sun >>>>>>>>>>>> >>>>>>>>>>>> On Wed, Aug 24, 2011 at 4:56 PM, 朱庆 <zqing1...@gmail.com> >>>>>>>>>>>> wrote: >>>>>>>>>>>>> Hi all, >>>>>>>>>>>>> >>>>>>>>>>>>> Can gatekeeper help review following fix for bug832? >>>>>>>>>>>>> https://bugs.open64.net/show_bug.cgi?id=832 >>>>>>>>>>>>> >>>>>>>>>>>>> small case, a.c: >>>>>>>>>>>>> struct obs_kernel_param { >>>>>>>>>>>>> const char *str; >>>>>>>>>>>>> }; >>>>>>>>>>>>> >>>>>>>>>>>>> const char str1[] = "acpi_parse_apic_instance="; >>>>>>>>>>>>> const char str2[] = "acpi_os_name"; >>>>>>>>>>>>> struct obs_kernel_param var1 >>>>>>>>>>>>> __attribute__ ((aligned ((sizeof (long))))) = >>>>>>>>>>>>> {str1}; >>>>>>>>>>>>> >>>>>>>>>>>>> struct obs_kernel_param var2 >>>>>>>>>>>>> __attribute__ ((aligned ((sizeof (long))))) = >>>>>>>>>>>>> {str2}; >>>>>>>>>>>>> >>>>>>>>>>>>> when compile with opencc, nm a.o >>>>>>>>>>>>> 0000000000000000 D var1 >>>>>>>>>>>>> 0000000000000010 D var2 >>>>>>>>>>>>> compile with gcc, nm a.o >>>>>>>>>>>>> 0000000000000000 D var1 >>>>>>>>>>>>> 0000000000000008 D var2 >>>>>>>>>>>>> the offset of var1 and var2 are different, the problem with >>>>>>>>>>>>> opencc >>>>>>>>>>>>> is >>>>>>>>>>>>> :fixed align attribute does not work, this may cause some >>>>>>>>>>>>> problems >>>>>>>>>>>>> when mix link two files with opencc and gcc. >>>>>>>>>>>>> >>>>>>>>>>>>> The fix is to add a new ST flag to record >>>>>>>>>>>>> user_defined_align. >>>>>>>>>>>>> >>>>>>>>>>>>> Thanks >>>>>>>>>>>>> zhuqing >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> ------------------------------------------------------------------------------ >>>>>>>>>>>>> EMC VNX: the world's simplest storage, starting under $10K >>>>>>>>>>>>> The only unified storage solution that offers unified >>>>>>>>>>>>> management >>>>>>>>>>>>> Up to 160% more powerful than alternatives and 25% more >>>>>>>>>>>>> efficient. >>>>>>>>>>>>> Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev >>>>>>>>>>>>> _______________________________________________ >>>>>>>>>>>>> Open64-devel mailing list >>>>>>>>>>>>> Open64-devel@lists.sourceforge.net >>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/open64-devel >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> ------------------------------------------------------------------------------ >>>>>>>>>> EMC VNX: the world's simplest storage, starting under $10K >>>>>>>>>> The only unified storage solution that offers unified >>>>>>>>>> management >>>>>>>>>> Up to 160% more powerful than alternatives and 25% more >>>>>>>>>> efficient. >>>>>>>>>> Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev >>>>>>>>>> _______________________________________________ >>>>>>>>>> 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. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> ----------------------------------------------------------------------------------- >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> ------------------------------------------------------------------------------ >>>>>>>>> EMC VNX: the world's simplest storage, starting under $10K >>>>>>>>> The only unified storage solution that offers unified management >>>>>>>>> Up to 160% more powerful than alternatives and 25% more >>>>>>>>> efficient. >>>>>>>>> Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev >>>>>>>>> _______________________________________________ >>>>>>>>> Open64-devel mailing list >>>>>>>>> Open64-devel@lists.sourceforge.net >>>>>>>>> https://lists.sourceforge.net/lists/listinfo/open64-devel >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> Regards, >>>>>>>> Lai Jian-Xin >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> ------------------------------------------------------------------------------ >>>>>>>> EMC VNX: the world's simplest storage, starting under $10K >>>>>>>> The only unified storage solution that offers unified management >>>>>>>> Up to 160% more powerful than alternatives and 25% more efficient. >>>>>>>> Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev >>>>>>>> _______________________________________________ >>>>>>>> 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 >>>> >> >> >> -- >> Regards, >> Lai Jian-Xin >> > > ------------------------------------------------------------------------------ > EMC VNX: the world's simplest storage, starting under $10K > The only unified storage solution that offers unified management > Up to 160% more powerful than alternatives and 25% more efficient. > Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev > _______________________________________________ > Open64-devel mailing list > Open64-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/open64-devel ------------------------------------------------------------------------------ EMC VNX: the world's simplest storage, starting under $10K The only unified storage solution that offers unified management Up to 160% more powerful than alternatives and 25% more efficient. Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev _______________________________________________ Open64-devel mailing list Open64-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/open64-devel