From: Michael Meissner Date: Thu, 27 Nov 1997 00:06:53 +0000 (+0000) Subject: rs6000.c (SMALL_DATA_REG): Register to use for small data relocs. X-Git-Tag: releases/egcs-1.0.0~46 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cfc51775f3e7867f908c349ed3626e6586930fe1;p=thirdparty%2Fgcc.git rs6000.c (SMALL_DATA_REG): Register to use for small data relocs. * 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. From-SVN: r16771 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index dae49b30f2fe..f9d6aaf21382 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,16 @@ Wed Nov 26 13:04:46 1997 Michael Meissner + * 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. + * rs6000.c (output_function_profiler): Put label address in r0, and store LR in 4(sp) for System V/eabi. diff --git a/gcc/config/rs6000/linux.h b/gcc/config/rs6000/linux.h index 787afa816d42..0632dce36557 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 cbd682a9d7c8..a880c75ebd73 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) diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index 4446e8570dc9..47e0feb8e98b 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -7520,7 +7520,7 @@ else if (INTVAL (operands[2]) & CALL_V4_CLEAR_FP_ARGS) output_asm_insn (\"creqv 6,6,6\", operands); - return \"bl %z0\"; + return (DEFAULT_ABI == ABI_V4 && flag_pic) ? \"bl %z0@local\" : \"bl %z0\"; }" [(set_attr "type" "branch") (set_attr "length" "4,8")]) @@ -7575,7 +7575,7 @@ else if (INTVAL (operands[2]) & CALL_V4_CLEAR_FP_ARGS) output_asm_insn (\"creqv 6,6,6\", operands); - return flag_pic ? \"bl %z0@plt\" : \"bl %z0\"; + return (DEFAULT_ABI == ABI_V4 && flag_pic) ? \"bl %z0@plt\" : \"bl %z0\"; }" [(set_attr "type" "branch") (set_attr "length" "4,8")]) @@ -7595,7 +7595,7 @@ else if (INTVAL (operands[3]) & CALL_V4_CLEAR_FP_ARGS) output_asm_insn (\"creqv 6,6,6\", operands); - return \"bl %z1\"; + return (DEFAULT_ABI == ABI_V4 && flag_pic) ? \"bl %z1@local\" : \"bl %z1\"; }" [(set_attr "type" "branch") (set_attr "length" "4,8")]) @@ -7645,7 +7645,7 @@ else if (INTVAL (operands[3]) & CALL_V4_CLEAR_FP_ARGS) output_asm_insn (\"creqv 6,6,6\", operands); - return flag_pic ? \"bl %z1@plt\" : \"bl %z1\"; + return (DEFAULT_ABI == ABI_V4 && flag_pic) ? \"bl %z1@plt\" : \"bl %z1\"; }" [(set_attr "type" "branch") (set_attr "length" "4,8")])