Author: jaewook
Date: 2011-03-31 13:04:20 -0400 (Thu, 31 Mar 2011)
New Revision: 3530

Modified:
   trunk/osprey/be/cg/calls.cxx
   trunk/osprey/be/cg/register.cxx
   trunk/osprey/be/cg/whirl2ops.cxx
   trunk/osprey/be/cg/x8664/cgemit_targ.cxx
   trunk/osprey/be/cg/x8664/exp_loadstore.cxx
   trunk/osprey/be/cg/x8664/expand.cxx
   trunk/osprey/common/com/x8664/config_targ.cxx
Log:
This fixes bug 721, which is a linker error for helloworld.c when "-fpie
-pie -ipa" is given. Gen_PIC_Call_Shared is also checked now for some
code where only Gen_PIC_Shared used to be checked. Reviewed and approved
by Sun Chan.



Modified: trunk/osprey/be/cg/calls.cxx
===================================================================
--- trunk/osprey/be/cg/calls.cxx        2011-03-30 18:00:06 UTC (rev 3529)
+++ trunk/osprey/be/cg/calls.cxx        2011-03-31 17:04:20 UTC (rev 3530)
@@ -374,7 +374,7 @@
 #ifdef TARG_X8664
   if( CG_opt_level > 0  &&
       Is_Target_32bit() &&
-      Gen_PIC_Shared    &&
+      (Gen_PIC_Shared || Gen_PIC_Call_Shared)    &&
       !PU_References_GOT ){
     TN* ebx_tn = Ebx_TN();
     REGISTER_Set_Allocatable( TN_register_class(ebx_tn),
@@ -924,7 +924,7 @@
   }
 
 #ifdef TARG_X8664
-  if( Is_Target_32bit() && Gen_PIC_Shared ){
+  if( Is_Target_32bit() && (Gen_PIC_Shared || Gen_PIC_Call_Shared) ){
     EETARG_Generate_PIC_Entry_Code( bb, &ops );
   }
 #endif
@@ -1749,7 +1749,7 @@
     EETARG_Restore_Extra_Callee_Tns (&ops);
 
 #ifdef TARG_X8664
-  if( Is_Target_32bit() && Gen_PIC_Shared ){
+  if( Is_Target_32bit() && (Gen_PIC_Call_Shared || Gen_PIC_Shared) ){
     EETARG_Generate_PIC_Exit_Code( bb_epi, &ops );
   }
 #endif

Modified: trunk/osprey/be/cg/register.cxx
===================================================================
--- trunk/osprey/be/cg/register.cxx     2011-03-30 18:00:06 UTC (rev 3529)
+++ trunk/osprey/be/cg/register.cxx     2011-03-31 17:04:20 UTC (rev 3530)
@@ -776,7 +776,7 @@
        be used to hold the address pointing to the global offset table.
     */
     if( Is_Target_32bit() &&
-       Gen_PIC_Shared    &&
+       (Gen_PIC_Shared || Gen_PIC_Call_Shared)   &&
        rclass == TN_register_class(ebx_tn) ){
       reg_alloc_status[rclass][TN_register(ebx_tn)] = AS_not_allocatable;
       re_init = TRUE;

Modified: trunk/osprey/be/cg/whirl2ops.cxx
===================================================================
--- trunk/osprey/be/cg/whirl2ops.cxx    2011-03-30 18:00:06 UTC (rev 3529)
+++ trunk/osprey/be/cg/whirl2ops.cxx    2011-03-31 17:04:20 UTC (rev 3530)
@@ -1678,7 +1678,7 @@
 
 #ifdef TARG_X8664
   if( Is_Target_32bit() &&
-      Gen_PIC_Shared    &&
+      (Gen_PIC_Shared || Gen_PIC_Call_Shared)    &&
       call_st != NULL   &&
       !ST_is_export_local(call_st) ){
     PU_References_GOT = TRUE;
@@ -7784,7 +7784,7 @@
 
 #ifdef TARG_X8664
   if( Is_Target_32bit() &&
-      Gen_PIC_Shared    &&
+      (Gen_PIC_Shared || Gen_PIC_Call_Shared)   &&
       call_st != NULL   &&
       !ST_is_export_local(call_st) ){
     PU_References_GOT = TRUE;

Modified: trunk/osprey/be/cg/x8664/cgemit_targ.cxx
===================================================================
--- trunk/osprey/be/cg/x8664/cgemit_targ.cxx    2011-03-30 18:00:06 UTC (rev 
3529)
+++ trunk/osprey/be/cg/x8664/cgemit_targ.cxx    2011-03-31 17:04:20 UTC (rev 
3530)
@@ -3906,7 +3906,7 @@
     // Mach-O linker evidently handles this automatically
 #else /* defined(BUILD_OS_DARWIN) */
     // Add a reference to the PLT under -fPIC compilation.
-    if ( Gen_PIC_Shared &&  
+    if ( (Gen_PIC_Shared || Gen_PIC_Call_Shared) &&  
         !TN_is_label( OP_opnd(op,opnd) ) &&
          TOP_is_jump(topcode) &&
          opnd == OP_find_opnd_use(op,OU_target) ) {

Modified: trunk/osprey/be/cg/x8664/exp_loadstore.cxx
===================================================================
--- trunk/osprey/be/cg/x8664/exp_loadstore.cxx  2011-03-30 18:00:06 UTC (rev 
3529)
+++ trunk/osprey/be/cg/x8664/exp_loadstore.cxx  2011-03-31 17:04:20 UTC (rev 
3530)
@@ -1176,8 +1176,8 @@
       else if( Is_Target_64bit() ){
         FmtAssert(!ST_is_thread_local(base_sym),
                   ("Exp_Ldst: thread-local storage should not be handled 
here"));
-       if (Gen_PIC_Shared) {
-         if ( !ST_is_export_local(base_sym) ) {
+       if (Gen_PIC_Shared || Gen_PIC_Call_Shared) {
+         if ( ST_is_preemptible(base_sym) ) {
            TN *tmp = base_ofst == 0 ? tn : Build_TN_Like(tn);
            Build_OP( TOP_ld64, tmp, Rip_TN(), 
                      Gen_Symbol_TN( base_sym, 0, TN_RELOC_X8664_GOTPCREL ),
@@ -1225,7 +1225,8 @@
          ErrMsg(EC_Misc_User_Abort,
            ("Detected 64-bit address offset under -m32.  Try -m64 
-mcmodel=medium."));
 
-       if( Gen_PIC_Shared && (!ST_is_export_local (base_sym) ||
+       if( (Gen_PIC_Shared || Gen_PIC_Call_Shared) && 
+           (!ST_is_export_local (base_sym) ||
                               // function, even if export_local?
                               ST_class(base_sym) == CLASS_FUNC ||
                               // section?
@@ -1337,10 +1338,11 @@
        }
       }
 
-      if( Gen_PIC_Shared && (!ST_is_export_local (base_sym) ||
-                              // section?
-                             (ST_class(base_sym) == CLASS_BLOCK &&
-                              STB_section(base_sym) /* bug 10097 */)) ){
+      if( (Gen_PIC_Shared || Gen_PIC_Call_Shared) && 
+         (!ST_is_export_local (base_sym) ||
+                             // section?
+                             (ST_class(base_sym) == CLASS_BLOCK &&
+                              STB_section(base_sym) /* bug 10097 */)) ){
 
        if( Is_Target_64bit() ){
          TN *new_base = Build_TN_Of_Mtype(Pointer_Mtype);

Modified: trunk/osprey/be/cg/x8664/expand.cxx
===================================================================
--- trunk/osprey/be/cg/x8664/expand.cxx 2011-03-30 18:00:06 UTC (rev 3529)
+++ trunk/osprey/be/cg/x8664/expand.cxx 2011-03-31 17:04:20 UTC (rev 3530)
@@ -9845,7 +9845,7 @@
                 Gen_Literal_TN(4*(num_xmms-8), 4), ops);
       }
       Build_OP(TOP_neg64, r11_tn, r11_tn, ops);
-      if ( Gen_PIC_Shared ) {
+      if ( Gen_PIC_Shared || Gen_PIC_Call_Shared ) {
        Build_OP ( TOP_lea64, rax_tn, Rip_TN(), OP_opnd( op, 4 ), ops );
        ops->last->bb = bb; // to pass Verify_Operand
        Build_OP ( TOP_leax64, r11_tn, r11_tn, rax_tn, 

Modified: trunk/osprey/common/com/x8664/config_targ.cxx
===================================================================
--- trunk/osprey/common/com/x8664/config_targ.cxx       2011-03-30 18:00:06 UTC 
(rev 3529)
+++ trunk/osprey/common/com/x8664/config_targ.cxx       2011-03-31 17:04:20 UTC 
(rev 3530)
@@ -819,8 +819,8 @@
     FP_Exception_Enable_Min |= FPX_V;
 
 // TMP: ignore cpic until we figure out what to do with it
-  if (Gen_PIC_Call_Shared)
-       Gen_PIC_Call_Shared = FALSE;
+//   if (Gen_PIC_Call_Shared)
+//     Gen_PIC_Call_Shared = FALSE;
 
   return;
 }


------------------------------------------------------------------------------
Create and publish websites with WebMatrix
Use the most popular FREE web apps or write code yourself; 
WebMatrix provides all the features you need to develop and 
publish your website. http://p.sf.net/sfu/ms-webmatrix-sf
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel

Reply via email to