* xcofflink.c (xcoff_link_input_bfd): Check for TOC overflow.
authorIan Lance Taylor <ian@airs.com>
Wed, 17 Apr 1996 21:09:34 +0000 (21:09 +0000)
committerIan Lance Taylor <ian@airs.com>
Wed, 17 Apr 1996 21:09:34 +0000 (21:09 +0000)
bfd/ChangeLog
bfd/xcofflink.c

index accd556..4fcf3f0 100644 (file)
@@ -12,6 +12,8 @@ Wed Apr 17 12:08:24 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
 
 Wed Apr 17 13:07:37 1996  Ian Lance Taylor  <ian@cygnus.com>
 
+       * xcofflink.c (xcoff_link_input_bfd): Check for TOC overflow.
+
        * linker.c (_bfd_generic_link_add_one_symbol): When calling the
        callback routines, pass h->root.string rather than name, in case
        copy is true and name is transient.
index 681e1e2..ed4c2b8 100644 (file)
@@ -3989,11 +3989,20 @@ xcoff_link_input_bfd (finfo, input_bfd)
                  of the TOC using a 16 bit offset from tocval.  This
                  test assumes that the TOC comes at the end of the
                  output section, as it does in the default linker
-                 script.  If the TOC anchor is too far into the .toc
-                 section, the relocation routine will report
-                 overflows.  */
+                 script.  */
+
              tocend = ((*csectpp)->output_section->vma
                        + (*csectpp)->output_section->_raw_size);
+
+             if (tocval + 0x10000 < tocend)
+               {
+                 (*_bfd_error_handler)
+                   ("TOC overflow: 0x%lx > 0x10000; try -mminimal-toc when compiling",
+                    (unsigned long) (tocend - tocval));
+                 bfd_set_error (bfd_error_file_too_big);
+                 return false;
+               }
+
              if (tocval + 0x8000 < tocend)
                {
                  bfd_vma tocadd;