diff options
author | Nick Clifton <nickc@redhat.com> | 2005-10-11 11:16:17 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2005-10-11 11:16:17 +0000 |
commit | 9497f5ac6bc10bdd65ea471787619bde1edca77d (patch) | |
tree | 7f36b3cb6f0d84b058dfba51242bd900edde9503 /gas/symbols.h | |
parent | 1334d4d50c52bc295dace4982442369838f478b3 (diff) | |
download | gdb-9497f5ac6bc10bdd65ea471787619bde1edca77d.zip gdb-9497f5ac6bc10bdd65ea471787619bde1edca77d.tar.gz gdb-9497f5ac6bc10bdd65ea471787619bde1edca77d.tar.bz2 |
This adjusts equate handling by
- allowing true forward references (which will always assume the referenced
symbols have at the point of use) through the new .eqv pseudo-op and the
new == operator
- disallowing changing .equiv-generated equates (so that the protection this
provides is both forward and backward)
- snapshotting equates when their value gets changed so that previous uses
don't get affected by the new value.
- allowing expressions in places where absolute expressions (or register
names) are needed which were not completely resolvable at the point of
their definition but which are fully resolvable at the point of use
In addition it fixes PR/288.
Diffstat (limited to 'gas/symbols.h')
-rw-r--r-- | gas/symbols.h | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/gas/symbols.h b/gas/symbols.h index 3d029ff..c20f4d7 100644 --- a/gas/symbols.h +++ b/gas/symbols.h @@ -44,6 +44,10 @@ symbolS *symbol_new (const char *name, segT segment, valueT value, fragS * frag); symbolS *symbol_create (const char *name, segT segment, valueT value, fragS * frag); +symbolS *symbol_clone (symbolS *, int); +#undef symbol_clone_if_forward_ref +symbolS *symbol_clone_if_forward_ref (symbolS *, int); +#define symbol_clone_if_forward_ref(s) symbol_clone_if_forward_ref (s, 0) symbolS *symbol_temp_new (segT, valueT, fragS *); symbolS *symbol_temp_new_now (void); symbolS *symbol_temp_make (void); @@ -55,6 +59,7 @@ void symbol_print_statistics (FILE *); void symbol_table_insert (symbolS * symbolP); valueT resolve_symbol_value (symbolS *); void resolve_local_symbol_values (void); +int snapshot_symbol (symbolS *, valueT *, segT *, fragS **); void print_symbol_value (symbolS *); void print_expr (expressionS *); @@ -84,6 +89,8 @@ extern int S_FORCE_RELOC (symbolS *, int); extern int S_IS_DEBUG (symbolS *); extern int S_IS_LOCAL (symbolS *); extern int S_IS_STABD (symbolS *); +extern int S_IS_VOLATILE (const symbolS *); +extern int S_IS_FORWARD_REF (const symbolS *); extern const char *S_GET_NAME (symbolS *); extern segT S_GET_SEGMENT (symbolS *); extern void S_SET_SEGMENT (symbolS *, segT); @@ -92,6 +99,8 @@ extern void S_SET_NAME (symbolS *, const char *); extern void S_CLEAR_EXTERNAL (symbolS *); extern void S_SET_WEAK (symbolS *); extern void S_SET_THREAD_LOCAL (symbolS *); +extern void S_SET_VOLATILE (symbolS *); +extern void S_SET_FORWARD_REF (symbolS *); #ifndef WORKING_DOT_WORD struct broken_word |