Sun, Based on your email, I changed my fix to the following (also as attachment):
Index: osprey/common/com/config.cxx =================================================================== --- osprey/common/com/config.cxx (revision 3471) +++ osprey/common/com/config.cxx (working copy) @@ -1453,9 +1453,6 @@ if ( Use_Large_GOT ) Guaranteed_Small_GOT = FALSE; - /* if we get both TENV:CPIC and TENV:PIC, use only TENV:CPIC */ - if (Gen_PIC_Call_Shared && Gen_PIC_Shared) Gen_PIC_Shared = FALSE; - /* Select optimization options: */ /* Are we skipping any PUs for optimization? */ The above code, I think, affects all targets. Was there any reason of it? --Feng Zhou On Wed, Jan 26, 2011 at 3:07 PM, Sun Chan <sun.c...@gmail.com> wrote: > I am not familiar with x86, my understanding of the generic SVR4 ABI > is that cpic is a subset of PIC. IOWs, even if cpic code goes through > GOT, it is just a performance issue. CPIC assumes that whatever is > being accessed do not have to go through GOT. The side effect of which > is that for symbols that are not pre-emptible, one does not have to > have got entry. This is the only case that could cause problem. But a > string in printf is not necessarily non-preemptible (I don't believe > language says so, but i could be outdated now). > Sun > > On Thu, Jan 27, 2011 at 6:45 AM, Feng Zhou <fengzho...@gmail.com> wrote: >> Hello, >> >> Attached is my fix to bug #721 >> (https://bugs.open64.net/show_bug.cgi?id=721), can gatekeeper review this >> fix for me please? Thank you very much. >> >> ============ >> Bug Analysis >> ============ >> This bug happens with -Ofast -pie -fpie option on. However, it does not >> happen at other optimization levels, say -O3. Further investigation shows >> that even a very simple printf("hello world\n"); program shows the same >> symptoms. This is caused by compiler generating wrong code for loading >> string constant ("hello world"). When -pie option is on, the compiler should >> not generate >> the loading code using indirect load from GOT table (e.g. movq >> $(.rodata),%rdi vs. leaq .rodata(%rip),%rdi). >> >> However, this difference is caused by the ipa. The problem is that with IPA >> and -pie specified, ipa_link passes both -TENV:CPIC (-pic1) and -TENV:PIC to >> subsequent compilation phases. However, these two options can not work >> together, at least on X86-64. At first, the effect of -TNEV:PIC option is >> nullified by -TENV:CPIC in common/com/config.cxx:1457 (if >> (Gen_PIC_Call_Shared && Gen_PIC_Shared) Gen_PIC_Shared = FALSE). Then, the >> effect of -TENV:CPIC is reset by common//com/x8664/config_targ.cxx:822: >> >> // TMP: ignore cpic until we figure out what to do with it >> if (Gen_PIC_Call_Shared) >> Gen_PIC_Call_Shared = FALSE; >> >> >> Fix to this problem is to change IPA so that it does not pass -pic1 option >> to subsequent phases when the target is X8664. It seems to me that >> -TENV:CPIC is unsupported on X8664 in the compiler. >> >> -- Feng Zhou >> >> ------------------------------------------------------------------------------ >> Special Offer-- Download ArcSight Logger for FREE (a $49 USD value)! >> Finally, a world-class log management solution at an even better price-free! >> Download using promo code Free_Logger_4_Dev2Dev. Offer expires >> February 28th, so secure your free ArcSight Logger TODAY! >> http://p.sf.net/sfu/arcsight-sfd2d >> _______________________________________________ >> Open64-devel mailing list >> Open64-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/open64-devel >> >> >
bug721_v4.patch
Description: Binary data
------------------------------------------------------------------------------ The modern datacenter depends on network connectivity to access resources and provide services. The best practices for maximizing a physical server's connectivity to a physical network are well understood - see how these rules translate into the virtual world? http://p.sf.net/sfu/oracle-sfdevnlfb
_______________________________________________ Open64-devel mailing list Open64-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/open64-devel