Fix for G++ not knowing whether a vtable will be private or public when the TOC refer...
authorMichael Meissner <meissner@gcc.gnu.org>
Thu, 8 Aug 1996 22:26:12 +0000 (22:26 +0000)
committerMichael Meissner <meissner@gcc.gnu.org>
Thu, 8 Aug 1996 22:26:12 +0000 (22:26 +0000)
From-SVN: r12605

gcc/config/rs6000/rs6000.c

index 00ec109..33a544c 100644 (file)
@@ -4128,7 +4128,23 @@ output_toc (file, x, labelno)
 
       fputs ("[TC],", file);
     }
-  output_addr_const (file, x);
+
+  /* Currently C++ toc references to vtables can be emitted before it
+     is decided whether the vtable is public or private.  If this is
+     the case, then the linker will eventually complain that there is
+     a TOC reference to an unknown section.  Thus, for vtables only,
+     we emit the TOC reference to reference the symbol and not the
+     section.  */
+  if (!strncmp ("_vt.", real_name, 4))
+    {
+      RS6000_OUTPUT_BASENAME (file, real_name);
+      if (offset < 0)
+       fprintf (file, "%d", offset);
+      else if (offset > 0)
+       fprintf (file, "+%d", offset);
+    }
+  else
+    output_addr_const (file, x);
   putc ('\n', file);
 }
 \f