* Add support for marker type relocations. These mark areas
authorJeff Law <law@redhat.com>
Tue, 2 Nov 1993 06:31:36 +0000 (06:31 +0000)
committerJeff Law <law@redhat.com>
Tue, 2 Nov 1993 06:31:36 +0000 (06:31 +0000)
of interest to the linker.  ENTRY/EXIT relocations for SOM are
an example of marker relocations.
* write.c (write_relocs): Instead of assuming size of a relocation
is 4 bytes, pick up the size from relocation itself.
(fixup_segment): Do not complain that a value is too small for
marker relocations.

gas/ChangeLog
gas/write.c

index a5c3468bd717a22776600c11a1bce7f3aa7e99a0..cbc66672808890a0378dcef5c4b7592974ce7f24 100644 (file)
@@ -1,5 +1,13 @@
 Mon Nov  1 21:37:04 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)
 
+       * Add support for marker type relocations.  These mark areas
+       of interest to the linker.  ENTRY/EXIT relocations for SOM are
+       an example of marker relocations.
+       * write.c (write_relocs): Instead of assuming size of a relocation
+       is 4 bytes, pick up the size from relocation itself.
+       (fixup_segment): Do not complain that a value is too small for 
+       marker relocations.
+
        * struc-symbol.h: Add new "sy_used" field to the symbol structure.
        * expr.c (operand): Set sy_used for any symbol used as an operand.
        (expr): Likewise for any symbol used in an expression.
index 0b074d59b24c05de7ffbddc9f8f160dbe8402626..e2e1c3dffed68163895a5f8811640fc76ad404dd 100644 (file)
@@ -632,8 +632,7 @@ write_relocs (abfd, sec, xxx)
          continue;
        }
       data = fixp->fx_frag->fr_literal + fixp->fx_where;
-      /* @@ Assumes max size of reloc is 4. */
-      if (fixp->fx_where + 4
+      if (fixp->fx_where + fixp->fx_size
          > fixp->fx_frag->fr_fix + fixp->fx_frag->fr_offset)
        abort ();
       /* Pass bogus address so that when bfd_perform_relocation adds
@@ -686,7 +685,7 @@ write_relocs (abfd, sec, xxx)
           assert(i <= n);
        }
       data = fixp->fx_frag->fr_literal + fixp->fx_where;
-      if (fixp->fx_where + 4
+      if (fixp->fx_where + fixp->fx_size
          > fixp->fx_frag->fr_fix + fixp->fx_frag->fr_offset)
        abort ();
       for (j = 0; reloc[j]; j++)
@@ -2011,7 +2010,7 @@ fixup_segment (fixP, this_segment_type)
              }                 /* if there's an add_symbol */
          }                     /* if pcrel */
 
-       if (!fixP->fx_bit_fixP)
+       if (!fixP->fx_bit_fixP && size > 0)
          {
            valueT mask = 0;
            /* set all bits to one */