Fix -msdata=sysv and pass -dynamic-linker if not already passed
authorMichael Meissner <meissner@cygnus.com>
Wed, 26 Nov 1997 23:16:39 +0000 (23:16 +0000)
committerMichael Meissner <meissner@gcc.gnu.org>
Wed, 26 Nov 1997 23:16:39 +0000 (23:16 +0000)
From-SVN: r16768

gcc/ChangeLog
gcc/config/rs6000/linux.h
gcc/config/rs6000/rs6000.c

index 80525ff7b5fa83a57e3680cf79cd393616cc3d86..1920597e6ba3d30ca8836a1a499e3ba15b8b87eb 100644 (file)
@@ -1,5 +1,13 @@
 Wed Nov 26 15:47:30 1997  Michael Meissner  <meissner@cygnus.com>
 
+       * rs6000.c (SMALL_DATA_REG): Register to use for small data relocs.
+       (print_operand): Use SMALL_DATA_REG for the register involved in
+       small data relocations.
+       (print_operand_address): Ditto.
+
+       * rs6000/linux.h (LINK_SPEC): Pass -dynamic-linker /lib/ld.so.1 if
+       -dynamic linker is not used.
+
        * rs6000.md (call insns): For local calls, use @local suffix under
        System V.  Don't use @plt under Solaris.
 
index 787afa816d421614674904aed8849476c6201069..0632dce365573d08a03a507fe1a22a5c1ed6db2a 100644 (file)
@@ -28,7 +28,9 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #undef LINK_SPEC
 #define LINK_SPEC "-m elf32ppc %{shared:-shared} \
   %{!shared: \
-    %{!static: %{rdynamic:-export-dynamic}} \
+    %{!static: \
+      %{rdynamic:-export-dynamic} \
+      %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
     %{static:-static}}"
 
 #undef LIB_DEFAULT_SPEC
index ef627e87b49c556f4ba7d4762af07ba3214acb6b..a39b94132be78f26074f70c6ec4733248d0954f9 100644 (file)
@@ -2342,8 +2342,10 @@ rs6000_init_expanders ()
 
 #if TARGET_ELF
 #define SMALL_DATA_RELOC ((rs6000_sdata == SDATA_EABI) ? "sda21" : "sdarel")
+#define SMALL_DATA_REG ((rs6000_sdata == SDATA_EABI) ? 0 : 13)
 #else
 #define SMALL_DATA_RELOC "sda21"
+#define SMALL_DATA_REG 0
 #endif
 
 void
@@ -2542,7 +2544,8 @@ print_operand (file, x, code)
          else
            output_address (plus_constant (XEXP (x, 0), 4));
          if (small_data_operand (x, GET_MODE (x)))
-           fprintf (file, "@%s(%s)", SMALL_DATA_RELOC, reg_names[0]);
+           fprintf (file, "@%s(%s)", SMALL_DATA_RELOC,
+                    reg_names[SMALL_DATA_REG]);
        }
       return;
                            
@@ -2770,7 +2773,8 @@ print_operand (file, x, code)
          else
            output_address (plus_constant (XEXP (x, 0), 8));
          if (small_data_operand (x, GET_MODE (x)))
-           fprintf (file, "@%s(%s)", SMALL_DATA_RELOC, reg_names[0]);
+           fprintf (file, "@%s(%s)", SMALL_DATA_RELOC,
+                    reg_names[SMALL_DATA_REG]);
        }
       return;
                            
@@ -2819,7 +2823,8 @@ print_operand (file, x, code)
          else
            output_address (plus_constant (XEXP (x, 0), 12));
          if (small_data_operand (x, GET_MODE (x)))
-           fprintf (file, "@%s(%s)", SMALL_DATA_RELOC, reg_names[0]);
+           fprintf (file, "@%s(%s)", SMALL_DATA_RELOC,
+                    reg_names[SMALL_DATA_REG]);
        }
       return;
                            
@@ -2861,7 +2866,8 @@ print_operand_address (file, x)
     {
       output_addr_const (file, x);
       if (small_data_operand (x, GET_MODE (x)))
-       fprintf (file, "@%s(%s)", SMALL_DATA_RELOC, reg_names[0]);
+       fprintf (file, "@%s(%s)", SMALL_DATA_RELOC,
+                reg_names[SMALL_DATA_REG]);
 
 #ifdef TARGET_NO_TOC
       else if (TARGET_NO_TOC)