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

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

Reply via email to