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
bug721_v2.patch
Description: Binary data
------------------------------------------------------------------------------ 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 [email protected] https://lists.sourceforge.net/lists/listinfo/open64-devel
