diff options
author | meissner <meissner@138bc75d-0d04-0410-961f-82ee72b054a4> | 1997-11-26 23:16:39 +0000 |
---|---|---|
committer | meissner <meissner@138bc75d-0d04-0410-961f-82ee72b054a4> | 1997-11-26 23:16:39 +0000 |
commit | 4aab7421b6cc75cf799588557d75eceaf1320b29 (patch) | |
tree | 4532929fc0c5bc2325549ec6dd90e54bfaca32d5 | |
parent | cb0f7e453311fb4f7e149e64498da935dd6dfebd (diff) | |
download | gcc-4aab7421b6cc75cf799588557d75eceaf1320b29.tar.gz |
Fix -msdata=sysv and pass -dynamic-linker if not already passed
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@16768 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/config/rs6000/linux.h | 4 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 14 |
3 files changed, 21 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 80525ff7b5f..1920597e6ba 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 787afa816d4..0632dce3655 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 ef627e87b49..a39b94132be 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) |