gas/testsuite/
[deliverable/binutils-gdb.git] / gas / symbols.h
CommitLineData
252b5132 1/* symbols.h -
9758f3fc 2 Copyright 1987, 1990, 1992, 1993, 1994, 1995, 1997, 1999, 2000, 2001,
ec2655a6 3 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
252b5132
RH
4
5 This file is part of GAS, the GNU Assembler.
6
7 GAS is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
ec2655a6 9 the Free Software Foundation; either version 3, or (at your option)
252b5132
RH
10 any later version.
11
12 GAS is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GAS; see the file COPYING. If not, write to the Free
4b4da160
NC
19 Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
20 02110-1301, USA. */
252b5132 21
a01b9fa4 22extern struct obstack notes; /* eg FixS live here. */
252b5132
RH
23
24extern struct obstack cond_obstack; /* this is where we track .ifdef/.endif
25 (if we do that at all). */
26
27extern symbolS *symbol_rootP; /* all the symbol nodes */
28extern symbolS *symbol_lastP; /* last struct symbol we made, or NULL */
29
30extern symbolS abs_symbol;
31
32extern int symbol_table_frozen;
33
34/* This is non-zero if symbols are case sensitive, which is the
35 default. */
36extern int symbols_case_sensitive;
37
280d71bf
DB
38char * symbol_relc_make_expr (expressionS *);
39char * symbol_relc_make_sym (symbolS *);
40char * symbol_relc_make_value (offsetT);
74937d39
KH
41char *decode_local_label_name (char *s);
42symbolS *symbol_find (const char *name);
06e77878 43symbolS *symbol_find_noref (const char *name, int noref);
74937d39 44symbolS *symbol_find_exact (const char *name);
06e77878 45symbolS *symbol_find_exact_noref (const char *name, int noref);
74937d39
KH
46symbolS *symbol_find_or_make (const char *name);
47symbolS *symbol_make (const char *name);
48symbolS *symbol_new (const char *name, segT segment, valueT value,
49 fragS * frag);
50symbolS *symbol_create (const char *name, segT segment, valueT value,
51 fragS * frag);
9497f5ac
NC
52symbolS *symbol_clone (symbolS *, int);
53#undef symbol_clone_if_forward_ref
54symbolS *symbol_clone_if_forward_ref (symbolS *, int);
55#define symbol_clone_if_forward_ref(s) symbol_clone_if_forward_ref (s, 0)
74937d39
KH
56symbolS *symbol_temp_new (segT, valueT, fragS *);
57symbolS *symbol_temp_new_now (void);
58symbolS *symbol_temp_make (void);
59
60symbolS *colon (const char *sym_name);
61void local_colon (int n);
62void symbol_begin (void);
63void symbol_print_statistics (FILE *);
64void symbol_table_insert (symbolS * symbolP);
65valueT resolve_symbol_value (symbolS *);
66void resolve_local_symbol_values (void);
2e1e12b1 67int snapshot_symbol (symbolS **, valueT *, segT *, fragS **);
74937d39
KH
68
69void print_symbol_value (symbolS *);
70void print_expr (expressionS *);
71void print_expr_1 (FILE *, expressionS *);
72void print_symbol_value_1 (FILE *, symbolS *);
73
74int dollar_label_defined (long l);
75void dollar_label_clear (void);
76void define_dollar_label (long l);
77char *dollar_label_name (long l, int augend);
78
79void fb_label_instance_inc (long label);
80char *fb_label_name (long n, long augend);
81
82extern void copy_symbol_attributes (symbolS *, symbolS *);
252b5132
RH
83
84/* Get and set the values of symbols. These used to be macros. */
74937d39
KH
85extern valueT S_GET_VALUE (symbolS *);
86extern void S_SET_VALUE (symbolS *, valueT);
252b5132 87
74937d39
KH
88extern int S_IS_FUNCTION (symbolS *);
89extern int S_IS_EXTERNAL (symbolS *);
90extern int S_IS_WEAK (symbolS *);
06e77878
AO
91extern int S_IS_WEAKREFR (symbolS *);
92extern int S_IS_WEAKREFD (symbolS *);
74937d39
KH
93extern int S_IS_COMMON (symbolS *);
94extern int S_IS_DEFINED (symbolS *);
95extern int S_FORCE_RELOC (symbolS *, int);
96extern int S_IS_DEBUG (symbolS *);
97extern int S_IS_LOCAL (symbolS *);
74937d39 98extern int S_IS_STABD (symbolS *);
9497f5ac
NC
99extern int S_IS_VOLATILE (const symbolS *);
100extern int S_IS_FORWARD_REF (const symbolS *);
74937d39
KH
101extern const char *S_GET_NAME (symbolS *);
102extern segT S_GET_SEGMENT (symbolS *);
103extern void S_SET_SEGMENT (symbolS *, segT);
104extern void S_SET_EXTERNAL (symbolS *);
977cdf5a 105extern void S_SET_NAME (symbolS *, const char *);
74937d39
KH
106extern void S_CLEAR_EXTERNAL (symbolS *);
107extern void S_SET_WEAK (symbolS *);
06e77878
AO
108extern void S_SET_WEAKREFR (symbolS *);
109extern void S_CLEAR_WEAKREFR (symbolS *);
110extern void S_SET_WEAKREFD (symbolS *);
111extern void S_CLEAR_WEAKREFD (symbolS *);
74937d39 112extern void S_SET_THREAD_LOCAL (symbolS *);
9497f5ac 113extern void S_SET_VOLATILE (symbolS *);
92757bc9 114extern void S_CLEAR_VOLATILE (symbolS *);
9497f5ac 115extern void S_SET_FORWARD_REF (symbolS *);
252b5132 116
49309057
ILT
117#ifndef WORKING_DOT_WORD
118struct broken_word
119 {
120 /* Linked list -- one of these structures per ".word x-y+C"
121 expression. */
122 struct broken_word *next_broken_word;
123 /* Segment and subsegment for broken word. */
124 segT seg;
125 subsegT subseg;
126 /* Which frag is this broken word in? */
127 fragS *frag;
128 /* Where in the frag is it? */
129 char *word_goes_here;
130 /* Where to add the break. */
131 fragS *dispfrag; /* where to add the break */
132 /* Operands of expression. */
133 symbolS *add;
134 symbolS *sub;
135 offsetT addnum;
136
47eebc20 137 int added; /* nasty thing happened yet? */
49309057
ILT
138 /* 1: added and has a long-jump */
139 /* 2: added but uses someone elses long-jump */
140
141 /* Pointer to broken_word with a similar long-jump. */
142 struct broken_word *use_jump;
143 };
144extern struct broken_word *broken_words;
145#endif /* ndef WORKING_DOT_WORD */
146
147/*
148 * Current means for getting from symbols to segments and vice verse.
149 * This will change for infinite-segments support (e.g. COFF).
150 */
151extern const segT N_TYPE_seg[]; /* subseg.c */
152
153#define SEGMENT_TO_SYMBOL_TYPE(seg) ( seg_N_TYPE [(int) (seg)] )
154extern const short seg_N_TYPE[];/* subseg.c */
155
156#define N_REGISTER 30 /* Fake N_TYPE value for SEG_REGISTER */
157
74937d39 158void symbol_clear_list_pointers (symbolS * symbolP);
49309057 159
74937d39
KH
160void symbol_insert (symbolS * addme, symbolS * target,
161 symbolS ** rootP, symbolS ** lastP);
162void symbol_remove (symbolS * symbolP, symbolS ** rootP,
163 symbolS ** lastP);
49309057 164
74937d39 165extern symbolS *symbol_previous (symbolS *);
49309057 166
74937d39 167void verify_symbol_chain (symbolS * rootP, symbolS * lastP);
74937d39
KH
168
169void symbol_append (symbolS * addme, symbolS * target,
170 symbolS ** rootP, symbolS ** lastP);
171
172extern symbolS *symbol_next (symbolS *);
173
174extern expressionS *symbol_get_value_expression (symbolS *);
175extern void symbol_set_value_expression (symbolS *, const expressionS *);
514d955d 176extern offsetT *symbol_X_add_number (symbolS *);
74937d39
KH
177extern void symbol_set_value_now (symbolS *);
178extern void symbol_set_frag (symbolS *, fragS *);
179extern fragS *symbol_get_frag (symbolS *);
180extern void symbol_mark_used (symbolS *);
181extern void symbol_clear_used (symbolS *);
182extern int symbol_used_p (symbolS *);
183extern void symbol_mark_used_in_reloc (symbolS *);
184extern void symbol_clear_used_in_reloc (symbolS *);
185extern int symbol_used_in_reloc_p (symbolS *);
186extern void symbol_mark_mri_common (symbolS *);
187extern void symbol_clear_mri_common (symbolS *);
188extern int symbol_mri_common_p (symbolS *);
189extern void symbol_mark_written (symbolS *);
190extern void symbol_clear_written (symbolS *);
191extern int symbol_written_p (symbolS *);
192extern void symbol_mark_resolved (symbolS *);
193extern int symbol_resolved_p (symbolS *);
194extern int symbol_section_p (symbolS *);
195extern int symbol_equated_p (symbolS *);
196extern int symbol_equated_reloc_p (symbolS *);
197extern int symbol_constant_p (symbolS *);
bdf128d6 198extern int symbol_shadow_p (symbolS *);
74937d39
KH
199extern asymbol *symbol_get_bfdsym (symbolS *);
200extern void symbol_set_bfdsym (symbolS *, asymbol *);
49309057
ILT
201
202#ifdef OBJ_SYMFIELD_TYPE
74937d39
KH
203OBJ_SYMFIELD_TYPE *symbol_get_obj (symbolS *);
204void symbol_set_obj (symbolS *, OBJ_SYMFIELD_TYPE *);
49309057
ILT
205#endif
206
207#ifdef TC_SYMFIELD_TYPE
74937d39
KH
208TC_SYMFIELD_TYPE *symbol_get_tc (symbolS *);
209void symbol_set_tc (symbolS *, TC_SYMFIELD_TYPE *);
49309057 210#endif
This page took 0.443882 seconds and 4 git commands to generate.