* config/tc-hppa.c (pa_import): Correctly handle importing of an
authorJeff Law <law@redhat.com>
Thu, 17 Mar 1994 21:37:42 +0000 (21:37 +0000)
committerJeff Law <law@redhat.com>
Thu, 17 Mar 1994 21:37:42 +0000 (21:37 +0000)
        already defined symbol.

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

index c87f1891a8db18eb61090177ccf8b005eb95713d..91c59370a12649c5c12f3df121d9d37103103c46 100644 (file)
@@ -1,3 +1,8 @@
+Thu Mar 17 13:36:09 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)
+
+       * config/tc-hppa.c (pa_import): Correctly handle importing of an
+       already defined symbol.
+
 Wed Mar 16 17:11:37 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
 
        * config/tc-mips.c (mips_ip): Only accept overly large values for
index f87710f435f8da1c29b7c2a2e636ae33f4b8e11b..ef1dd71cd3e4532d350d5d03e846522d7dcd6bb9 100644 (file)
@@ -4758,27 +4758,41 @@ pa_import (unused)
   name = input_line_pointer;
   c = get_symbol_end ();
 
-  symbol = symbol_find_or_make (name);
-  p = input_line_pointer;
-  *p = c;
-
-  if (!is_end_of_statement ())
+  symbol = symbol_find (name);
+  /* Ugh.  We might be importing a symbol defined earlier in the file,
+     in which case all the code below will really screw things up
+     (set the wrong segment, symbol flags & type, etc).  */
+  if (symbol == NULL || !S_IS_DEFINED (symbol))
     {
-      input_line_pointer++;
-      pa_type_args (symbol, 0);
+      symbol = symbol_find_or_make (name);
+      p = input_line_pointer;
+      *p = c;
+
+      if (!is_end_of_statement ())
+       {
+         input_line_pointer++;
+         pa_type_args (symbol, 0);
+       }
+      else
+       {
+         /* Sigh.  To be compatable with the HP assembler and to help
+            poorly written assembly code, we assign a type based on 
+            the the current segment.  Note only BSF_FUNCTION really
+            matters, we do not need to set the full SYMBOL_TYPE_* info.  */
+         if (now_seg == text_section)
+           symbol->bsym->flags |= BSF_FUNCTION;
+
+         /* If the section is undefined, then the symbol is undefined
+            Since this is an import, leave the section undefined.  */
+         S_SET_SEGMENT (symbol, &bfd_und_section);
+       }
     }
   else
     {
-      /* Sigh.  To be compatable with the HP assembler and to help
-         poorly written assembly code, we assign a type based on 
-         the the current segment.  Note only BSF_FUNCTION really
-         matters, we do not need to set the full SYMBOL_TYPE_* info here.  */
-      if (now_seg == text_section)
-       symbol->bsym->flags |= BSF_FUNCTION;
-
-      /* If the section is undefined, then the symbol is undefined
-         Since this is an import, leave the section undefined.  */
-      S_SET_SEGMENT (symbol, &bfd_und_section);
+      /* The symbol was already defined.  Just eat everything up to
+        the end of the current statement.  */
+      while (!is_end_of_statement ())
+       input_line_pointer++;
     }
 
   demand_empty_rest_of_line ();