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
>
>

------------------------------------------------------------------------------
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

Reply via email to