(coff_write_relocs) [SWAP_OUT_RELOC_OFFSET]: Copy addend to r_offset field.
authorKen Raeburn <raeburn@cygnus>
Tue, 21 Dec 1993 17:41:45 +0000 (17:41 +0000)
committerKen Raeburn <raeburn@cygnus>
Tue, 21 Dec 1993 17:41:45 +0000 (17:41 +0000)
bfd/coffcode.h

index 496e1120b2724213884f32ca1640c37eb1f3ad1d..264c3fd6d62cc16a4db66fe9b9c87d01d5ae8107 100644 (file)
@@ -1032,10 +1032,10 @@ DEFUN(coff_write_relocs,(abfd),
 {
   asection       *s;
   for (s = abfd->sections; s != (asection *) NULL; s = s->next) {
-    unsigned int    i;
+    unsigned int i;
     struct external_reloc dst;
 
-    arelent       **p = s->orelocation;
+    arelent **p = s->orelocation;
     bfd_seek(abfd, s->rel_filepos, SEEK_SET);
     for (i = 0; i < s->reloc_count; i++) {
       struct internal_reloc    n;
@@ -1043,34 +1043,34 @@ DEFUN(coff_write_relocs,(abfd),
       memset((PTR)&n, 0, sizeof(n));
 
       n.r_vaddr = q->address + s->vma;
-      /* The 29k const/consth reloc pair is a real kludge - the consth
-        part doesn't have a symbol - it has an offset. So rebuilt
-        that here */
+
 #ifdef R_IHCONST                       
+      /* The 29k const/consth reloc pair is a real kludge.  The consth
+        part doesn't have a symbol; it has an offset.  So rebuilt
+        that here.  */
       if (q->howto->type == R_IHCONST)
        n.r_symndx = q->addend;
       else
 #endif
+       if (q->sym_ptr_ptr) 
+         {
+           if (q->sym_ptr_ptr == bfd_abs_section.symbol_ptr_ptr) 
+             /* This is a relocation relative to the absolute symbol.  */
+             n.r_symndx = -1;
+           else
+             {
+               n.r_symndx = get_index((*(q->sym_ptr_ptr)));
+               /* Take notice if the symbol reloc points to a symbol
+                  we don't have in our symbol table.  What should we
+                  do for this??  */
+               if (n.r_symndx > obj_conv_table_size (abfd))
+                 abort ();
+             }
+         }
 
-
-      if (q->sym_ptr_ptr) 
-      {
-       if (q->sym_ptr_ptr == bfd_abs_section.symbol_ptr_ptr) 
-       {
-         /* This is a relocation relative to the absolute symbol */
-         n.r_symndx = -1;
-       }
-       else 
-       {
-         n.r_symndx = get_index((*(q->sym_ptr_ptr)));
-         /* Take notice if the symbol reloc points to a symbol we don't have
-            in our symbol table.  What should we do for this??  */
-         if (n.r_symndx > obj_conv_table_size (abfd))
-          abort ();
-       }
-
-
-      }
+#ifdef SWAP_OUT_RELOC_OFFSET
+      n.r_offset = q->addend;
+#endif
 
 #ifdef SELECT_RELOC
       /* Work out reloc type from what is required */
@@ -1950,9 +1950,7 @@ DEFUN(coff_slurp_symbol_table,(abfd),
       dst->symbol.the_bfd = abfd;
 
       dst->symbol.name = (char *)(src->u.syment._n._n_n._n_offset);
-      /*
-       We use the native name field to point to the cached field
-       */
+      /* We use the native name field to point to the cached field.  */
       src->u.syment._n._n_n._n_zeroes = (long) dst;
       dst->symbol.section = coff_section_from_bfd_index(abfd,
                                                        src->u.syment.n_scnum);
@@ -2089,8 +2087,9 @@ DEFUN(coff_slurp_symbol_table,(abfd),
       case C_HIDDEN:           /* ext symbol in dmert public lib */
       default:
 
-       fprintf(stderr,"Unrecognized storage class %d\n",
-                               src->u.syment.n_sclass);
+       fprintf(stderr,"Unrecognized storage class %d (assuming debugging)\n  for %s symbol `%s'\n",
+               src->u.syment.n_sclass, dst->symbol.section->name,
+               dst->symbol.name);
 /*     abort();*/
        dst->symbol.flags = BSF_DEBUGGING;
        dst->symbol.value = (src->u.syment.n_value);
@@ -2242,13 +2241,12 @@ DEFUN(coff_slurp_reloc_table,(abfd, asect, symbols),
          ptr = 0;
        }
 
-      /*
-       The symbols definitions that we have read in have been
-       relocated as if their sections started at 0. But the offsets
-       refering to the symbols in the raw data have not been
-       modified, so we have to have a negative addend to compensate.
-       
-       Note that symbols which used to be common must be left alone */
+      /* The symbols definitions that we have read in have been
+        relocated as if their sections started at 0. But the offsets
+        refering to the symbols in the raw data have not been
+        modified, so we have to have a negative addend to compensate.
+
+        Note that symbols which used to be common must be left alone */
 
       /* Calculate any reloc addend by looking at the symbol */
       CALC_ADDEND(abfd, ptr, dst, cache_ptr);
@@ -2267,7 +2265,7 @@ DEFUN(coff_slurp_reloc_table,(abfd, asect, symbols),
 }
 
 
-/* This is stupid.  This function should be a boolean predicate */
+/* This is stupid.  This function should be a boolean predicate */
 static unsigned int
 DEFUN(coff_canonicalize_reloc, (abfd, section, relptr, symbols),
 bfd            *abfd AND