]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/26109 (ICE: Segmentation fault (program cc1) compiling _muldi3.o in...
authorJohn David Anglin <danglin@gcc.gnu.org>
Tue, 7 Feb 2006 22:15:30 +0000 (22:15 +0000)
committerJohn David Anglin <danglin@gcc.gnu.org>
Tue, 7 Feb 2006 22:15:30 +0000 (22:15 +0000)
PR target/26109
* pa.c (attr_length_indirect_call): Don't return length 8 for distances
>= 240000 when generating code for SOM runtime.
(output_indirect_call): Don't use "b,l" instruction for indirect calls
to $$dyncall when generating code for SOM runtime..

From-SVN: r110724

gcc/ChangeLog
gcc/config/pa/pa.c

index 16bd9cf906c5e9ad84bd0e802f144dc820f5f41c..f7bffe4faf6701862d550f1ff0c7a3242fdca537 100644 (file)
@@ -1,3 +1,9 @@
+       PR target/26109
+       * pa.c (attr_length_indirect_call): Don't return length 8 for distances
+       >= 240000 when generating code for SOM runtime.
+       (output_indirect_call): Don't use "b,l" instruction for indirect calls
+       to $$dyncall when generating code for SOM runtime..
+
 2006-02-02  Nick Clifton  <nickc@redhat.com>
 
        PR 24376
index 02d97fd14c3bf00c3edf730a61d59c37176cbe99..db1f601717e365e6430c0af9641ed8e963f74dc4 100644 (file)
@@ -7533,7 +7533,8 @@ attr_length_indirect_call (rtx insn)
 
   if (TARGET_FAST_INDIRECT_CALLS
       || (!TARGET_PORTABLE_RUNTIME
-         && ((TARGET_PA_20 && distance < 7600000) || distance < 240000)))
+         && ((TARGET_PA_20 && !TARGET_SOM && distance < 7600000)
+             || distance < 240000)))
     return 8;
 
   if (flag_pic)
@@ -7570,10 +7571,10 @@ output_indirect_call (rtx insn, rtx call_dest)
      the remaining cases.  */
   if (attr_length_indirect_call (insn) == 8)
     {
-      /* The HP linker substitutes a BLE for millicode calls using
-        the short PIC PCREL form.  Thus, we must use %r31 as the
-        link register when generating PA 1.x code.  */
-      if (TARGET_PA_20)
+      /* The HP linker sometimes substitutes a BLE for BL/B,L calls to
+        $$dyncall.  Since BLE uses %r31 as the link register, the 22-bit
+        variant of the B,L instruction can't be used on the SOM target.  */
+      if (TARGET_PA_20 && !TARGET_SOM)
        return ".CALL\tARGW0=GR\n\tb,l $$dyncall,%%r2\n\tcopy %%r2,%%r31";
       else
        return ".CALL\tARGW0=GR\n\tbl $$dyncall,%%r31\n\tcopy %%r31,%%r2";