aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMichael Meissner <meissner@cygnus.com>1997-11-26 23:16:39 +0000
committerMichael Meissner <meissner@gcc.gnu.org>1997-11-26 23:16:39 +0000
commit8fbd2dc7cbb6cd07133124ff9430a047f28f848b (patch)
tree4532929fc0c5bc2325549ec6dd90e54bfaca32d5 /gcc
parenta226df468638df96fa2ebf5274f266b2a9cbcec7 (diff)
downloadgcc-8fbd2dc7cbb6cd07133124ff9430a047f28f848b.zip
gcc-8fbd2dc7cbb6cd07133124ff9430a047f28f848b.tar.gz
gcc-8fbd2dc7cbb6cd07133124ff9430a047f28f848b.tar.bz2
Fix -msdata=sysv and pass -dynamic-linker if not already passed
From-SVN: r16768
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/rs6000/linux.h4
-rw-r--r--gcc/config/rs6000/rs6000.c14
3 files changed, 21 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 80525ff..1920597 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/config/rs6000/linux.h b/gcc/config/rs6000/linux.h
index 787afa8..0632dce 100644
--- a/gcc/config/rs6000/linux.h
+++ b/gcc/config/rs6000/linux.h
@@ -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
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index ef627e8..a39b941 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -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)