diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a2acff67f2b28b5047c9fea22db442ccc7c5c92a..f400c9547cbb735a45698ee30fd5fb9c5c7d7816 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2000-04-17  Jakub Jelinek  <jakub@redhat.com>
+
+	* config/sparc/sparc.c (eligible_for_sibcall_delay): Cannot use
+	leaf sibcall delay slot if flag_pic.
+	(output_sibcall): Always emit call for leaf sibcall if flag_pic.
+
 2000-04-17  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
 	* Makefile.in (stmp-fixproto): Acknowledge errors in fixproto.
@@ -44,7 +50,8 @@ Mon Apr 17 14:59:36 MET DST 2000  Jan Hubicka  <jh@suse.cz>
 	(ASM_OUTPUT_CASE_END): New, put assembler back into code CSECT.
 	(ASM_OUTPUT_ADDR_VEC_ELT, ASM_OUTPUT_ADDR_DIFF_ELT): Remove page check,
 	since vector in in the data CSECT.
-	(ASM_OUTPUT_REG_POP, ASM_OUTPUT_REG_PUSH): Restore to correct operation.        * i370.md (Many patterns): Put the length in the XL directives.
+	(ASM_OUTPUT_REG_POP, ASM_OUTPUT_REG_PUSH): Restore to correct operation.
+        * i370.md (Many patterns): Put the length in the XL directives.
 	(movdi): Put back STM and MVC in definition.
 	(floatsidf2): Correct TARGET_ELF_ABI pattern and add back the LE370
 	pattern using the TCA.
diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c
index 557079695ec7d27f517660d43e1e017d3259c80b..a2b75121d3ad7f42c7417ebbfb7bde2dc3a27b95 100644
--- a/gcc/config/sparc/sparc.c
+++ b/gcc/config/sparc/sparc.c
@@ -2504,7 +2504,7 @@ eligible_for_sibcall_delay (trial)
     {
       /* If the tail call is done using the call instruction,
 	 we have to restore %o7 in the delay slot.  */
-      if (TARGET_ARCH64 && ! TARGET_CM_MEDLOW)
+      if ((TARGET_ARCH64 && ! TARGET_CM_MEDLOW) || flag_pic)
 	return 0;
 
       /* %g1 is used to build the function address */
@@ -3735,7 +3735,7 @@ output_sibcall (insn, call_operand)
 
   if (leaf_regs)
     {
-      int spare_slot = (TARGET_ARCH32 || TARGET_CM_MEDLOW);
+      int spare_slot = ((TARGET_ARCH32 || TARGET_CM_MEDLOW) && ! flag_pic);
       int size = 0;
 
       if ((actual_fsize || ! spare_slot) && delay_slot)