Add software single step support to moxie port
[deliverable/binutils-gdb.git] / gas / struc-symbol.h
index 2326ee4f06fb9bd968fc70b73261472c831851e7..1dbb9d2c352a1ee7d79a9f820886dfb480a589ac 100644 (file)
@@ -1,12 +1,12 @@
 /* struct_symbol.h - Internal symbol structure
-   Copyright 1987, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2001, 2005
-   Free Software Foundation, Inc.
+   Copyright 1987, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2001, 2005,
+   2007, 2008, 2009 Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
 
    GAS is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
+   the Free Software Foundation; either version 3, or (at your option)
    any later version.
 
    GAS is distributed in the hope that it will be useful,
 #ifndef __struc_symbol_h__
 #define __struc_symbol_h__
 
-/* The information we keep for a symbol.  Note that the symbol table
-   holds pointers both to this and to local_symbol structures.  See
-   below.  */
-
-struct symbol
+struct symbol_flags
 {
-  /* BFD symbol */
-  asymbol *bsym;
-
-  /* The value of the symbol.  */
-  expressionS sy_value;
-
-  /* Forwards and (optionally) backwards chain pointers.  */
-  struct symbol *sy_next;
-  struct symbol *sy_previous;
+  /* Wether the symbol is a local_symbol.  */
+  unsigned int sy_local_symbol : 1;
 
-  /* Pointer to the frag this symbol is attached to, if any.
-     Otherwise, NULL.  */
-  struct frag *sy_frag;
+  /* Wether symbol has been written.  */
+  unsigned int sy_written : 1;
 
-  unsigned int written : 1;
   /* Whether symbol value has been completely resolved (used during
      final pass over symbol table).  */
   unsigned int sy_resolved : 1;
+
   /* Whether the symbol value is currently being resolved (used to
      detect loops in symbol dependencies).  */
   unsigned int sy_resolving : 1;
+
   /* Whether the symbol value is used in a reloc.  This is used to
      ensure that symbols used in relocs are written out, even if they
      are local and would otherwise not be.  */
@@ -72,6 +61,39 @@ struct symbol
      routines.  */
   unsigned int sy_mri_common : 1;
 
+  /* This is set if the symbol is set with a .weakref directive.  */
+  unsigned int sy_weakrefr : 1;
+
+  /* This is set when the symbol is referenced as part of a .weakref
+     directive, but only if the symbol was not in the symbol table
+     before.  It is cleared as soon as any direct reference to the
+     symbol is present.  */
+  unsigned int sy_weakrefd : 1;
+};
+
+/* The information we keep for a symbol.  Note that the symbol table
+   holds pointers both to this and to local_symbol structures.  See
+   below.  */
+
+struct symbol
+{
+  /* Symbol flags.  */
+  struct symbol_flags sy_flags;
+
+  /* BFD symbol */
+  asymbol *bsym;
+
+  /* The value of the symbol.  */
+  expressionS sy_value;
+
+  /* Forwards and (optionally) backwards chain pointers.  */
+  struct symbol *sy_next;
+  struct symbol *sy_previous;
+
+  /* Pointer to the frag this symbol is attached to, if any.
+     Otherwise, NULL.  */
+  struct frag *sy_frag;
+
 #ifdef OBJ_SYMFIELD_TYPE
   OBJ_SYMFIELD_TYPE sy_obj;
 #endif
@@ -98,9 +120,8 @@ struct symbol
 
 struct local_symbol
 {
-  /* This pointer is always NULL to indicate that this is a local
-     symbol.  */
-  asymbol *lsy_marker;
+  /* Symbol flags.  Only sy_local_symbol and sy_resolved are relevant.  */
+  struct symbol_flags lsy_flags;
 
   /* The symbol section.  This also serves as a flag.  If this is
      reg_section, then this symbol has been converted into a regular
@@ -111,8 +132,7 @@ struct local_symbol
   const char *lsy_name;
 
   /* The symbol frag or the real symbol, depending upon the value in
-     lsy_section.  If the symbol has been fully resolved, lsy_frag is
-     set to NULL.  */
+     lsy_section.  */
   union
   {
     fragS *lsy_frag;
@@ -129,8 +149,8 @@ struct local_symbol
 
 #define local_symbol_converted_p(l) ((l)->lsy_section == reg_section)
 #define local_symbol_mark_converted(l) ((l)->lsy_section = reg_section)
-#define local_symbol_resolved_p(l) ((l)->u.lsy_frag == NULL)
-#define local_symbol_mark_resolved(l) ((l)->u.lsy_frag = NULL)
+#define local_symbol_resolved_p(l) ((l)->lsy_flags.sy_resolved)
+#define local_symbol_mark_resolved(l) ((l)->lsy_flags.sy_resolved = 1)
 #define local_symbol_get_frag(l) ((l)->u.lsy_frag)
 #define local_symbol_set_frag(l, f) ((l)->u.lsy_frag = (f))
 #define local_symbol_get_real_symbol(l) ((l)->u.lsy_sym)
This page took 0.025244 seconds and 4 git commands to generate.