2000-08-10 Kazu Hirata <kazu@hxi.com>
* symbols.c: Fix formatting.
This commit is contained in:
parent
f1d7622b95
commit
7c743825ea
2 changed files with 190 additions and 219 deletions
|
@ -1,3 +1,7 @@
|
||||||
|
2000-08-10 Kazu Hirata <kazu@hxi.com>
|
||||||
|
|
||||||
|
* symbols.c: Fix formatting.
|
||||||
|
|
||||||
2000-08-09 Alan Modra <alan@linuxcare.com.au>
|
2000-08-09 Alan Modra <alan@linuxcare.com.au>
|
||||||
|
|
||||||
From Rodney Brown <RodneyBrown@mynd.com>
|
From Rodney Brown <RodneyBrown@mynd.com>
|
||||||
|
|
405
gas/symbols.c
405
gas/symbols.c
|
@ -19,7 +19,7 @@
|
||||||
Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
||||||
02111-1307, USA. */
|
02111-1307, USA. */
|
||||||
|
|
||||||
/* #define DEBUG_SYMS / * to debug symbol list maintenance */
|
/* #define DEBUG_SYMS / * to debug symbol list maintenance. */
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ static struct hash_control *sy_hash;
|
||||||
/* Table of local symbols. */
|
/* Table of local symbols. */
|
||||||
static struct hash_control *local_hash;
|
static struct hash_control *local_hash;
|
||||||
|
|
||||||
/* Below are commented in "symbols.h". */
|
/* Below are commented in "symbols.h". */
|
||||||
symbolS *symbol_rootP;
|
symbolS *symbol_rootP;
|
||||||
symbolS *symbol_lastP;
|
symbolS *symbol_lastP;
|
||||||
symbolS abs_symbol;
|
symbolS abs_symbol;
|
||||||
|
@ -63,12 +63,10 @@ static long fb_label_instance PARAMS ((long));
|
||||||
|
|
||||||
static void print_binary PARAMS ((FILE *, const char *, expressionS *));
|
static void print_binary PARAMS ((FILE *, const char *, expressionS *));
|
||||||
|
|
||||||
/* symbol_new()
|
/* Return a pointer to a new symbol. Die if we can't make a new
|
||||||
|
|
||||||
Return a pointer to a new symbol. Die if we can't make a new
|
|
||||||
symbol. Fill in the symbol's values. Add symbol to end of symbol
|
symbol. Fill in the symbol's values. Add symbol to end of symbol
|
||||||
chain.
|
chain.
|
||||||
|
|
||||||
This function should be called in the general case of creating a
|
This function should be called in the general case of creating a
|
||||||
symbol. However, if the output file symbol table has already been
|
symbol. However, if the output file symbol table has already been
|
||||||
set, and you are certain that this symbol won't be wanted in the
|
set, and you are certain that this symbol won't be wanted in the
|
||||||
|
@ -83,9 +81,7 @@ symbol_new (name, segment, valu, frag)
|
||||||
{
|
{
|
||||||
symbolS *symbolP = symbol_create (name, segment, valu, frag);
|
symbolS *symbolP = symbol_create (name, segment, valu, frag);
|
||||||
|
|
||||||
/*
|
/* Link to end of symbol chain. */
|
||||||
* Link to end of symbol chain.
|
|
||||||
*/
|
|
||||||
#ifdef BFD_ASSEMBLER
|
#ifdef BFD_ASSEMBLER
|
||||||
{
|
{
|
||||||
extern int symbol_table_frozen;
|
extern int symbol_table_frozen;
|
||||||
|
@ -108,7 +104,7 @@ save_symbol_name (name)
|
||||||
unsigned int name_length;
|
unsigned int name_length;
|
||||||
char *ret;
|
char *ret;
|
||||||
|
|
||||||
name_length = strlen (name) + 1; /* +1 for \0 */
|
name_length = strlen (name) + 1; /* +1 for \0. */
|
||||||
obstack_grow (¬es, name, name_length);
|
obstack_grow (¬es, name, name_length);
|
||||||
ret = obstack_finish (¬es);
|
ret = obstack_finish (¬es);
|
||||||
|
|
||||||
|
@ -135,10 +131,10 @@ save_symbol_name (name)
|
||||||
|
|
||||||
symbolS *
|
symbolS *
|
||||||
symbol_create (name, segment, valu, frag)
|
symbol_create (name, segment, valu, frag)
|
||||||
const char *name; /* It is copied, the caller can destroy/modify */
|
const char *name; /* It is copied, the caller can destroy/modify. */
|
||||||
segT segment; /* Segment identifier (SEG_<something>) */
|
segT segment; /* Segment identifier (SEG_<something>). */
|
||||||
valueT valu; /* Symbol value */
|
valueT valu; /* Symbol value. */
|
||||||
fragS *frag; /* Associated fragment */
|
fragS *frag; /* Associated fragment. */
|
||||||
{
|
{
|
||||||
char *preserved_copy_of_name;
|
char *preserved_copy_of_name;
|
||||||
symbolS *symbolP;
|
symbolS *symbolP;
|
||||||
|
@ -147,7 +143,7 @@ symbol_create (name, segment, valu, frag)
|
||||||
|
|
||||||
symbolP = (symbolS *) obstack_alloc (¬es, sizeof (symbolS));
|
symbolP = (symbolS *) obstack_alloc (¬es, sizeof (symbolS));
|
||||||
|
|
||||||
/* symbol must be born in some fixed state. This seems as good as any. */
|
/* symbol must be born in some fixed state. This seems as good as any. */
|
||||||
memset (symbolP, 0, sizeof (symbolS));
|
memset (symbolP, 0, sizeof (symbolS));
|
||||||
|
|
||||||
#ifdef BFD_ASSEMBLER
|
#ifdef BFD_ASSEMBLER
|
||||||
|
@ -272,22 +268,17 @@ local_symbol_convert (locsym)
|
||||||
|
|
||||||
#endif /* ! BFD_ASSEMBLER */
|
#endif /* ! BFD_ASSEMBLER */
|
||||||
|
|
||||||
|
/* We have just seen "<name>:".
|
||||||
|
Creates a struct symbol unless it already exists.
|
||||||
|
|
||||||
|
Gripes if we are redefining a symbol incompatibly (and ignores it). */
|
||||||
|
|
||||||
/*
|
|
||||||
* colon()
|
|
||||||
*
|
|
||||||
* We have just seen "<name>:".
|
|
||||||
* Creates a struct symbol unless it already exists.
|
|
||||||
*
|
|
||||||
* Gripes if we are redefining a symbol incompatibly (and ignores it).
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
symbolS *
|
symbolS *
|
||||||
colon (sym_name) /* just seen "x:" - rattle symbols & frags */
|
colon (sym_name) /* Just seen "x:" - rattle symbols & frags. */
|
||||||
const char *sym_name; /* symbol name, as a cannonical string */
|
const char *sym_name; /* Symbol name, as a cannonical string. */
|
||||||
/* We copy this string: OK to alter later. */
|
/* We copy this string: OK to alter later. */
|
||||||
{
|
{
|
||||||
register symbolS *symbolP; /* symbol we are working with */
|
register symbolS *symbolP; /* Symbol we are working with. */
|
||||||
|
|
||||||
/* Sun local labels go out of scope whenever a non-local symbol is
|
/* Sun local labels go out of scope whenever a non-local symbol is
|
||||||
defined. */
|
defined. */
|
||||||
|
@ -327,9 +318,9 @@ colon (sym_name) /* just seen "x:" - rattle symbols & frags */
|
||||||
(offsetT) 0,
|
(offsetT) 0,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
/* We want to store the pointer to where to insert the jump table in the
|
/* We want to store the pointer to where to insert the jump
|
||||||
fr_opcode of the rs_broken_word frag. This requires a little
|
table in the fr_opcode of the rs_broken_word frag. This
|
||||||
hackery. */
|
requires a little hackery. */
|
||||||
while (frag_tmp
|
while (frag_tmp
|
||||||
&& (frag_tmp->fr_type != rs_broken_word
|
&& (frag_tmp->fr_type != rs_broken_word
|
||||||
|| frag_tmp->fr_opcode))
|
|| frag_tmp->fr_opcode))
|
||||||
|
@ -349,9 +340,7 @@ colon (sym_name) /* just seen "x:" - rattle symbols & frags */
|
||||||
if (RESOLVE_SYMBOL_REDEFINITION (symbolP))
|
if (RESOLVE_SYMBOL_REDEFINITION (symbolP))
|
||||||
return symbolP;
|
return symbolP;
|
||||||
#endif
|
#endif
|
||||||
/*
|
/* Now check for undefined symbols. */
|
||||||
* Now check for undefined symbols
|
|
||||||
*/
|
|
||||||
if (LOCAL_SYMBOL_CHECK (symbolP))
|
if (LOCAL_SYMBOL_CHECK (symbolP))
|
||||||
{
|
{
|
||||||
#ifdef BFD_ASSEMBLER
|
#ifdef BFD_ASSEMBLER
|
||||||
|
@ -377,27 +366,27 @@ colon (sym_name) /* just seen "x:" - rattle symbols & frags */
|
||||||
{
|
{
|
||||||
symbolP->sy_frag = frag_now;
|
symbolP->sy_frag = frag_now;
|
||||||
#ifdef OBJ_VMS
|
#ifdef OBJ_VMS
|
||||||
S_SET_OTHER(symbolP, const_flag);
|
S_SET_OTHER (symbolP, const_flag);
|
||||||
#endif
|
#endif
|
||||||
S_SET_VALUE (symbolP, (valueT) frag_now_fix ());
|
S_SET_VALUE (symbolP, (valueT) frag_now_fix ());
|
||||||
S_SET_SEGMENT (symbolP, now_seg);
|
S_SET_SEGMENT (symbolP, now_seg);
|
||||||
#ifdef N_UNDF
|
#ifdef N_UNDF
|
||||||
know (N_UNDF == 0);
|
know (N_UNDF == 0);
|
||||||
#endif /* if we have one, it better be zero. */
|
#endif /* if we have one, it better be zero. */
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/*
|
/* There are still several cases to check:
|
||||||
* There are still several cases to check:
|
|
||||||
* A .comm/.lcomm symbol being redefined as
|
A .comm/.lcomm symbol being redefined as initialized
|
||||||
* initialized data is OK
|
data is OK
|
||||||
* A .comm/.lcomm symbol being redefined with
|
|
||||||
* a larger size is also OK
|
A .comm/.lcomm symbol being redefined with a larger
|
||||||
*
|
size is also OK
|
||||||
* This only used to be allowed on VMS gas, but Sun cc
|
|
||||||
* on the sparc also depends on it.
|
This only used to be allowed on VMS gas, but Sun cc
|
||||||
*/
|
on the sparc also depends on it. */
|
||||||
|
|
||||||
if (((!S_IS_DEBUG (symbolP)
|
if (((!S_IS_DEBUG (symbolP)
|
||||||
&& (!S_IS_DEFINED (symbolP) || S_IS_COMMON (symbolP))
|
&& (!S_IS_DEFINED (symbolP) || S_IS_COMMON (symbolP))
|
||||||
|
@ -406,17 +395,14 @@ colon (sym_name) /* just seen "x:" - rattle symbols & frags */
|
||||||
&& (now_seg == data_section
|
&& (now_seg == data_section
|
||||||
|| now_seg == S_GET_SEGMENT (symbolP)))
|
|| now_seg == S_GET_SEGMENT (symbolP)))
|
||||||
{
|
{
|
||||||
/*
|
/* Select which of the 2 cases this is. */
|
||||||
* Select which of the 2 cases this is
|
|
||||||
*/
|
|
||||||
if (now_seg != data_section)
|
if (now_seg != data_section)
|
||||||
{
|
{
|
||||||
/*
|
/* New .comm for prev .comm symbol.
|
||||||
* New .comm for prev .comm symbol.
|
|
||||||
* If the new size is larger we just
|
If the new size is larger we just change its
|
||||||
* change its value. If the new size
|
value. If the new size is smaller, we ignore
|
||||||
* is smaller, we ignore this symbol
|
this symbol. */
|
||||||
*/
|
|
||||||
if (S_GET_VALUE (symbolP)
|
if (S_GET_VALUE (symbolP)
|
||||||
< ((unsigned) frag_now_fix ()))
|
< ((unsigned) frag_now_fix ()))
|
||||||
{
|
{
|
||||||
|
@ -429,10 +415,10 @@ colon (sym_name) /* just seen "x:" - rattle symbols & frags */
|
||||||
data. */
|
data. */
|
||||||
symbolP->sy_frag = frag_now;
|
symbolP->sy_frag = frag_now;
|
||||||
#ifdef OBJ_VMS
|
#ifdef OBJ_VMS
|
||||||
S_SET_OTHER(symbolP, const_flag);
|
S_SET_OTHER (symbolP, const_flag);
|
||||||
#endif
|
#endif
|
||||||
S_SET_VALUE (symbolP, (valueT) frag_now_fix ());
|
S_SET_VALUE (symbolP, (valueT) frag_now_fix ());
|
||||||
S_SET_SEGMENT (symbolP, now_seg); /* keep N_EXT bit */
|
S_SET_SEGMENT (symbolP, now_seg); /* Keep N_EXT bit. */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -456,16 +442,16 @@ colon (sym_name) /* just seen "x:" - rattle symbols & frags */
|
||||||
od_buf,
|
od_buf,
|
||||||
(long) S_GET_VALUE (symbolP));
|
(long) S_GET_VALUE (symbolP));
|
||||||
}
|
}
|
||||||
} /* if the undefined symbol has no value */
|
} /* if the undefined symbol has no value */
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Don't blow up if the definition is the same */
|
/* Don't blow up if the definition is the same. */
|
||||||
if (!(frag_now == symbolP->sy_frag
|
if (!(frag_now == symbolP->sy_frag
|
||||||
&& S_GET_VALUE (symbolP) == frag_now_fix ()
|
&& S_GET_VALUE (symbolP) == frag_now_fix ()
|
||||||
&& S_GET_SEGMENT (symbolP) == now_seg))
|
&& S_GET_SEGMENT (symbolP) == now_seg))
|
||||||
as_fatal (_("Symbol %s already defined."), sym_name);
|
as_fatal (_("Symbol %s already defined."), sym_name);
|
||||||
} /* if this symbol is not yet defined */
|
} /* if this symbol is not yet defined */
|
||||||
|
|
||||||
}
|
}
|
||||||
#ifdef BFD_ASSEMBLER
|
#ifdef BFD_ASSEMBLER
|
||||||
|
@ -485,7 +471,7 @@ colon (sym_name) /* just seen "x:" - rattle symbols & frags */
|
||||||
#endif /* OBJ_VMS */
|
#endif /* OBJ_VMS */
|
||||||
|
|
||||||
symbol_table_insert (symbolP);
|
symbol_table_insert (symbolP);
|
||||||
} /* if we have seen this symbol before */
|
} /* if we have seen this symbol before */
|
||||||
|
|
||||||
if (mri_common_symbol != NULL)
|
if (mri_common_symbol != NULL)
|
||||||
{
|
{
|
||||||
|
@ -511,15 +497,9 @@ colon (sym_name) /* just seen "x:" - rattle symbols & frags */
|
||||||
return symbolP;
|
return symbolP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Die if we can't insert the symbol. */
|
||||||
|
|
||||||
/*
|
void
|
||||||
* symbol_table_insert()
|
|
||||||
*
|
|
||||||
* Die if we can't insert the symbol.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
void
|
|
||||||
symbol_table_insert (symbolP)
|
symbol_table_insert (symbolP)
|
||||||
symbolS *symbolP;
|
symbolS *symbolP;
|
||||||
{
|
{
|
||||||
|
@ -542,15 +522,12 @@ symbol_table_insert (symbolP)
|
||||||
{
|
{
|
||||||
as_fatal (_("Inserting \"%s\" into symbol table failed: %s"),
|
as_fatal (_("Inserting \"%s\" into symbol table failed: %s"),
|
||||||
S_GET_NAME (symbolP), error_string);
|
S_GET_NAME (symbolP), error_string);
|
||||||
} /* on error */
|
} /* on error */
|
||||||
} /* symbol_table_insert() */
|
}
|
||||||
|
|
||||||
/*
|
/* If a symbol name does not exist, create it as undefined, and insert
|
||||||
* symbol_find_or_make()
|
it into the symbol table. Return a pointer to it. */
|
||||||
*
|
|
||||||
* If a symbol name does not exist, create it as undefined, and insert
|
|
||||||
* it into the symbol table. Return a pointer to it.
|
|
||||||
*/
|
|
||||||
symbolS *
|
symbolS *
|
||||||
symbol_find_or_make (name)
|
symbol_find_or_make (name)
|
||||||
const char *name;
|
const char *name;
|
||||||
|
@ -581,7 +558,7 @@ symbol_find_or_make (name)
|
||||||
} /* if symbol wasn't found */
|
} /* if symbol wasn't found */
|
||||||
|
|
||||||
return (symbolP);
|
return (symbolP);
|
||||||
} /* symbol_find_or_make() */
|
}
|
||||||
|
|
||||||
symbolS *
|
symbolS *
|
||||||
symbol_make (name)
|
symbol_make (name)
|
||||||
|
@ -589,23 +566,19 @@ symbol_make (name)
|
||||||
{
|
{
|
||||||
symbolS *symbolP;
|
symbolS *symbolP;
|
||||||
|
|
||||||
/* Let the machine description default it, e.g. for register names. */
|
/* Let the machine description default it, e.g. for register names. */
|
||||||
symbolP = md_undefined_symbol ((char *) name);
|
symbolP = md_undefined_symbol ((char *) name);
|
||||||
|
|
||||||
if (!symbolP)
|
if (!symbolP)
|
||||||
symbolP = symbol_new (name, undefined_section, (valueT) 0, &zero_address_frag);
|
symbolP = symbol_new (name, undefined_section, (valueT) 0, &zero_address_frag);
|
||||||
|
|
||||||
return (symbolP);
|
return (symbolP);
|
||||||
} /* symbol_make() */
|
}
|
||||||
|
|
||||||
/*
|
/* Implement symbol table lookup.
|
||||||
* symbol_find()
|
In: A symbol's name as a string: '\0' can't be part of a symbol name.
|
||||||
*
|
Out: NULL if the name was not in the symbol table, else the address
|
||||||
* Implement symbol table lookup.
|
of a struct symbol associated with that name. */
|
||||||
* In: A symbol's name as a string: '\0' can't be part of a symbol name.
|
|
||||||
* Out: NULL if the name was not in the symbol table, else the address
|
|
||||||
* of a struct symbol associated with that name.
|
|
||||||
*/
|
|
||||||
|
|
||||||
symbolS *
|
symbolS *
|
||||||
symbol_find (name)
|
symbol_find (name)
|
||||||
|
@ -616,7 +589,7 @@ symbol_find (name)
|
||||||
#else /* STRIP_UNDERSCORE */
|
#else /* STRIP_UNDERSCORE */
|
||||||
return (symbol_find_base (name, 0));
|
return (symbol_find_base (name, 0));
|
||||||
#endif /* STRIP_UNDERSCORE */
|
#endif /* STRIP_UNDERSCORE */
|
||||||
} /* symbol_find() */
|
}
|
||||||
|
|
||||||
symbolS *
|
symbolS *
|
||||||
symbol_find_base (name, strip_underscore)
|
symbol_find_base (name, strip_underscore)
|
||||||
|
@ -668,16 +641,15 @@ symbol_find_base (name, strip_underscore)
|
||||||
return ((symbolS *) hash_find (sy_hash, name));
|
return ((symbolS *) hash_find (sy_hash, name));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* Once upon a time, symbols were kept in a singly linked list. At
|
||||||
* Once upon a time, symbols were kept in a singly linked list. At
|
least coff needs to be able to rearrange them from time to time, for
|
||||||
* least coff needs to be able to rearrange them from time to time, for
|
which a doubly linked list is much more convenient. Loic did these
|
||||||
* which a doubly linked list is much more convenient. Loic did these
|
as macros which seemed dangerous to me so they're now functions.
|
||||||
* as macros which seemed dangerous to me so they're now functions.
|
xoxorich. */
|
||||||
* xoxorich.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Link symbol ADDME after symbol TARGET in the chain. */
|
/* Link symbol ADDME after symbol TARGET in the chain. */
|
||||||
void
|
|
||||||
|
void
|
||||||
symbol_append (addme, target, rootPP, lastPP)
|
symbol_append (addme, target, rootPP, lastPP)
|
||||||
symbolS *addme;
|
symbolS *addme;
|
||||||
symbolS *target;
|
symbolS *target;
|
||||||
|
@ -700,7 +672,7 @@ symbol_append (addme, target, rootPP, lastPP)
|
||||||
*rootPP = addme;
|
*rootPP = addme;
|
||||||
*lastPP = addme;
|
*lastPP = addme;
|
||||||
return;
|
return;
|
||||||
} /* if the list is empty */
|
} /* if the list is empty */
|
||||||
|
|
||||||
if (target->sy_next != NULL)
|
if (target->sy_next != NULL)
|
||||||
{
|
{
|
||||||
|
@ -712,7 +684,7 @@ symbol_append (addme, target, rootPP, lastPP)
|
||||||
{
|
{
|
||||||
know (*lastPP == target);
|
know (*lastPP == target);
|
||||||
*lastPP = addme;
|
*lastPP = addme;
|
||||||
} /* if we have a next */
|
} /* if we have a next */
|
||||||
|
|
||||||
addme->sy_next = target->sy_next;
|
addme->sy_next = target->sy_next;
|
||||||
target->sy_next = addme;
|
target->sy_next = addme;
|
||||||
|
@ -724,8 +696,9 @@ symbol_append (addme, target, rootPP, lastPP)
|
||||||
debug_verify_symchain (symbol_rootP, symbol_lastP);
|
debug_verify_symchain (symbol_rootP, symbol_lastP);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set the chain pointers of SYMBOL to null. */
|
/* Set the chain pointers of SYMBOL to null. */
|
||||||
void
|
|
||||||
|
void
|
||||||
symbol_clear_list_pointers (symbolP)
|
symbol_clear_list_pointers (symbolP)
|
||||||
symbolS *symbolP;
|
symbolS *symbolP;
|
||||||
{
|
{
|
||||||
|
@ -738,8 +711,9 @@ symbol_clear_list_pointers (symbolP)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SYMBOLS_NEED_BACKPOINTERS
|
#ifdef SYMBOLS_NEED_BACKPOINTERS
|
||||||
/* Remove SYMBOLP from the list. */
|
/* Remove SYMBOLP from the list. */
|
||||||
void
|
|
||||||
|
void
|
||||||
symbol_remove (symbolP, rootPP, lastPP)
|
symbol_remove (symbolP, rootPP, lastPP)
|
||||||
symbolS *symbolP;
|
symbolS *symbolP;
|
||||||
symbolS **rootPP;
|
symbolS **rootPP;
|
||||||
|
@ -751,28 +725,29 @@ symbol_remove (symbolP, rootPP, lastPP)
|
||||||
if (symbolP == *rootPP)
|
if (symbolP == *rootPP)
|
||||||
{
|
{
|
||||||
*rootPP = symbolP->sy_next;
|
*rootPP = symbolP->sy_next;
|
||||||
} /* if it was the root */
|
} /* if it was the root */
|
||||||
|
|
||||||
if (symbolP == *lastPP)
|
if (symbolP == *lastPP)
|
||||||
{
|
{
|
||||||
*lastPP = symbolP->sy_previous;
|
*lastPP = symbolP->sy_previous;
|
||||||
} /* if it was the tail */
|
} /* if it was the tail */
|
||||||
|
|
||||||
if (symbolP->sy_next != NULL)
|
if (symbolP->sy_next != NULL)
|
||||||
{
|
{
|
||||||
symbolP->sy_next->sy_previous = symbolP->sy_previous;
|
symbolP->sy_next->sy_previous = symbolP->sy_previous;
|
||||||
} /* if not last */
|
} /* if not last */
|
||||||
|
|
||||||
if (symbolP->sy_previous != NULL)
|
if (symbolP->sy_previous != NULL)
|
||||||
{
|
{
|
||||||
symbolP->sy_previous->sy_next = symbolP->sy_next;
|
symbolP->sy_previous->sy_next = symbolP->sy_next;
|
||||||
} /* if not first */
|
} /* if not first */
|
||||||
|
|
||||||
debug_verify_symchain (*rootPP, *lastPP);
|
debug_verify_symchain (*rootPP, *lastPP);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Link symbol ADDME before symbol TARGET in the chain. */
|
/* Link symbol ADDME before symbol TARGET in the chain. */
|
||||||
void
|
|
||||||
|
void
|
||||||
symbol_insert (addme, target, rootPP, lastPP)
|
symbol_insert (addme, target, rootPP, lastPP)
|
||||||
symbolS *addme;
|
symbolS *addme;
|
||||||
symbolS *target;
|
symbolS *target;
|
||||||
|
@ -792,7 +767,7 @@ symbol_insert (addme, target, rootPP, lastPP)
|
||||||
{
|
{
|
||||||
know (*rootPP == target);
|
know (*rootPP == target);
|
||||||
*rootPP = addme;
|
*rootPP = addme;
|
||||||
} /* if not first */
|
} /* if not first */
|
||||||
|
|
||||||
addme->sy_previous = target->sy_previous;
|
addme->sy_previous = target->sy_previous;
|
||||||
target->sy_previous = addme;
|
target->sy_previous = addme;
|
||||||
|
@ -803,7 +778,7 @@ symbol_insert (addme, target, rootPP, lastPP)
|
||||||
|
|
||||||
#endif /* SYMBOLS_NEED_BACKPOINTERS */
|
#endif /* SYMBOLS_NEED_BACKPOINTERS */
|
||||||
|
|
||||||
void
|
void
|
||||||
verify_symbol_chain (rootP, lastP)
|
verify_symbol_chain (rootP, lastP)
|
||||||
symbolS *rootP;
|
symbolS *rootP;
|
||||||
symbolS *lastP;
|
symbolS *lastP;
|
||||||
|
@ -891,7 +866,8 @@ resolve_symbol_value (symp, finalize)
|
||||||
if (symp->sy_resolving)
|
if (symp->sy_resolving)
|
||||||
{
|
{
|
||||||
if (finalize)
|
if (finalize)
|
||||||
as_bad (_("Symbol definition loop encountered at %s"), S_GET_NAME (symp));
|
as_bad (_("Symbol definition loop encountered at %s"),
|
||||||
|
S_GET_NAME (symp));
|
||||||
final_val = 0;
|
final_val = 0;
|
||||||
resolved = 1;
|
resolved = 1;
|
||||||
}
|
}
|
||||||
|
@ -1076,7 +1052,8 @@ resolve_symbol_value (symp, finalize)
|
||||||
S_GET_NAME (symp->sy_value.X_op_symbol));
|
S_GET_NAME (symp->sy_value.X_op_symbol));
|
||||||
if (seg_left != undefined_section
|
if (seg_left != undefined_section
|
||||||
&& seg_right != undefined_section)
|
&& seg_right != undefined_section)
|
||||||
as_bad_where (file, line, _("invalid section for operation"));
|
as_bad_where (file, line,
|
||||||
|
_("invalid section for operation"));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1144,7 +1121,7 @@ resolve_symbol_value (symp, finalize)
|
||||||
final_seg = absolute_section;
|
final_seg = absolute_section;
|
||||||
resolved = (symbol_resolved_p (add_symbol)
|
resolved = (symbol_resolved_p (add_symbol)
|
||||||
&& symbol_resolved_p (op_symbol));
|
&& symbol_resolved_p (op_symbol));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case O_register:
|
case O_register:
|
||||||
case O_big:
|
case O_big:
|
||||||
|
@ -1180,7 +1157,8 @@ exit_dont_set_value:
|
||||||
symp->sy_resolved = 1;
|
symp->sy_resolved = 1;
|
||||||
else if (S_GET_SEGMENT (symp) != expr_section)
|
else if (S_GET_SEGMENT (symp) != expr_section)
|
||||||
{
|
{
|
||||||
as_bad (_("can't resolve value for symbol \"%s\""), S_GET_NAME (symp));
|
as_bad (_("can't resolve value for symbol \"%s\""),
|
||||||
|
S_GET_NAME (symp));
|
||||||
symp->sy_resolved = 1;
|
symp->sy_resolved = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1228,7 +1206,7 @@ static char *dollar_label_defines;
|
||||||
static unsigned long dollar_label_count;
|
static unsigned long dollar_label_count;
|
||||||
static unsigned long dollar_label_max;
|
static unsigned long dollar_label_max;
|
||||||
|
|
||||||
int
|
int
|
||||||
dollar_label_defined (label)
|
dollar_label_defined (label)
|
||||||
long label;
|
long label;
|
||||||
{
|
{
|
||||||
|
@ -1240,9 +1218,9 @@ dollar_label_defined (label)
|
||||||
if (*i == label)
|
if (*i == label)
|
||||||
return dollar_label_defines[i - dollar_labels];
|
return dollar_label_defines[i - dollar_labels];
|
||||||
|
|
||||||
/* if we get here, label isn't defined */
|
/* If we get here, label isn't defined. */
|
||||||
return 0;
|
return 0;
|
||||||
} /* dollar_label_defined() */
|
}
|
||||||
|
|
||||||
static long
|
static long
|
||||||
dollar_label_instance (label)
|
dollar_label_instance (label)
|
||||||
|
@ -1256,12 +1234,12 @@ dollar_label_instance (label)
|
||||||
if (*i == label)
|
if (*i == label)
|
||||||
return (dollar_label_instances[i - dollar_labels]);
|
return (dollar_label_instances[i - dollar_labels]);
|
||||||
|
|
||||||
/* If we get here, we haven't seen the label before, therefore its instance
|
/* If we get here, we haven't seen the label before.
|
||||||
count is zero. */
|
Therefore its instance count is zero. */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
dollar_label_clear ()
|
dollar_label_clear ()
|
||||||
{
|
{
|
||||||
memset (dollar_label_defines, '\0', (unsigned int) dollar_label_count);
|
memset (dollar_label_defines, '\0', (unsigned int) dollar_label_count);
|
||||||
|
@ -1269,7 +1247,7 @@ dollar_label_clear ()
|
||||||
|
|
||||||
#define DOLLAR_LABEL_BUMP_BY 10
|
#define DOLLAR_LABEL_BUMP_BY 10
|
||||||
|
|
||||||
void
|
void
|
||||||
define_dollar_label (label)
|
define_dollar_label (label)
|
||||||
long label;
|
long label;
|
||||||
{
|
{
|
||||||
|
@ -1283,7 +1261,7 @@ define_dollar_label (label)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if we get to here, we don't have label listed yet. */
|
/* If we get to here, we don't have label listed yet. */
|
||||||
|
|
||||||
if (dollar_labels == NULL)
|
if (dollar_labels == NULL)
|
||||||
{
|
{
|
||||||
|
@ -1301,7 +1279,7 @@ define_dollar_label (label)
|
||||||
dollar_label_instances = (long *) xrealloc ((char *) dollar_label_instances,
|
dollar_label_instances = (long *) xrealloc ((char *) dollar_label_instances,
|
||||||
dollar_label_max * sizeof (long));
|
dollar_label_max * sizeof (long));
|
||||||
dollar_label_defines = xrealloc (dollar_label_defines, dollar_label_max);
|
dollar_label_defines = xrealloc (dollar_label_defines, dollar_label_max);
|
||||||
} /* if we needed to grow */
|
} /* if we needed to grow */
|
||||||
|
|
||||||
dollar_labels[dollar_label_count] = label;
|
dollar_labels[dollar_label_count] = label;
|
||||||
dollar_label_instances[dollar_label_count] = 1;
|
dollar_label_instances[dollar_label_count] = 1;
|
||||||
|
@ -1309,31 +1287,28 @@ define_dollar_label (label)
|
||||||
++dollar_label_count;
|
++dollar_label_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* Caller must copy returned name: we re-use the area for the next name.
|
||||||
* dollar_label_name()
|
|
||||||
*
|
|
||||||
* Caller must copy returned name: we re-use the area for the next name.
|
|
||||||
*
|
|
||||||
* The mth occurence of label n: is turned into the symbol "Ln^Am"
|
|
||||||
* where n is the label number and m is the instance number. "L" makes
|
|
||||||
* it a label discarded unless debugging and "^A"('\1') ensures no
|
|
||||||
* ordinary symbol SHOULD get the same name as a local label
|
|
||||||
* symbol. The first "4:" is "L4^A1" - the m numbers begin at 1.
|
|
||||||
*
|
|
||||||
* fb labels get the same treatment, except that ^B is used in place of ^A.
|
|
||||||
*/
|
|
||||||
|
|
||||||
char * /* Return local label name. */
|
The mth occurence of label n: is turned into the symbol "Ln^Am"
|
||||||
|
where n is the label number and m is the instance number. "L" makes
|
||||||
|
it a label discarded unless debugging and "^A"('\1') ensures no
|
||||||
|
ordinary symbol SHOULD get the same name as a local label
|
||||||
|
symbol. The first "4:" is "L4^A1" - the m numbers begin at 1.
|
||||||
|
|
||||||
|
fb labels get the same treatment, except that ^B is used in place
|
||||||
|
of ^A. */
|
||||||
|
|
||||||
|
char * /* Return local label name. */
|
||||||
dollar_label_name (n, augend)
|
dollar_label_name (n, augend)
|
||||||
register long n; /* we just saw "n$:" : n a number */
|
register long n; /* we just saw "n$:" : n a number. */
|
||||||
register int augend; /* 0 for current instance, 1 for new instance */
|
register int augend; /* 0 for current instance, 1 for new instance. */
|
||||||
{
|
{
|
||||||
long i;
|
long i;
|
||||||
/* Returned to caller, then copied. used for created names ("4f") */
|
/* Returned to caller, then copied. Used for created names ("4f"). */
|
||||||
static char symbol_name_build[24];
|
static char symbol_name_build[24];
|
||||||
register char *p;
|
register char *p;
|
||||||
register char *q;
|
register char *q;
|
||||||
char symbol_name_temporary[20]; /* build up a number, BACKWARDS */
|
char symbol_name_temporary[20]; /* Build up a number, BACKWARDS. */
|
||||||
|
|
||||||
know (n >= 0);
|
know (n >= 0);
|
||||||
know (augend == 0 || augend == 1);
|
know (augend == 0 || augend == 1);
|
||||||
|
@ -1343,8 +1318,8 @@ dollar_label_name (n, augend)
|
||||||
#endif
|
#endif
|
||||||
*p++ = 'L';
|
*p++ = 'L';
|
||||||
|
|
||||||
/* Next code just does sprintf( {}, "%d", n); */
|
/* Next code just does sprintf( {}, "%d", n); */
|
||||||
/* label number */
|
/* Label number. */
|
||||||
q = symbol_name_temporary;
|
q = symbol_name_temporary;
|
||||||
for (*q++ = 0, i = n; i; ++q)
|
for (*q++ = 0, i = n; i; ++q)
|
||||||
{
|
{
|
||||||
|
@ -1354,9 +1329,9 @@ dollar_label_name (n, augend)
|
||||||
while ((*p = *--q) != '\0')
|
while ((*p = *--q) != '\0')
|
||||||
++p;
|
++p;
|
||||||
|
|
||||||
*p++ = 1; /* ^A */
|
*p++ = 1; /* ^A */
|
||||||
|
|
||||||
/* instance number */
|
/* Instance number. */
|
||||||
q = symbol_name_temporary;
|
q = symbol_name_temporary;
|
||||||
for (*q++ = 0, i = dollar_label_instance (n) + augend; i; ++q)
|
for (*q++ = 0, i = dollar_label_instance (n) + augend; i; ++q)
|
||||||
{
|
{
|
||||||
|
@ -1365,27 +1340,26 @@ dollar_label_name (n, augend)
|
||||||
}
|
}
|
||||||
while ((*p++ = *--q) != '\0');;
|
while ((*p++ = *--q) != '\0');;
|
||||||
|
|
||||||
/* The label, as a '\0' ended string, starts at symbol_name_build. */
|
/* The label, as a '\0' ended string, starts at symbol_name_build. */
|
||||||
return symbol_name_build;
|
return symbol_name_build;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* Sombody else's idea of local labels. They are made by "n:" where n
|
||||||
* Sombody else's idea of local labels. They are made by "n:" where n
|
is any decimal digit. Refer to them with
|
||||||
* is any decimal digit. Refer to them with
|
"nb" for previous (backward) n:
|
||||||
* "nb" for previous (backward) n:
|
or "nf" for next (forward) n:.
|
||||||
* or "nf" for next (forward) n:.
|
|
||||||
*
|
We do a little better and let n be any number, not just a single digit, but
|
||||||
* We do a little better and let n be any number, not just a single digit, but
|
since the other guy's assembler only does ten, we treat the first ten
|
||||||
* since the other guy's assembler only does ten, we treat the first ten
|
specially.
|
||||||
* specially.
|
|
||||||
*
|
Like someone else's assembler, we have one set of local label counters for
|
||||||
* Like someone else's assembler, we have one set of local label counters for
|
entire assembly, not one set per (sub)segment like in most assemblers. This
|
||||||
* entire assembly, not one set per (sub)segment like in most assemblers. This
|
implies that one can refer to a label in another segment, and indeed some
|
||||||
* implies that one can refer to a label in another segment, and indeed some
|
crufty compilers have done just that.
|
||||||
* crufty compilers have done just that.
|
|
||||||
*
|
Since there could be a LOT of these things, treat them as a sparse
|
||||||
* Since there could be a LOT of these things, treat them as a sparse array.
|
array. */
|
||||||
*/
|
|
||||||
|
|
||||||
#define FB_LABEL_SPECIAL (10)
|
#define FB_LABEL_SPECIAL (10)
|
||||||
|
|
||||||
|
@ -1395,17 +1369,18 @@ static long *fb_label_instances;
|
||||||
static long fb_label_count;
|
static long fb_label_count;
|
||||||
static long fb_label_max;
|
static long fb_label_max;
|
||||||
|
|
||||||
/* this must be more than FB_LABEL_SPECIAL */
|
/* This must be more than FB_LABEL_SPECIAL. */
|
||||||
#define FB_LABEL_BUMP_BY (FB_LABEL_SPECIAL + 6)
|
#define FB_LABEL_BUMP_BY (FB_LABEL_SPECIAL + 6)
|
||||||
|
|
||||||
static void
|
static void
|
||||||
fb_label_init ()
|
fb_label_init ()
|
||||||
{
|
{
|
||||||
memset ((void *) fb_low_counter, '\0', sizeof (fb_low_counter));
|
memset ((void *) fb_low_counter, '\0', sizeof (fb_low_counter));
|
||||||
} /* fb_label_init() */
|
}
|
||||||
|
|
||||||
/* add one to the instance number of this fb label */
|
/* Add one to the instance number of this fb label. */
|
||||||
void
|
|
||||||
|
void
|
||||||
fb_label_instance_inc (label)
|
fb_label_instance_inc (label)
|
||||||
long label;
|
long label;
|
||||||
{
|
{
|
||||||
|
@ -1426,11 +1401,11 @@ fb_label_instance_inc (label)
|
||||||
{
|
{
|
||||||
++fb_label_instances[i - fb_labels];
|
++fb_label_instances[i - fb_labels];
|
||||||
return;
|
return;
|
||||||
} /* if we find it */
|
} /* if we find it */
|
||||||
} /* for each existing label */
|
} /* for each existing label */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if we get to here, we don't have label listed yet. */
|
/* If we get to here, we don't have label listed yet. */
|
||||||
|
|
||||||
if (fb_labels == NULL)
|
if (fb_labels == NULL)
|
||||||
{
|
{
|
||||||
|
@ -1447,14 +1422,14 @@ fb_label_instance_inc (label)
|
||||||
fb_label_max * sizeof (long));
|
fb_label_max * sizeof (long));
|
||||||
fb_label_instances = (long *) xrealloc ((char *) fb_label_instances,
|
fb_label_instances = (long *) xrealloc ((char *) fb_label_instances,
|
||||||
fb_label_max * sizeof (long));
|
fb_label_max * sizeof (long));
|
||||||
} /* if we needed to grow */
|
} /* if we needed to grow */
|
||||||
|
|
||||||
fb_labels[fb_label_count] = label;
|
fb_labels[fb_label_count] = label;
|
||||||
fb_label_instances[fb_label_count] = 1;
|
fb_label_instances[fb_label_count] = 1;
|
||||||
++fb_label_count;
|
++fb_label_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
static long
|
static long
|
||||||
fb_label_instance (label)
|
fb_label_instance (label)
|
||||||
long label;
|
long label;
|
||||||
{
|
{
|
||||||
|
@ -1473,8 +1448,8 @@ fb_label_instance (label)
|
||||||
if (*i == label)
|
if (*i == label)
|
||||||
{
|
{
|
||||||
return (fb_label_instances[i - fb_labels]);
|
return (fb_label_instances[i - fb_labels]);
|
||||||
} /* if we find it */
|
} /* if we find it */
|
||||||
} /* for each existing label */
|
} /* for each existing label */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We didn't find the label, so this must be a reference to the
|
/* We didn't find the label, so this must be a reference to the
|
||||||
|
@ -1482,38 +1457,36 @@ fb_label_instance (label)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* Caller must copy returned name: we re-use the area for the next name.
|
||||||
* fb_label_name()
|
|
||||||
*
|
|
||||||
* Caller must copy returned name: we re-use the area for the next name.
|
|
||||||
*
|
|
||||||
* The mth occurence of label n: is turned into the symbol "Ln^Bm"
|
|
||||||
* where n is the label number and m is the instance number. "L" makes
|
|
||||||
* it a label discarded unless debugging and "^B"('\2') ensures no
|
|
||||||
* ordinary symbol SHOULD get the same name as a local label
|
|
||||||
* symbol. The first "4:" is "L4^B1" - the m numbers begin at 1.
|
|
||||||
*
|
|
||||||
* dollar labels get the same treatment, except that ^A is used in place of ^B. */
|
|
||||||
|
|
||||||
char * /* Return local label name. */
|
The mth occurence of label n: is turned into the symbol "Ln^Bm"
|
||||||
|
where n is the label number and m is the instance number. "L" makes
|
||||||
|
it a label discarded unless debugging and "^B"('\2') ensures no
|
||||||
|
ordinary symbol SHOULD get the same name as a local label
|
||||||
|
symbol. The first "4:" is "L4^B1" - the m numbers begin at 1.
|
||||||
|
|
||||||
|
dollar labels get the same treatment, except that ^A is used in
|
||||||
|
place of ^B. */
|
||||||
|
|
||||||
|
char * /* Return local label name. */
|
||||||
fb_label_name (n, augend)
|
fb_label_name (n, augend)
|
||||||
long n; /* we just saw "n:", "nf" or "nb" : n a number */
|
long n; /* We just saw "n:", "nf" or "nb" : n a number. */
|
||||||
long augend; /* 0 for nb, 1 for n:, nf */
|
long augend; /* 0 for nb, 1 for n:, nf. */
|
||||||
{
|
{
|
||||||
long i;
|
long i;
|
||||||
/* Returned to caller, then copied. used for created names ("4f") */
|
/* Returned to caller, then copied. Used for created names ("4f"). */
|
||||||
static char symbol_name_build[24];
|
static char symbol_name_build[24];
|
||||||
register char *p;
|
register char *p;
|
||||||
register char *q;
|
register char *q;
|
||||||
char symbol_name_temporary[20]; /* build up a number, BACKWARDS */
|
char symbol_name_temporary[20]; /* Build up a number, BACKWARDS. */
|
||||||
|
|
||||||
know (n >= 0);
|
know (n >= 0);
|
||||||
know (augend == 0 || augend == 1);
|
know (augend == 0 || augend == 1);
|
||||||
p = symbol_name_build;
|
p = symbol_name_build;
|
||||||
*p++ = 'L';
|
*p++ = 'L';
|
||||||
|
|
||||||
/* Next code just does sprintf( {}, "%d", n); */
|
/* Next code just does sprintf( {}, "%d", n); */
|
||||||
/* label number */
|
/* Label number. */
|
||||||
q = symbol_name_temporary;
|
q = symbol_name_temporary;
|
||||||
for (*q++ = 0, i = n; i; ++q)
|
for (*q++ = 0, i = n; i; ++q)
|
||||||
{
|
{
|
||||||
|
@ -1523,9 +1496,9 @@ fb_label_name (n, augend)
|
||||||
while ((*p = *--q) != '\0')
|
while ((*p = *--q) != '\0')
|
||||||
++p;
|
++p;
|
||||||
|
|
||||||
*p++ = 2; /* ^B */
|
*p++ = 2; /* ^B */
|
||||||
|
|
||||||
/* instance number */
|
/* Instance number. */
|
||||||
q = symbol_name_temporary;
|
q = symbol_name_temporary;
|
||||||
for (*q++ = 0, i = fb_label_instance (n) + augend; i; ++q)
|
for (*q++ = 0, i = fb_label_instance (n) + augend; i; ++q)
|
||||||
{
|
{
|
||||||
|
@ -1534,15 +1507,13 @@ fb_label_name (n, augend)
|
||||||
}
|
}
|
||||||
while ((*p++ = *--q) != '\0');;
|
while ((*p++ = *--q) != '\0');;
|
||||||
|
|
||||||
/* The label, as a '\0' ended string, starts at symbol_name_build. */
|
/* The label, as a '\0' ended string, starts at symbol_name_build. */
|
||||||
return (symbol_name_build);
|
return (symbol_name_build);
|
||||||
} /* fb_label_name() */
|
}
|
||||||
|
|
||||||
/*
|
/* Decode name that may have been generated by foo_label_name() above.
|
||||||
* decode name that may have been generated by foo_label_name() above. If
|
If the name wasn't generated by foo_label_name(), then return it
|
||||||
* the name wasn't generated by foo_label_name(), then return it unaltered.
|
unaltered. This is used for error messages. */
|
||||||
* This is used for error messages.
|
|
||||||
*/
|
|
||||||
|
|
||||||
char *
|
char *
|
||||||
decode_local_label_name (s)
|
decode_local_label_name (s)
|
||||||
|
@ -1678,7 +1649,7 @@ S_IS_EXTERNAL (s)
|
||||||
|
|
||||||
flags = s->bsym->flags;
|
flags = s->bsym->flags;
|
||||||
|
|
||||||
/* sanity check */
|
/* Sanity check. */
|
||||||
if ((flags & BSF_LOCAL) && (flags & BSF_GLOBAL))
|
if ((flags & BSF_LOCAL) && (flags & BSF_GLOBAL))
|
||||||
abort ();
|
abort ();
|
||||||
|
|
||||||
|
@ -1735,7 +1706,7 @@ S_IS_LOCAL (s)
|
||||||
|
|
||||||
flags = s->bsym->flags;
|
flags = s->bsym->flags;
|
||||||
|
|
||||||
/* sanity check */
|
/* Sanity check. */
|
||||||
if ((flags & BSF_LOCAL) && (flags & BSF_GLOBAL))
|
if ((flags & BSF_LOCAL) && (flags & BSF_GLOBAL))
|
||||||
abort ();
|
abort ();
|
||||||
|
|
||||||
|
@ -1814,7 +1785,7 @@ S_SET_SEGMENT (s, seg)
|
||||||
if (s->bsym->flags & BSF_SECTION_SYM)
|
if (s->bsym->flags & BSF_SECTION_SYM)
|
||||||
{
|
{
|
||||||
if (s->bsym->section != seg)
|
if (s->bsym->section != seg)
|
||||||
abort();
|
abort ();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
s->bsym->section = seg;
|
s->bsym->section = seg;
|
||||||
|
@ -1832,7 +1803,7 @@ S_SET_EXTERNAL (s)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
s->bsym->flags |= BSF_GLOBAL;
|
s->bsym->flags |= BSF_GLOBAL;
|
||||||
s->bsym->flags &= ~(BSF_LOCAL|BSF_WEAK);
|
s->bsym->flags &= ~(BSF_LOCAL | BSF_WEAK);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -1847,7 +1818,7 @@ S_CLEAR_EXTERNAL (s)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
s->bsym->flags |= BSF_LOCAL;
|
s->bsym->flags |= BSF_LOCAL;
|
||||||
s->bsym->flags &= ~(BSF_GLOBAL|BSF_WEAK);
|
s->bsym->flags &= ~(BSF_GLOBAL | BSF_WEAK);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -1857,7 +1828,7 @@ S_SET_WEAK (s)
|
||||||
if (LOCAL_SYMBOL_CHECK (s))
|
if (LOCAL_SYMBOL_CHECK (s))
|
||||||
s = local_symbol_convert ((struct local_symbol *) s);
|
s = local_symbol_convert ((struct local_symbol *) s);
|
||||||
s->bsym->flags |= BSF_WEAK;
|
s->bsym->flags |= BSF_WEAK;
|
||||||
s->bsym->flags &= ~(BSF_GLOBAL|BSF_LOCAL);
|
s->bsym->flags &= ~(BSF_GLOBAL | BSF_LOCAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -2125,7 +2096,7 @@ symbol_section_p (s)
|
||||||
#ifdef BFD_ASSEMBLER
|
#ifdef BFD_ASSEMBLER
|
||||||
return (s->bsym->flags & BSF_SECTION_SYM) != 0;
|
return (s->bsym->flags & BSF_SECTION_SYM) != 0;
|
||||||
#else
|
#else
|
||||||
/* FIXME */
|
/* FIXME. */
|
||||||
return 0;
|
return 0;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -2237,7 +2208,7 @@ void
|
||||||
symbol_begin ()
|
symbol_begin ()
|
||||||
{
|
{
|
||||||
symbol_lastP = NULL;
|
symbol_lastP = NULL;
|
||||||
symbol_rootP = NULL; /* In case we have 0 symbols (!!) */
|
symbol_rootP = NULL; /* In case we have 0 symbols (!!) */
|
||||||
sy_hash = hash_new ();
|
sy_hash = hash_new ();
|
||||||
#ifdef BFD_ASSEMBLER
|
#ifdef BFD_ASSEMBLER
|
||||||
local_hash = hash_new ();
|
local_hash = hash_new ();
|
||||||
|
@ -2249,7 +2220,7 @@ symbol_begin ()
|
||||||
abs_symbol.bsym = bfd_abs_section.symbol;
|
abs_symbol.bsym = bfd_abs_section.symbol;
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
/* Can't initialise a union. Sigh. */
|
/* Can't initialise a union. Sigh. */
|
||||||
S_SET_SEGMENT (&abs_symbol, absolute_section);
|
S_SET_SEGMENT (&abs_symbol, absolute_section);
|
||||||
#endif
|
#endif
|
||||||
abs_symbol.sy_value.X_op = O_constant;
|
abs_symbol.sy_value.X_op = O_constant;
|
||||||
|
@ -2258,8 +2229,6 @@ symbol_begin ()
|
||||||
if (LOCAL_LABELS_FB)
|
if (LOCAL_LABELS_FB)
|
||||||
fb_label_init ();
|
fb_label_init ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int indent_level;
|
int indent_level;
|
||||||
|
|
||||||
|
@ -2361,7 +2330,7 @@ print_symbol_value (sym)
|
||||||
static void
|
static void
|
||||||
print_binary (file, name, exp)
|
print_binary (file, name, exp)
|
||||||
FILE *file;
|
FILE *file;
|
||||||
const char * name;
|
const char *name;
|
||||||
expressionS *exp;
|
expressionS *exp;
|
||||||
{
|
{
|
||||||
indent_level++;
|
indent_level++;
|
||||||
|
@ -2506,5 +2475,3 @@ symbol_print_statistics (file)
|
||||||
local_symbol_count, local_symbol_conversion_count);
|
local_symbol_count, local_symbol_conversion_count);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* end of symbols.c */
|
|
||||||
|
|
Loading…
Reference in a new issue