* tc-h8300.c (tc_gen_reloc): Give an error if we try to take the
authorJeff Law <law@redhat.com>
Wed, 5 Sep 2001 02:01:08 +0000 (02:01 +0000)
committerJeff Law <law@redhat.com>
Wed, 5 Sep 2001 02:01:08 +0000 (02:01 +0000)
address of two symbols in different sections.

gas/ChangeLog
gas/config/tc-h8300.c

index d038b8c56186ea0138684973dbbe12495890db8d..0e61a6b0742c240e1a7098ca1ef793182c3bae89 100644 (file)
@@ -1,3 +1,8 @@
+Tue Sep  4 20:01:19 2001  Jeffrey A Law  (law@cygnus.com)
+
+       * tc-h8300.c (tc_gen_reloc): Give an error if we try to take the
+       address of two symbols in different sections.
+
 2001-08-31  Eric Christopher  <echristo@redhat.com>
            Jason Eckhardt  <jle@redhat.com>
 
index f4f50630545daca17cfe6390f5efc48f2bf4b83e..05c49dced97dbf6d0571dc5f8e647c01ef75dbd9 100644 (file)
@@ -1147,9 +1147,8 @@ build_bytes (this_try, operand)
             want the relocation's offset to point to the first byte
             that will be modified, not to the start of the instruction.  */
          where += 1;
-
-            
 #endif
+
          /* This jmp may be a jump or a branch.  */
 
          check_operand (operand + i, Hmode ? 0xffffff : 0xffff, "@");
@@ -1624,6 +1623,17 @@ tc_gen_reloc (section, fixp)
   arelent *rel;
   bfd_reloc_code_real_type r_type;
 
+  if (fixp->fx_addsy && fixp->fx_subsy)
+    {
+      if ((S_GET_SEGMENT (fixp->fx_addsy) != S_GET_SEGMENT (fixp->fx_subsy))
+         || S_GET_SEGMENT (fixp->fx_addsy) == undefined_section)
+       {
+         as_bad_where (fixp->fx_file, fixp->fx_line,
+                       "Difference of symbols in different sections is not supported");
+         return NULL;
+       }
+    }
+
   rel = (arelent *) xmalloc (sizeof (arelent));
   rel->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
   *rel->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);