|
|
|
@ -60,13 +60,13 @@ symbolS abs_symbol; |
|
|
|
|
|
|
|
struct obstack notes; |
|
|
|
|
|
|
|
static char *save_symbol_name PARAMS ((const char *)); |
|
|
|
static void fb_label_init PARAMS ((void)); |
|
|
|
static long dollar_label_instance PARAMS ((long)); |
|
|
|
static long fb_label_instance PARAMS ((long)); |
|
|
|
static char *save_symbol_name (const char *); |
|
|
|
static void fb_label_init (void); |
|
|
|
static long dollar_label_instance (long); |
|
|
|
static long fb_label_instance (long); |
|
|
|
|
|
|
|
static void print_binary PARAMS ((FILE *, const char *, expressionS *)); |
|
|
|
static void report_op_error PARAMS ((symbolS *, symbolS *, symbolS *)); |
|
|
|
static void print_binary (FILE *, const char *, expressionS *); |
|
|
|
static void report_op_error (symbolS *, symbolS *, symbolS *); |
|
|
|
|
|
|
|
/* 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 |
|
|
|
@ -78,11 +78,7 @@ static void report_op_error PARAMS ((symbolS *, symbolS *, symbolS *)); |
|
|
|
output file, you can call symbol_create. */ |
|
|
|
|
|
|
|
symbolS * |
|
|
|
symbol_new (name, segment, valu, frag) |
|
|
|
const char *name; |
|
|
|
segT segment; |
|
|
|
valueT valu; |
|
|
|
fragS *frag; |
|
|
|
symbol_new (const char *name, segT segment, valueT valu, fragS *frag) |
|
|
|
{ |
|
|
|
symbolS *symbolP = symbol_create (name, segment, valu, frag); |
|
|
|
|
|
|
|
@ -103,8 +99,7 @@ symbol_new (name, segment, valu, frag) |
|
|
|
to the object file format. */ |
|
|
|
|
|
|
|
static char * |
|
|
|
save_symbol_name (name) |
|
|
|
const char *name; |
|
|
|
save_symbol_name (const char *name) |
|
|
|
{ |
|
|
|
unsigned int name_length; |
|
|
|
char *ret; |
|
|
|
@ -134,11 +129,10 @@ save_symbol_name (name) |
|
|
|
} |
|
|
|
|
|
|
|
symbolS * |
|
|
|
symbol_create (name, segment, valu, frag) |
|
|
|
const char *name; /* It is copied, the caller can destroy/modify. */ |
|
|
|
segT segment; /* Segment identifier (SEG_<something>). */ |
|
|
|
valueT valu; /* Symbol value. */ |
|
|
|
fragS *frag; /* Associated fragment. */ |
|
|
|
symbol_create (const char *name, /* It is copied, the caller can destroy/modify. */ |
|
|
|
segT segment, /* Segment identifier (SEG_<something>). */ |
|
|
|
valueT valu, /* Symbol value. */ |
|
|
|
fragS *frag /* Associated fragment. */) |
|
|
|
{ |
|
|
|
char *preserved_copy_of_name; |
|
|
|
symbolS *symbolP; |
|
|
|
@ -182,7 +176,7 @@ symbol_create (name, segment, valu, frag) |
|
|
|
/* Local symbol support. If we can get away with it, we keep only a
|
|
|
|
small amount of information for local symbols. */ |
|
|
|
|
|
|
|
static symbolS *local_symbol_convert PARAMS ((struct local_symbol *)); |
|
|
|
static symbolS *local_symbol_convert (struct local_symbol *); |
|
|
|
|
|
|
|
/* Used for statistics. */ |
|
|
|
|
|
|
|
@ -204,11 +198,7 @@ static unsigned long local_symbol_conversion_count; |
|
|
|
/* Create a local symbol and insert it into the local hash table. */ |
|
|
|
|
|
|
|
struct local_symbol * |
|
|
|
local_symbol_make (name, section, value, frag) |
|
|
|
const char *name; |
|
|
|
segT section; |
|
|
|
valueT value; |
|
|
|
fragS *frag; |
|
|
|
local_symbol_make (const char *name, segT section, valueT value, fragS *frag) |
|
|
|
{ |
|
|
|
char *name_copy; |
|
|
|
struct local_symbol *ret; |
|
|
|
@ -233,8 +223,7 @@ local_symbol_make (name, section, value, frag) |
|
|
|
reclaim the space used by the local symbol. */ |
|
|
|
|
|
|
|
static symbolS * |
|
|
|
local_symbol_convert (locsym) |
|
|
|
struct local_symbol *locsym; |
|
|
|
local_symbol_convert (struct local_symbol *locsym) |
|
|
|
{ |
|
|
|
symbolS *ret; |
|
|
|
|
|
|
|
@ -280,9 +269,9 @@ local_symbol_convert (locsym) |
|
|
|
Gripes if we are redefining a symbol incompatibly (and ignores it). */ |
|
|
|
|
|
|
|
symbolS * |
|
|
|
colon (sym_name) /* Just seen "x:" - rattle symbols & frags. */ |
|
|
|
const char *sym_name; /* Symbol name, as a cannonical string. */ |
|
|
|
/* We copy this string: OK to alter later. */ |
|
|
|
colon (/* Just seen "x:" - rattle symbols & frags. */ |
|
|
|
const char *sym_name /* Symbol name, as a cannonical string. */ |
|
|
|
/* We copy this string: OK to alter later. */) |
|
|
|
{ |
|
|
|
register symbolS *symbolP; /* Symbol we are working with. */ |
|
|
|
|
|
|
|
@ -513,8 +502,7 @@ colon (sym_name) /* Just seen "x:" - rattle symbols & frags. */ |
|
|
|
/* Die if we can't insert the symbol. */ |
|
|
|
|
|
|
|
void |
|
|
|
symbol_table_insert (symbolP) |
|
|
|
symbolS *symbolP; |
|
|
|
symbol_table_insert (symbolS *symbolP) |
|
|
|
{ |
|
|
|
register const char *error_string; |
|
|
|
|
|
|
|
@ -542,8 +530,7 @@ symbol_table_insert (symbolP) |
|
|
|
it into the symbol table. Return a pointer to it. */ |
|
|
|
|
|
|
|
symbolS * |
|
|
|
symbol_find_or_make (name) |
|
|
|
const char *name; |
|
|
|
symbol_find_or_make (const char *name) |
|
|
|
{ |
|
|
|
register symbolS *symbolP; |
|
|
|
|
|
|
|
@ -574,8 +561,7 @@ symbol_find_or_make (name) |
|
|
|
} |
|
|
|
|
|
|
|
symbolS * |
|
|
|
symbol_make (name) |
|
|
|
const char *name; |
|
|
|
symbol_make (const char *name) |
|
|
|
{ |
|
|
|
symbolS *symbolP; |
|
|
|
|
|
|
|
@ -589,22 +575,19 @@ symbol_make (name) |
|
|
|
} |
|
|
|
|
|
|
|
symbolS * |
|
|
|
symbol_temp_new (seg, ofs, frag) |
|
|
|
segT seg; |
|
|
|
valueT ofs; |
|
|
|
fragS *frag; |
|
|
|
symbol_temp_new (segT seg, valueT ofs, fragS *frag) |
|
|
|
{ |
|
|
|
return symbol_new (FAKE_LABEL_NAME, seg, ofs, frag); |
|
|
|
} |
|
|
|
|
|
|
|
symbolS * |
|
|
|
symbol_temp_new_now () |
|
|
|
symbol_temp_new_now (void) |
|
|
|
{ |
|
|
|
return symbol_temp_new (now_seg, frag_now_fix (), frag_now); |
|
|
|
} |
|
|
|
|
|
|
|
symbolS * |
|
|
|
symbol_temp_make () |
|
|
|
symbol_temp_make (void) |
|
|
|
{ |
|
|
|
return symbol_make (FAKE_LABEL_NAME); |
|
|
|
} |
|
|
|
@ -615,8 +598,7 @@ symbol_temp_make () |
|
|
|
of a struct symbol associated with that name. */ |
|
|
|
|
|
|
|
symbolS * |
|
|
|
symbol_find (name) |
|
|
|
const char *name; |
|
|
|
symbol_find (const char *name) |
|
|
|
{ |
|
|
|
#ifdef STRIP_UNDERSCORE |
|
|
|
return (symbol_find_base (name, 1)); |
|
|
|
@ -626,8 +608,7 @@ symbol_find (name) |
|
|
|
} |
|
|
|
|
|
|
|
symbolS * |
|
|
|
symbol_find_exact (name) |
|
|
|
const char *name; |
|
|
|
symbol_find_exact (const char *name) |
|
|
|
{ |
|
|
|
#ifdef BFD_ASSEMBLER |
|
|
|
{ |
|
|
|
@ -643,9 +624,7 @@ symbol_find_exact (name) |
|
|
|
} |
|
|
|
|
|
|
|
symbolS * |
|
|
|
symbol_find_base (name, strip_underscore) |
|
|
|
const char *name; |
|
|
|
int strip_underscore; |
|
|
|
symbol_find_base (const char *name, int strip_underscore) |
|
|
|
{ |
|
|
|
if (strip_underscore && *name == '_') |
|
|
|
name++; |
|
|
|
@ -689,11 +668,8 @@ symbol_find_base (name, strip_underscore) |
|
|
|
/* Link symbol ADDME after symbol TARGET in the chain. */ |
|
|
|
|
|
|
|
void |
|
|
|
symbol_append (addme, target, rootPP, lastPP) |
|
|
|
symbolS *addme; |
|
|
|
symbolS *target; |
|
|
|
symbolS **rootPP; |
|
|
|
symbolS **lastPP; |
|
|
|
symbol_append (symbolS *addme, symbolS *target, |
|
|
|
symbolS **rootPP, symbolS **lastPP) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (addme)) |
|
|
|
abort (); |
|
|
|
@ -738,8 +714,7 @@ symbol_append (addme, target, rootPP, lastPP) |
|
|
|
/* Set the chain pointers of SYMBOL to null. */ |
|
|
|
|
|
|
|
void |
|
|
|
symbol_clear_list_pointers (symbolP) |
|
|
|
symbolS *symbolP; |
|
|
|
symbol_clear_list_pointers (symbolS *symbolP) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (symbolP)) |
|
|
|
abort (); |
|
|
|
@ -753,10 +728,7 @@ symbol_clear_list_pointers (symbolP) |
|
|
|
/* Remove SYMBOLP from the list. */ |
|
|
|
|
|
|
|
void |
|
|
|
symbol_remove (symbolP, rootPP, lastPP) |
|
|
|
symbolS *symbolP; |
|
|
|
symbolS **rootPP; |
|
|
|
symbolS **lastPP; |
|
|
|
symbol_remove (symbolS *symbolP, symbolS **rootPP, symbolS **lastPP) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (symbolP)) |
|
|
|
abort (); |
|
|
|
@ -787,11 +759,8 @@ symbol_remove (symbolP, rootPP, lastPP) |
|
|
|
/* Link symbol ADDME before symbol TARGET in the chain. */ |
|
|
|
|
|
|
|
void |
|
|
|
symbol_insert (addme, target, rootPP, lastPP) |
|
|
|
symbolS *addme; |
|
|
|
symbolS *target; |
|
|
|
symbolS **rootPP; |
|
|
|
symbolS **lastPP ATTRIBUTE_UNUSED; |
|
|
|
symbol_insert (symbolS *addme, symbolS *target, |
|
|
|
symbolS **rootPP, symbolS **lastPP ATTRIBUTE_UNUSED) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (addme)) |
|
|
|
abort (); |
|
|
|
@ -818,9 +787,7 @@ symbol_insert (addme, target, rootPP, lastPP) |
|
|
|
#endif /* SYMBOLS_NEED_BACKPOINTERS */ |
|
|
|
|
|
|
|
void |
|
|
|
verify_symbol_chain (rootP, lastP) |
|
|
|
symbolS *rootP; |
|
|
|
symbolS *lastP; |
|
|
|
verify_symbol_chain (symbolS *rootP, symbolS *lastP) |
|
|
|
{ |
|
|
|
symbolS *symbolP = rootP; |
|
|
|
|
|
|
|
@ -844,8 +811,7 @@ verify_symbol_chain (rootP, lastP) |
|
|
|
} |
|
|
|
|
|
|
|
void |
|
|
|
verify_symbol_chain_2 (sym) |
|
|
|
symbolS *sym; |
|
|
|
verify_symbol_chain_2 (symbolS *sym) |
|
|
|
{ |
|
|
|
symbolS *p = sym, *n = sym; |
|
|
|
#ifdef SYMBOLS_NEED_BACKPOINTERS |
|
|
|
@ -858,9 +824,7 @@ verify_symbol_chain_2 (sym) |
|
|
|
} |
|
|
|
|
|
|
|
static void |
|
|
|
report_op_error (symp, left, right) |
|
|
|
symbolS *symp; |
|
|
|
symbolS *left, *right; |
|
|
|
report_op_error (symbolS *symp, symbolS *left, symbolS *right) |
|
|
|
{ |
|
|
|
char *file; |
|
|
|
unsigned int line; |
|
|
|
@ -919,8 +883,7 @@ report_op_error (symp, left, right) |
|
|
|
values. */ |
|
|
|
|
|
|
|
valueT |
|
|
|
resolve_symbol_value (symp) |
|
|
|
symbolS *symp; |
|
|
|
resolve_symbol_value (symbolS *symp) |
|
|
|
{ |
|
|
|
int resolved; |
|
|
|
valueT final_val = 0; |
|
|
|
@ -1288,14 +1251,12 @@ exit_dont_set_value: |
|
|
|
|
|
|
|
#ifdef BFD_ASSEMBLER |
|
|
|
|
|
|
|
static void resolve_local_symbol PARAMS ((const char *, PTR)); |
|
|
|
static void resolve_local_symbol (const char *, PTR); |
|
|
|
|
|
|
|
/* A static function passed to hash_traverse. */ |
|
|
|
|
|
|
|
static void |
|
|
|
resolve_local_symbol (key, value) |
|
|
|
const char *key ATTRIBUTE_UNUSED; |
|
|
|
PTR value; |
|
|
|
resolve_local_symbol (const char *key ATTRIBUTE_UNUSED, PTR value) |
|
|
|
{ |
|
|
|
if (value != NULL) |
|
|
|
resolve_symbol_value (value); |
|
|
|
@ -1306,7 +1267,7 @@ resolve_local_symbol (key, value) |
|
|
|
/* Resolve all local symbols. */ |
|
|
|
|
|
|
|
void |
|
|
|
resolve_local_symbol_values () |
|
|
|
resolve_local_symbol_values (void) |
|
|
|
{ |
|
|
|
#ifdef BFD_ASSEMBLER |
|
|
|
hash_traverse (local_hash, resolve_local_symbol); |
|
|
|
@ -1327,8 +1288,7 @@ static unsigned long dollar_label_count; |
|
|
|
static unsigned long dollar_label_max; |
|
|
|
|
|
|
|
int |
|
|
|
dollar_label_defined (label) |
|
|
|
long label; |
|
|
|
dollar_label_defined (long label) |
|
|
|
{ |
|
|
|
long *i; |
|
|
|
|
|
|
|
@ -1343,8 +1303,7 @@ dollar_label_defined (label) |
|
|
|
} |
|
|
|
|
|
|
|
static long |
|
|
|
dollar_label_instance (label) |
|
|
|
long label; |
|
|
|
dollar_label_instance (long label) |
|
|
|
{ |
|
|
|
long *i; |
|
|
|
|
|
|
|
@ -1360,7 +1319,7 @@ dollar_label_instance (label) |
|
|
|
} |
|
|
|
|
|
|
|
void |
|
|
|
dollar_label_clear () |
|
|
|
dollar_label_clear (void) |
|
|
|
{ |
|
|
|
memset (dollar_label_defines, '\0', (unsigned int) dollar_label_count); |
|
|
|
} |
|
|
|
@ -1368,8 +1327,7 @@ dollar_label_clear () |
|
|
|
#define DOLLAR_LABEL_BUMP_BY 10 |
|
|
|
|
|
|
|
void |
|
|
|
define_dollar_label (label) |
|
|
|
long label; |
|
|
|
define_dollar_label (long label) |
|
|
|
{ |
|
|
|
long *i; |
|
|
|
|
|
|
|
@ -1419,9 +1377,8 @@ define_dollar_label (label) |
|
|
|
of ^A. */ |
|
|
|
|
|
|
|
char * /* Return local label name. */ |
|
|
|
dollar_label_name (n, augend) |
|
|
|
register long n; /* we just saw "n$:" : n a number. */ |
|
|
|
register int augend; /* 0 for current instance, 1 for new instance. */ |
|
|
|
dollar_label_name (register long n, /* we just saw "n$:" : n a number. */ |
|
|
|
register int augend /* 0 for current instance, 1 for new instance. */) |
|
|
|
{ |
|
|
|
long i; |
|
|
|
/* Returned to caller, then copied. Used for created names ("4f"). */ |
|
|
|
@ -1493,7 +1450,7 @@ static long fb_label_max; |
|
|
|
#define FB_LABEL_BUMP_BY (FB_LABEL_SPECIAL + 6) |
|
|
|
|
|
|
|
static void |
|
|
|
fb_label_init () |
|
|
|
fb_label_init (void) |
|
|
|
{ |
|
|
|
memset ((void *) fb_low_counter, '\0', sizeof (fb_low_counter)); |
|
|
|
} |
|
|
|
@ -1501,8 +1458,7 @@ fb_label_init () |
|
|
|
/* Add one to the instance number of this fb label. */ |
|
|
|
|
|
|
|
void |
|
|
|
fb_label_instance_inc (label) |
|
|
|
long label; |
|
|
|
fb_label_instance_inc (long label) |
|
|
|
{ |
|
|
|
long *i; |
|
|
|
|
|
|
|
@ -1550,8 +1506,7 @@ fb_label_instance_inc (label) |
|
|
|
} |
|
|
|
|
|
|
|
static long |
|
|
|
fb_label_instance (label) |
|
|
|
long label; |
|
|
|
fb_label_instance (long label) |
|
|
|
{ |
|
|
|
long *i; |
|
|
|
|
|
|
|
@ -1589,9 +1544,8 @@ fb_label_instance (label) |
|
|
|
place of ^B. */ |
|
|
|
|
|
|
|
char * /* Return local label name. */ |
|
|
|
fb_label_name (n, augend) |
|
|
|
long n; /* We just saw "n:", "nf" or "nb" : n a number. */ |
|
|
|
long augend; /* 0 for nb, 1 for n:, nf. */ |
|
|
|
fb_label_name (long n, /* We just saw "n:", "nf" or "nb" : n a number. */ |
|
|
|
long augend /* 0 for nb, 1 for n:, nf. */) |
|
|
|
{ |
|
|
|
long i; |
|
|
|
/* Returned to caller, then copied. Used for created names ("4f"). */ |
|
|
|
@ -1639,8 +1593,7 @@ fb_label_name (n, augend) |
|
|
|
unaltered. This is used for error messages. */ |
|
|
|
|
|
|
|
char * |
|
|
|
decode_local_label_name (s) |
|
|
|
char *s; |
|
|
|
decode_local_label_name (char *s) |
|
|
|
{ |
|
|
|
char *p; |
|
|
|
char *symbol_decode; |
|
|
|
@ -1681,8 +1634,7 @@ decode_local_label_name (s) |
|
|
|
/* Get the value of a symbol. */ |
|
|
|
|
|
|
|
valueT |
|
|
|
S_GET_VALUE (s) |
|
|
|
symbolS *s; |
|
|
|
S_GET_VALUE (symbolS *s) |
|
|
|
{ |
|
|
|
#ifdef BFD_ASSEMBLER |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
@ -1718,9 +1670,7 @@ S_GET_VALUE (s) |
|
|
|
/* Set the value of a symbol. */ |
|
|
|
|
|
|
|
void |
|
|
|
S_SET_VALUE (s, val) |
|
|
|
symbolS *s; |
|
|
|
valueT val; |
|
|
|
S_SET_VALUE (symbolS *s, valueT val) |
|
|
|
{ |
|
|
|
#ifdef BFD_ASSEMBLER |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
@ -1736,8 +1686,7 @@ S_SET_VALUE (s, val) |
|
|
|
} |
|
|
|
|
|
|
|
void |
|
|
|
copy_symbol_attributes (dest, src) |
|
|
|
symbolS *dest, *src; |
|
|
|
copy_symbol_attributes (symbolS *dest, symbolS *src) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (dest)) |
|
|
|
dest = local_symbol_convert ((struct local_symbol *) dest); |
|
|
|
@ -1759,8 +1708,7 @@ copy_symbol_attributes (dest, src) |
|
|
|
#ifdef BFD_ASSEMBLER |
|
|
|
|
|
|
|
int |
|
|
|
S_IS_FUNCTION (s) |
|
|
|
symbolS *s; |
|
|
|
S_IS_FUNCTION (symbolS *s) |
|
|
|
{ |
|
|
|
flagword flags; |
|
|
|
|
|
|
|
@ -1773,8 +1721,7 @@ S_IS_FUNCTION (s) |
|
|
|
} |
|
|
|
|
|
|
|
int |
|
|
|
S_IS_EXTERNAL (s) |
|
|
|
symbolS *s; |
|
|
|
S_IS_EXTERNAL (symbolS *s) |
|
|
|
{ |
|
|
|
flagword flags; |
|
|
|
|
|
|
|
@ -1791,8 +1738,7 @@ S_IS_EXTERNAL (s) |
|
|
|
} |
|
|
|
|
|
|
|
int |
|
|
|
S_IS_WEAK (s) |
|
|
|
symbolS *s; |
|
|
|
S_IS_WEAK (symbolS *s) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
return 0; |
|
|
|
@ -1800,8 +1746,7 @@ S_IS_WEAK (s) |
|
|
|
} |
|
|
|
|
|
|
|
int |
|
|
|
S_IS_COMMON (s) |
|
|
|
symbolS *s; |
|
|
|
S_IS_COMMON (symbolS *s) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
return 0; |
|
|
|
@ -1809,8 +1754,7 @@ S_IS_COMMON (s) |
|
|
|
} |
|
|
|
|
|
|
|
int |
|
|
|
S_IS_DEFINED (s) |
|
|
|
symbolS *s; |
|
|
|
S_IS_DEFINED (symbolS *s) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
return ((struct local_symbol *) s)->lsy_section != undefined_section; |
|
|
|
@ -1826,9 +1770,7 @@ S_IS_DEFINED (s) |
|
|
|
symbols or eliminated from expressions, because they may be |
|
|
|
overridden by the linker. */ |
|
|
|
int |
|
|
|
S_FORCE_RELOC (s, strict) |
|
|
|
symbolS *s; |
|
|
|
int strict; |
|
|
|
S_FORCE_RELOC (symbolS *s, int strict) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
return ((struct local_symbol *) s)->lsy_section == undefined_section; |
|
|
|
@ -1842,8 +1784,7 @@ S_FORCE_RELOC (s, strict) |
|
|
|
} |
|
|
|
|
|
|
|
int |
|
|
|
S_IS_DEBUG (s) |
|
|
|
symbolS *s; |
|
|
|
S_IS_DEBUG (symbolS *s) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
return 0; |
|
|
|
@ -1853,8 +1794,7 @@ S_IS_DEBUG (s) |
|
|
|
} |
|
|
|
|
|
|
|
int |
|
|
|
S_IS_LOCAL (s) |
|
|
|
symbolS *s; |
|
|
|
S_IS_LOCAL (symbolS *s) |
|
|
|
{ |
|
|
|
flagword flags; |
|
|
|
const char *name; |
|
|
|
@ -1889,22 +1829,19 @@ S_IS_LOCAL (s) |
|
|
|
} |
|
|
|
|
|
|
|
int |
|
|
|
S_IS_EXTERN (s) |
|
|
|
symbolS *s; |
|
|
|
S_IS_EXTERN (symbolS *s) |
|
|
|
{ |
|
|
|
return S_IS_EXTERNAL (s); |
|
|
|
} |
|
|
|
|
|
|
|
int |
|
|
|
S_IS_STABD (s) |
|
|
|
symbolS *s; |
|
|
|
S_IS_STABD (symbolS *s) |
|
|
|
{ |
|
|
|
return S_GET_NAME (s) == 0; |
|
|
|
} |
|
|
|
|
|
|
|
const char * |
|
|
|
S_GET_NAME (s) |
|
|
|
symbolS *s; |
|
|
|
S_GET_NAME (symbolS *s) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
return ((struct local_symbol *) s)->lsy_name; |
|
|
|
@ -1912,8 +1849,7 @@ S_GET_NAME (s) |
|
|
|
} |
|
|
|
|
|
|
|
segT |
|
|
|
S_GET_SEGMENT (s) |
|
|
|
symbolS *s; |
|
|
|
S_GET_SEGMENT (symbolS *s) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
return ((struct local_symbol *) s)->lsy_section; |
|
|
|
@ -1921,9 +1857,7 @@ S_GET_SEGMENT (s) |
|
|
|
} |
|
|
|
|
|
|
|
void |
|
|
|
S_SET_SEGMENT (s, seg) |
|
|
|
symbolS *s; |
|
|
|
segT seg; |
|
|
|
S_SET_SEGMENT (symbolS *s, segT seg) |
|
|
|
{ |
|
|
|
/* Don't reassign section symbols. The direct reason is to prevent seg
|
|
|
|
faults assigning back to const global symbols such as *ABS*, but it |
|
|
|
@ -1950,8 +1884,7 @@ S_SET_SEGMENT (s, seg) |
|
|
|
} |
|
|
|
|
|
|
|
void |
|
|
|
S_SET_EXTERNAL (s) |
|
|
|
symbolS *s; |
|
|
|
S_SET_EXTERNAL (symbolS *s) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
s = local_symbol_convert ((struct local_symbol *) s); |
|
|
|
@ -1976,8 +1909,7 @@ S_SET_EXTERNAL (s) |
|
|
|
} |
|
|
|
|
|
|
|
void |
|
|
|
S_CLEAR_EXTERNAL (s) |
|
|
|
symbolS *s; |
|
|
|
S_CLEAR_EXTERNAL (symbolS *s) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
return; |
|
|
|
@ -1991,8 +1923,7 @@ S_CLEAR_EXTERNAL (s) |
|
|
|
} |
|
|
|
|
|
|
|
void |
|
|
|
S_SET_WEAK (s) |
|
|
|
symbolS *s; |
|
|
|
S_SET_WEAK (symbolS *s) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
s = local_symbol_convert ((struct local_symbol *) s); |
|
|
|
@ -2001,8 +1932,7 @@ S_SET_WEAK (s) |
|
|
|
} |
|
|
|
|
|
|
|
void |
|
|
|
S_SET_THREAD_LOCAL (s) |
|
|
|
symbolS *s; |
|
|
|
S_SET_THREAD_LOCAL (symbolS *s) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
s = local_symbol_convert ((struct local_symbol *) s); |
|
|
|
@ -2020,9 +1950,7 @@ S_SET_THREAD_LOCAL (s) |
|
|
|
} |
|
|
|
|
|
|
|
void |
|
|
|
S_SET_NAME (s, name) |
|
|
|
symbolS *s; |
|
|
|
char *name; |
|
|
|
S_SET_NAME (symbolS *s, char *name) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
{ |
|
|
|
@ -2038,8 +1966,7 @@ S_SET_NAME (s, name) |
|
|
|
/* Return the previous symbol in a chain. */ |
|
|
|
|
|
|
|
symbolS * |
|
|
|
symbol_previous (s) |
|
|
|
symbolS *s; |
|
|
|
symbol_previous (symbolS *s) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
abort (); |
|
|
|
@ -2051,8 +1978,7 @@ symbol_previous (s) |
|
|
|
/* Return the next symbol in a chain. */ |
|
|
|
|
|
|
|
symbolS * |
|
|
|
symbol_next (s) |
|
|
|
symbolS *s; |
|
|
|
symbol_next (symbolS *s) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
abort (); |
|
|
|
@ -2062,8 +1988,7 @@ symbol_next (s) |
|
|
|
/* Return a pointer to the value of a symbol as an expression. */ |
|
|
|
|
|
|
|
expressionS * |
|
|
|
symbol_get_value_expression (s) |
|
|
|
symbolS *s; |
|
|
|
symbol_get_value_expression (symbolS *s) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
s = local_symbol_convert ((struct local_symbol *) s); |
|
|
|
@ -2073,9 +1998,7 @@ symbol_get_value_expression (s) |
|
|
|
/* Set the value of a symbol to an expression. */ |
|
|
|
|
|
|
|
void |
|
|
|
symbol_set_value_expression (s, exp) |
|
|
|
symbolS *s; |
|
|
|
const expressionS *exp; |
|
|
|
symbol_set_value_expression (symbolS *s, const expressionS *exp) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
s = local_symbol_convert ((struct local_symbol *) s); |
|
|
|
@ -2085,8 +2008,7 @@ symbol_set_value_expression (s, exp) |
|
|
|
/* Set the value of SYM to the current position in the current segment. */ |
|
|
|
|
|
|
|
void |
|
|
|
symbol_set_value_now (sym) |
|
|
|
symbolS *sym; |
|
|
|
symbol_set_value_now (symbolS *sym) |
|
|
|
{ |
|
|
|
S_SET_SEGMENT (sym, now_seg); |
|
|
|
S_SET_VALUE (sym, frag_now_fix ()); |
|
|
|
@ -2096,9 +2018,7 @@ symbol_set_value_now (sym) |
|
|
|
/* Set the frag of a symbol. */ |
|
|
|
|
|
|
|
void |
|
|
|
symbol_set_frag (s, f) |
|
|
|
symbolS *s; |
|
|
|
fragS *f; |
|
|
|
symbol_set_frag (symbolS *s, fragS *f) |
|
|
|
{ |
|
|
|
#ifdef BFD_ASSEMBLER |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
@ -2113,8 +2033,7 @@ symbol_set_frag (s, f) |
|
|
|
/* Return the frag of a symbol. */ |
|
|
|
|
|
|
|
fragS * |
|
|
|
symbol_get_frag (s) |
|
|
|
symbolS *s; |
|
|
|
symbol_get_frag (symbolS *s) |
|
|
|
{ |
|
|
|
#ifdef BFD_ASSEMBLER |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
@ -2126,8 +2045,7 @@ symbol_get_frag (s) |
|
|
|
/* Mark a symbol as having been used. */ |
|
|
|
|
|
|
|
void |
|
|
|
symbol_mark_used (s) |
|
|
|
symbolS *s; |
|
|
|
symbol_mark_used (symbolS *s) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
return; |
|
|
|
@ -2137,8 +2055,7 @@ symbol_mark_used (s) |
|
|
|
/* Clear the mark of whether a symbol has been used. */ |
|
|
|
|
|
|
|
void |
|
|
|
symbol_clear_used (s) |
|
|
|
symbolS *s; |
|
|
|
symbol_clear_used (symbolS *s) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
s = local_symbol_convert ((struct local_symbol *) s); |
|
|
|
@ -2148,8 +2065,7 @@ symbol_clear_used (s) |
|
|
|
/* Return whether a symbol has been used. */ |
|
|
|
|
|
|
|
int |
|
|
|
symbol_used_p (s) |
|
|
|
symbolS *s; |
|
|
|
symbol_used_p (symbolS *s) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
return 1; |
|
|
|
@ -2159,8 +2075,7 @@ symbol_used_p (s) |
|
|
|
/* Mark a symbol as having been used in a reloc. */ |
|
|
|
|
|
|
|
void |
|
|
|
symbol_mark_used_in_reloc (s) |
|
|
|
symbolS *s; |
|
|
|
symbol_mark_used_in_reloc (symbolS *s) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
s = local_symbol_convert ((struct local_symbol *) s); |
|
|
|
@ -2170,8 +2085,7 @@ symbol_mark_used_in_reloc (s) |
|
|
|
/* Clear the mark of whether a symbol has been used in a reloc. */ |
|
|
|
|
|
|
|
void |
|
|
|
symbol_clear_used_in_reloc (s) |
|
|
|
symbolS *s; |
|
|
|
symbol_clear_used_in_reloc (symbolS *s) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
return; |
|
|
|
@ -2181,8 +2095,7 @@ symbol_clear_used_in_reloc (s) |
|
|
|
/* Return whether a symbol has been used in a reloc. */ |
|
|
|
|
|
|
|
int |
|
|
|
symbol_used_in_reloc_p (s) |
|
|
|
symbolS *s; |
|
|
|
symbol_used_in_reloc_p (symbolS *s) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
return 0; |
|
|
|
@ -2192,8 +2105,7 @@ symbol_used_in_reloc_p (s) |
|
|
|
/* Mark a symbol as an MRI common symbol. */ |
|
|
|
|
|
|
|
void |
|
|
|
symbol_mark_mri_common (s) |
|
|
|
symbolS *s; |
|
|
|
symbol_mark_mri_common (symbolS *s) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
s = local_symbol_convert ((struct local_symbol *) s); |
|
|
|
@ -2203,8 +2115,7 @@ symbol_mark_mri_common (s) |
|
|
|
/* Clear the mark of whether a symbol is an MRI common symbol. */ |
|
|
|
|
|
|
|
void |
|
|
|
symbol_clear_mri_common (s) |
|
|
|
symbolS *s; |
|
|
|
symbol_clear_mri_common (symbolS *s) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
return; |
|
|
|
@ -2214,8 +2125,7 @@ symbol_clear_mri_common (s) |
|
|
|
/* Return whether a symbol is an MRI common symbol. */ |
|
|
|
|
|
|
|
int |
|
|
|
symbol_mri_common_p (s) |
|
|
|
symbolS *s; |
|
|
|
symbol_mri_common_p (symbolS *s) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
return 0; |
|
|
|
@ -2225,8 +2135,7 @@ symbol_mri_common_p (s) |
|
|
|
/* Mark a symbol as having been written. */ |
|
|
|
|
|
|
|
void |
|
|
|
symbol_mark_written (s) |
|
|
|
symbolS *s; |
|
|
|
symbol_mark_written (symbolS *s) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
return; |
|
|
|
@ -2236,8 +2145,7 @@ symbol_mark_written (s) |
|
|
|
/* Clear the mark of whether a symbol has been written. */ |
|
|
|
|
|
|
|
void |
|
|
|
symbol_clear_written (s) |
|
|
|
symbolS *s; |
|
|
|
symbol_clear_written (symbolS *s) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
return; |
|
|
|
@ -2247,8 +2155,7 @@ symbol_clear_written (s) |
|
|
|
/* Return whether a symbol has been written. */ |
|
|
|
|
|
|
|
int |
|
|
|
symbol_written_p (s) |
|
|
|
symbolS *s; |
|
|
|
symbol_written_p (symbolS *s) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
return 0; |
|
|
|
@ -2258,8 +2165,7 @@ symbol_written_p (s) |
|
|
|
/* Mark a symbol has having been resolved. */ |
|
|
|
|
|
|
|
void |
|
|
|
symbol_mark_resolved (s) |
|
|
|
symbolS *s; |
|
|
|
symbol_mark_resolved (symbolS *s) |
|
|
|
{ |
|
|
|
#ifdef BFD_ASSEMBLER |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
@ -2274,8 +2180,7 @@ symbol_mark_resolved (s) |
|
|
|
/* Return whether a symbol has been resolved. */ |
|
|
|
|
|
|
|
int |
|
|
|
symbol_resolved_p (s) |
|
|
|
symbolS *s; |
|
|
|
symbol_resolved_p (symbolS *s) |
|
|
|
{ |
|
|
|
#ifdef BFD_ASSEMBLER |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
@ -2287,8 +2192,7 @@ symbol_resolved_p (s) |
|
|
|
/* Return whether a symbol is a section symbol. */ |
|
|
|
|
|
|
|
int |
|
|
|
symbol_section_p (s) |
|
|
|
symbolS *s ATTRIBUTE_UNUSED; |
|
|
|
symbol_section_p (symbolS *s ATTRIBUTE_UNUSED) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
return 0; |
|
|
|
@ -2303,8 +2207,7 @@ symbol_section_p (s) |
|
|
|
/* Return whether a symbol is equated to another symbol. */ |
|
|
|
|
|
|
|
int |
|
|
|
symbol_equated_p (s) |
|
|
|
symbolS *s; |
|
|
|
symbol_equated_p (symbolS *s) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
return 0; |
|
|
|
@ -2315,8 +2218,7 @@ symbol_equated_p (s) |
|
|
|
treated specially when writing out relocs. */ |
|
|
|
|
|
|
|
int |
|
|
|
symbol_equated_reloc_p (s) |
|
|
|
symbolS *s; |
|
|
|
symbol_equated_reloc_p (symbolS *s) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
return 0; |
|
|
|
@ -2332,8 +2234,7 @@ symbol_equated_reloc_p (s) |
|
|
|
/* Return whether a symbol has a constant value. */ |
|
|
|
|
|
|
|
int |
|
|
|
symbol_constant_p (s) |
|
|
|
symbolS *s; |
|
|
|
symbol_constant_p (symbolS *s) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
return 1; |
|
|
|
@ -2345,8 +2246,7 @@ symbol_constant_p (s) |
|
|
|
/* Return the BFD symbol for a symbol. */ |
|
|
|
|
|
|
|
asymbol * |
|
|
|
symbol_get_bfdsym (s) |
|
|
|
symbolS *s; |
|
|
|
symbol_get_bfdsym (symbolS *s) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
s = local_symbol_convert ((struct local_symbol *) s); |
|
|
|
@ -2356,9 +2256,7 @@ symbol_get_bfdsym (s) |
|
|
|
/* Set the BFD symbol for a symbol. */ |
|
|
|
|
|
|
|
void |
|
|
|
symbol_set_bfdsym (s, bsym) |
|
|
|
symbolS *s; |
|
|
|
asymbol *bsym; |
|
|
|
symbol_set_bfdsym (symbolS *s, asymbol *bsym) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
s = local_symbol_convert ((struct local_symbol *) s); |
|
|
|
@ -2372,8 +2270,7 @@ symbol_set_bfdsym (s, bsym) |
|
|
|
/* Get a pointer to the object format information for a symbol. */ |
|
|
|
|
|
|
|
OBJ_SYMFIELD_TYPE * |
|
|
|
symbol_get_obj (s) |
|
|
|
symbolS *s; |
|
|
|
symbol_get_obj (symbolS *s) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
s = local_symbol_convert ((struct local_symbol *) s); |
|
|
|
@ -2383,9 +2280,7 @@ symbol_get_obj (s) |
|
|
|
/* Set the object format information for a symbol. */ |
|
|
|
|
|
|
|
void |
|
|
|
symbol_set_obj (s, o) |
|
|
|
symbolS *s; |
|
|
|
OBJ_SYMFIELD_TYPE *o; |
|
|
|
symbol_set_obj (symbolS *s, OBJ_SYMFIELD_TYPE *o) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
s = local_symbol_convert ((struct local_symbol *) s); |
|
|
|
@ -2399,8 +2294,7 @@ symbol_set_obj (s, o) |
|
|
|
/* Get a pointer to the processor information for a symbol. */ |
|
|
|
|
|
|
|
TC_SYMFIELD_TYPE * |
|
|
|
symbol_get_tc (s) |
|
|
|
symbolS *s; |
|
|
|
symbol_get_tc (symbolS *s) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
s = local_symbol_convert ((struct local_symbol *) s); |
|
|
|
@ -2410,9 +2304,7 @@ symbol_get_tc (s) |
|
|
|
/* Set the processor information for a symbol. */ |
|
|
|
|
|
|
|
void |
|
|
|
symbol_set_tc (s, o) |
|
|
|
symbolS *s; |
|
|
|
TC_SYMFIELD_TYPE *o; |
|
|
|
symbol_set_tc (symbolS *s, TC_SYMFIELD_TYPE *o) |
|
|
|
{ |
|
|
|
if (LOCAL_SYMBOL_CHECK (s)) |
|
|
|
s = local_symbol_convert ((struct local_symbol *) s); |
|
|
|
@ -2422,7 +2314,7 @@ symbol_set_tc (s, o) |
|
|
|
#endif /* TC_SYMFIELD_TYPE */ |
|
|
|
|
|
|
|
void |
|
|
|
symbol_begin () |
|
|
|
symbol_begin (void) |
|
|
|
{ |
|
|
|
symbol_lastP = NULL; |
|
|
|
symbol_rootP = NULL; /* In case we have 0 symbols (!!) */ |
|
|
|
@ -2456,7 +2348,7 @@ int max_indent_level = 8; |
|
|
|
#if 0 |
|
|
|
|
|
|
|
static void |
|
|
|
indent () |
|
|
|
indent (void) |
|
|
|
{ |
|
|
|
printf ("%*s", indent_level * 4, ""); |
|
|
|
} |
|
|
|
@ -2464,9 +2356,7 @@ indent () |
|
|
|
#endif |
|
|
|
|
|
|
|
void |
|
|
|
print_symbol_value_1 (file, sym) |
|
|
|
FILE *file; |
|
|
|
symbolS *sym; |
|
|
|
print_symbol_value_1 (FILE *file, symbolS *sym) |
|
|
|
{ |
|
|
|
const char *name = S_GET_NAME (sym); |
|
|
|
if (!name || !name[0]) |
|
|
|
@ -2536,8 +2426,7 @@ print_symbol_value_1 (file, sym) |
|
|
|
} |
|
|
|
|
|
|
|
void |
|
|
|
print_symbol_value (sym) |
|
|
|
symbolS *sym; |
|
|
|
print_symbol_value (symbolS *sym) |
|
|
|
{ |
|
|
|
indent_level = 0; |
|
|
|
print_symbol_value_1 (stderr, sym); |
|
|
|
@ -2545,10 +2434,7 @@ print_symbol_value (sym) |
|
|
|
} |
|
|
|
|
|
|
|
static void |
|
|
|
print_binary (file, name, exp) |
|
|
|
FILE *file; |
|
|
|
const char *name; |
|
|
|
expressionS *exp; |
|
|
|
print_binary (FILE *file, const char *name, expressionS *exp) |
|
|
|
{ |
|
|
|
indent_level++; |
|
|
|
fprintf (file, "%s\n%*s<", name, indent_level * 4, ""); |
|
|
|
@ -2560,9 +2446,7 @@ print_binary (file, name, exp) |
|
|
|
} |
|
|
|
|
|
|
|
void |
|
|
|
print_expr_1 (file, exp) |
|
|
|
FILE *file; |
|
|
|
expressionS *exp; |
|
|
|
print_expr_1 (FILE *file, expressionS *exp) |
|
|
|
{ |
|
|
|
fprintf (file, "expr %lx ", (long) exp); |
|
|
|
switch (exp->X_op) |
|
|
|
@ -2674,16 +2558,14 @@ print_expr_1 (file, exp) |
|
|
|
} |
|
|
|
|
|
|
|
void |
|
|
|
print_expr (exp) |
|
|
|
expressionS *exp; |
|
|
|
print_expr (expressionS *exp) |
|
|
|
{ |
|
|
|
print_expr_1 (stderr, exp); |
|
|
|
fprintf (stderr, "\n"); |
|
|
|
} |
|
|
|
|
|
|
|
void |
|
|
|
symbol_print_statistics (file) |
|
|
|
FILE *file; |
|
|
|
symbol_print_statistics (FILE *file) |
|
|
|
{ |
|
|
|
hash_print_statistics (file, "symbol table", sy_hash); |
|
|
|
#ifdef BFD_ASSEMBLER |
|
|
|
|