* config/tc-hppa.c (pa_import): Correctly handle importing of an

already defined symbol.
This commit is contained in:
Jeff Law 1994-03-17 21:37:42 +00:00
parent 06459c063e
commit 49ccc55510
2 changed files with 36 additions and 17 deletions

View 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

View 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 ();