OpenCores
URL https://opencores.org/ocsvn/open8_urisc/open8_urisc/trunk

Subversion Repositories open8_urisc

[/] [open8_urisc/] [trunk/] [gnu/] [binutils/] [gas/] [struc-symbol.h] - Blame information for rev 181

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 147 khays
/* struct_symbol.h - Internal symbol structure
2
   Copyright 1987, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2001, 2005,
3
   2007, 2008, 2009 Free Software Foundation, Inc.
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
9
   the Free Software Foundation; either version 3, or (at your option)
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
19
   Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
20
   02110-1301, USA.  */
21
 
22
#ifndef __struc_symbol_h__
23
#define __struc_symbol_h__
24
 
25 166 khays
struct symbol_flags
26 147 khays
{
27 166 khays
  /* Wether the symbol is a local_symbol.  */
28
  unsigned int sy_local_symbol : 1;
29 147 khays
 
30 166 khays
  /* Wether symbol has been written.  */
31
  unsigned int sy_written : 1;
32 147 khays
 
33
  /* Whether symbol value has been completely resolved (used during
34
     final pass over symbol table).  */
35
  unsigned int sy_resolved : 1;
36 166 khays
 
37 147 khays
  /* Whether the symbol value is currently being resolved (used to
38
     detect loops in symbol dependencies).  */
39
  unsigned int sy_resolving : 1;
40 166 khays
 
41 147 khays
  /* Whether the symbol value is used in a reloc.  This is used to
42
     ensure that symbols used in relocs are written out, even if they
43
     are local and would otherwise not be.  */
44
  unsigned int sy_used_in_reloc : 1;
45
 
46
  /* Whether the symbol is used as an operand or in an expression.
47
     NOTE:  Not all the backends keep this information accurate;
48
     backends which use this bit are responsible for setting it when
49
     a symbol is used in backend routines.  */
50
  unsigned int sy_used : 1;
51
 
52
  /* Whether the symbol can be re-defined.  */
53
  unsigned int sy_volatile : 1;
54
 
55
  /* Whether the symbol is a forward reference.  */
56
  unsigned int sy_forward_ref : 1;
57
 
58
  /* This is set if the symbol is defined in an MRI common section.
59
     We handle such sections as single common symbols, so symbols
60
     defined within them must be treated specially by the relocation
61
     routines.  */
62
  unsigned int sy_mri_common : 1;
63
 
64
  /* This is set if the symbol is set with a .weakref directive.  */
65
  unsigned int sy_weakrefr : 1;
66
 
67
  /* This is set when the symbol is referenced as part of a .weakref
68
     directive, but only if the symbol was not in the symbol table
69
     before.  It is cleared as soon as any direct reference to the
70
     symbol is present.  */
71
  unsigned int sy_weakrefd : 1;
72 166 khays
};
73 147 khays
 
74 166 khays
/* The information we keep for a symbol.  Note that the symbol table
75
   holds pointers both to this and to local_symbol structures.  See
76
   below.  */
77
 
78
struct symbol
79
{
80
  /* Symbol flags.  */
81
  struct symbol_flags sy_flags;
82
 
83
  /* BFD symbol */
84
  asymbol *bsym;
85
 
86
  /* The value of the symbol.  */
87
  expressionS sy_value;
88
 
89
  /* Forwards and (optionally) backwards chain pointers.  */
90
  struct symbol *sy_next;
91
  struct symbol *sy_previous;
92
 
93
  /* Pointer to the frag this symbol is attached to, if any.
94
     Otherwise, NULL.  */
95
  struct frag *sy_frag;
96
 
97 147 khays
#ifdef OBJ_SYMFIELD_TYPE
98
  OBJ_SYMFIELD_TYPE sy_obj;
99
#endif
100
 
101
#ifdef TC_SYMFIELD_TYPE
102
  TC_SYMFIELD_TYPE sy_tc;
103
#endif
104
 
105
#ifdef TARGET_SYMBOL_FIELDS
106
  TARGET_SYMBOL_FIELDS
107
#endif
108
};
109
 
110
/* A pointer in the symbol may point to either a complete symbol
111
   (struct symbol above) or to a local symbol (struct local_symbol
112
   defined here).  The symbol code can detect the case by examining
113
   the first field.  It is always NULL for a local symbol.
114
 
115
   We do this because we ordinarily only need a small amount of
116
   information for a local symbol.  The symbol table takes up a lot of
117
   space, and storing less information for a local symbol can make a
118
   big difference in assembler memory usage when assembling a large
119
   file.  */
120
 
121
struct local_symbol
122
{
123 166 khays
  /* Symbol flags.  Only sy_local_symbol and sy_resolved are relevant.  */
124
  struct symbol_flags lsy_flags;
125 147 khays
 
126
  /* The symbol section.  This also serves as a flag.  If this is
127
     reg_section, then this symbol has been converted into a regular
128
     symbol, and lsy_sym points to it.  */
129
  segT lsy_section;
130
 
131
  /* The symbol name.  */
132
  const char *lsy_name;
133
 
134
  /* The symbol frag or the real symbol, depending upon the value in
135 166 khays
     lsy_section.  */
136 147 khays
  union
137
  {
138
    fragS *lsy_frag;
139
    symbolS *lsy_sym;
140
  } u;
141
 
142
  /* The value of the symbol.  */
143
  valueT lsy_value;
144
 
145
#ifdef TC_LOCAL_SYMFIELD_TYPE
146
  TC_LOCAL_SYMFIELD_TYPE lsy_tc;
147
#endif
148
};
149
 
150
#define local_symbol_converted_p(l) ((l)->lsy_section == reg_section)
151
#define local_symbol_mark_converted(l) ((l)->lsy_section = reg_section)
152 166 khays
#define local_symbol_resolved_p(l) ((l)->lsy_flags.sy_resolved)
153
#define local_symbol_mark_resolved(l) ((l)->lsy_flags.sy_resolved = 1)
154 147 khays
#define local_symbol_get_frag(l) ((l)->u.lsy_frag)
155
#define local_symbol_set_frag(l, f) ((l)->u.lsy_frag = (f))
156
#define local_symbol_get_real_symbol(l) ((l)->u.lsy_sym)
157
#define local_symbol_set_real_symbol(l, s) ((l)->u.lsy_sym = (s))
158
 
159
#endif /* __struc_symbol_h__ */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.