Update all uses of md_apply_fix to use md_apply_fix3. Make it a void function.
[deliverable/binutils-gdb.git] / gas / config / obj-coff.c
index 8de8c62ca92aec9df2c1f11e9fd58bc24093f165..4421e4ff080b585d0ec06e3ef4a086ef23641bf1 100644 (file)
 #define TC_COFF_SECTION_DEFAULT_ATTRIBUTES (SEC_LOAD | SEC_DATA)
 #endif
 
+/* This is used to hold the symbol built by a sequence of pseudo-ops
+   from .def and .endef.  */
+static symbolS *def_symbol_in_progress;
+
+typedef struct
+  {
+    unsigned long chunk_size;
+    unsigned long element_size;
+    unsigned long size;
+    char *data;
+    unsigned long pointer;
+  }
+stack;
+
+static stack *stack_init PARAMS ((unsigned long, unsigned long));
+static char *stack_push PARAMS ((stack *, char *));
+static char *stack_pop PARAMS ((stack *));
+static void tag_init PARAMS ((void));
+static void tag_insert PARAMS ((const char *, symbolS *));
+static symbolS *tag_find PARAMS ((char *));
+static symbolS *tag_find_or_make PARAMS ((char *));
 static void obj_coff_bss PARAMS ((int));
+static void obj_coff_weak PARAMS ((int));
 const char *s_get_name PARAMS ((symbolS * s));
 static void obj_coff_ln PARAMS ((int));
 static void obj_coff_def PARAMS ((int));
@@ -54,21 +76,8 @@ static void obj_coff_ident PARAMS ((int));
 #ifdef BFD_ASSEMBLER
 static void obj_coff_loc PARAMS((int));
 #endif
-
-/* This is used to hold the symbol built by a sequence of pseudo-ops
-   from .def and .endef.  */
-static symbolS *def_symbol_in_progress;
 \f
 /* stack stuff */
-typedef struct
-  {
-    unsigned long chunk_size;
-    unsigned long element_size;
-    unsigned long size;
-    char *data;
-    unsigned long pointer;
-  }
-stack;
 
 static stack *
 stack_init (chunk_size, element_size)
@@ -246,7 +255,11 @@ obj_coff_weak (ignore)
 
 #ifdef BFD_ASSEMBLER
 
+static segT fetch_coff_debug_section PARAMS ((void));
 static void SA_SET_SYM_TAGNDX PARAMS ((symbolS *, symbolS *));
+static int S_GET_DATA_TYPE PARAMS ((symbolS *));
+void c_symbol_merge PARAMS ((symbolS *, symbolS *));
+static void add_lineno PARAMS ((fragS *, addressT, int));
 
 #define GET_FILENAME_STRING(X) \
 ((char*) (&((X)->sy_symbol.ost_auxent->x_file.x_n.x_offset))[1])
@@ -493,13 +506,13 @@ obj_coff_ln (appline)
     }
 
   l = get_absolute_expression ();
-  if (!appline)
-    {
-      add_lineno (frag_now, frag_now_fix (), l);
-    }
 
-  if (appline)
+  /* If there is no lineno symbol, treat a .ln
+     directive as if it were a .appline directive.  */
+  if (appline || current_lineno_sym == NULL)
     new_logical_line ((char *) NULL, l - 1);
+  else
+    add_lineno (frag_now, frag_now_fix (), l);
 
 #ifndef NO_LISTING
   {
@@ -1174,18 +1187,21 @@ coff_frob_symbol (symp, punt)
 
   if (!SF_GET_DEBUG (symp))
     {
-      symbolS *real;
+      symbolS * real;
+
       if (!SF_GET_LOCAL (symp)
          && !SF_GET_STATICS (symp)
          && S_GET_STORAGE_CLASS (symp) != C_LABEL
          && symbol_constant_p(symp)
          && (real = symbol_find_base (S_GET_NAME (symp), DO_NOT_STRIP))
+         && S_GET_STORAGE_CLASS (real) == C_NULL
          && real != symp)
        {
          c_symbol_merge (symp, real);
          *punt = 1;
          return;
        }
+
       if (!S_IS_DEFINED (symp) && !SF_GET_LOCAL (symp))
        {
          assert (S_GET_VALUE (symp) == 0);
@@ -1199,6 +1215,7 @@ coff_frob_symbol (symp, punt)
          else
            S_SET_STORAGE_CLASS (symp, C_STAT);
        }
+
       if (SF_GET_PROCESS (symp))
        {
          if (S_GET_STORAGE_CLASS (symp) == C_BLOCK)
@@ -1208,6 +1225,7 @@ coff_frob_symbol (symp, punt)
              else
                {
                  symbolS *begin;
+
                  begin = *(symbolS **) stack_pop (block_stack);
                  if (begin == 0)
                    as_warn (_("mismatched .eb"));
@@ -1215,9 +1233,11 @@ coff_frob_symbol (symp, punt)
                    next_set_end = begin;
                }
            }
+
          if (coff_last_function == 0 && SF_GET_FUNCTION (symp))
            {
              union internal_auxent *auxp;
+
              coff_last_function = symp;
              if (S_GET_NUMBER_AUXILIARY (symp) < 1)
                S_SET_NUMBER_AUXILIARY (symp, 1);
@@ -1225,6 +1245,7 @@ coff_frob_symbol (symp, punt)
              memset (auxp->x_sym.x_fcnary.x_ary.x_dimen, 0,
                      sizeof (auxp->x_sym.x_fcnary.x_ary.x_dimen));
            }
+
          if (S_GET_STORAGE_CLASS (symp) == C_EFCN)
            {
              if (coff_last_function == 0)
@@ -1236,6 +1257,7 @@ coff_frob_symbol (symp, punt)
              coff_last_function = 0;
            }
        }
+
       if (S_IS_EXTERNAL (symp))
        S_SET_STORAGE_CLASS (symp, C_EXT);
       else if (SF_GET_LOCAL (symp))
@@ -1287,6 +1309,7 @@ coff_frob_symbol (symp, punt)
       set_end = next_set_end;
     }
 
+#ifndef OBJ_XCOFF
   if (! *punt
       && S_GET_STORAGE_CLASS (symp) == C_FCN
       && strcmp (S_GET_NAME (symp), ".bf") == 0)
@@ -1295,7 +1318,7 @@ coff_frob_symbol (symp, punt)
        SA_SET_SYM_ENDNDX (coff_last_bf, symp);
       coff_last_bf = symp;
     }
-
+#endif
   if (coffsymbol (symbol_get_bfdsym (symp))->lineno)
     {
       int i;
@@ -2037,8 +2060,8 @@ do_relocs_for (abfd, h, file_cursor)
 #endif
 
              /* Write out the reloc table */
-             bfd_write ((PTR) external_reloc_vec, 1, external_reloc_size,
-                        abfd);
+             bfd_bwrite ((PTR) external_reloc_vec,
+                         (bfd_size_type) external_reloc_size, abfd);
              free (external_reloc_vec);
 
              /* Fill in section header info.  */
@@ -2180,7 +2203,7 @@ fill_section (abfd, h, file_cursor)
            {
              if (s->s_scnptr != 0)
                {
-                 bfd_write (buffer, s->s_size, 1, abfd);
+                 bfd_bwrite (buffer, s->s_size, abfd);
                  *file_cursor += s->s_size;
                }
              free (buffer);
@@ -2204,7 +2227,7 @@ coff_header_append (abfd, h)
   unsigned long string_size = 4;
 #endif
 
-  bfd_seek (abfd, 0, 0);
+  bfd_seek (abfd, (file_ptr) 0, 0);
 
 #ifndef OBJ_COFF_OMIT_OPTIONAL_HEADER
   H_SET_MAGIC_NUMBER (h, COFF_MAGIC);
@@ -2220,8 +2243,8 @@ coff_header_append (abfd, h)
 
   i = bfd_coff_swap_filehdr_out (abfd, &h->filehdr, buffer);
 
-  bfd_write (buffer, i, 1, abfd);
-  bfd_write (buffero, H_GET_SIZEOF_OPTIONAL_HEADER (h), 1, abfd);
+  bfd_bwrite (buffer, (bfd_size_type) i, abfd);
+  bfd_bwrite (buffero, (bfd_size_type) H_GET_SIZEOF_OPTIONAL_HEADER (h), abfd);
 
   for (i = SEG_E0; i < SEG_LAST; i++)
     {
@@ -2246,7 +2269,7 @@ coff_header_append (abfd, h)
                                           buffer);
          if (size == 0)
            as_bad (_("bfd_coff_swap_scnhdr_out failed"));
-         bfd_write (buffer, size, 1, abfd);
+         bfd_bwrite (buffer, (bfd_size_type) size, abfd);
        }
     }
 }
@@ -3373,7 +3396,7 @@ do_linenos_for (abfd, h, file_cursor)
 
          s->scnhdr.s_lnnoptr = *file_cursor;
 
-         bfd_write (buffer, 1, s->scnhdr.s_nlnno * LINESZ, abfd);
+         bfd_bwrite (buffer, (bfd_size_type) s->scnhdr.s_nlnno * LINESZ, abfd);
          free (buffer);
 
          *file_cursor += s->scnhdr.s_nlnno * LINESZ;
@@ -3596,7 +3619,8 @@ write_object_file ()
     w_symbols (abfd, buffer1, symbol_rootP);
     if (string_byte_count > 0)
       w_strings (buffer1 + symtable_size);
-    bfd_write (buffer1, 1, symtable_size + string_byte_count, abfd);
+    bfd_bwrite (buffer1, (bfd_size_type) symtable_size + string_byte_count,
+               abfd);
     free (buffer1);
   }
 
@@ -4472,11 +4496,7 @@ fixup_segment (segP, this_segment_type)
 #endif
        }                       /* if pcrel */
 
-#ifdef MD_APPLY_FIX3
-      md_apply_fix3 (fixP, (valueT *) &add_number, this_segment_type);
-#else
-      md_apply_fix (fixP, add_number);
-#endif
+      md_apply_fix3 (fixP, (valueT *) & add_number, this_segment_type);
 
       if (!fixP->fx_bit_fixP && ! fixP->fx_no_overflow)
        {
This page took 0.026657 seconds and 4 git commands to generate.