gdb: Symbols In Guile

 
 23.3.3.17 Guile representation of Symbols.
 ..........................................
 
 GDB represents every variable, function and type as an entry in a symbol
 table.  SeeExamining the Symbol Table Symbols.  Guile represents
 these symbols in GDB with the '<gdb:symbol>' object.
 
    The following symbol-related procedures are provided by the '(gdb)'
 module:
 
  -- Scheme Procedure: symbol? object
      Return '#t' if OBJECT is an object of type '<gdb:symbol>'.
      Otherwise return '#f'.
 
  -- Scheme Procedure: symbol-valid? symbol
      Return '#t' if the '<gdb:symbol>' object is valid, '#f' if not.  A
      '<gdb:symbol>' object can become invalid if the symbol it refers to
      does not exist in GDB any longer.  All other '<gdb:symbol>'
      procedures will throw an exception if it is invalid at the time the
      procedure is called.
 
  -- Scheme Procedure: symbol-type symbol
      Return the type of SYMBOL or '#f' if no type is recorded.  The
      result is an object of type '<gdb:type>'.  SeeTypes In Guile.
 
  -- Scheme Procedure: symbol-symtab symbol
      Return the symbol table in which SYMBOL appears.  The result is an
      object of type '<gdb:symtab>'.  SeeSymbol Tables In Guile.
 
  -- Scheme Procedure: symbol-line symbol
      Return the line number in the source code at which SYMBOL was
      defined.  This is an integer.
 
  -- Scheme Procedure: symbol-name symbol
      Return the name of SYMBOL as a string.
 
  -- Scheme Procedure: symbol-linkage-name symbol
      Return the name of SYMBOL, as used by the linker (i.e., may be
      mangled).
 
  -- Scheme Procedure: symbol-print-name symbol
      Return the name of SYMBOL in a form suitable for output.  This is
      either 'name' or 'linkage_name', depending on whether the user
      asked GDB to display demangled or mangled names.
 
  -- Scheme Procedure: symbol-addr-class symbol
      Return the address class of the symbol.  This classifies how to
      find the value of a symbol.  Each address class is a constant
      defined in the '(gdb)' module and described later in this chapter.
 
  -- Scheme Procedure: symbol-needs-frame? symbol
      Return '#t' if evaluating SYMBOL's value requires a frame (See
      Frames In Guile) and '#f' otherwise.  Typically, local variables
      will require a frame, but other symbols will not.
 
  -- Scheme Procedure: symbol-argument? symbol
      Return '#t' if SYMBOL is an argument of a function.  Otherwise
      return '#f'.
 
  -- Scheme Procedure: symbol-constant? symbol
      Return '#t' if SYMBOL is a constant.  Otherwise return '#f'.
 
  -- Scheme Procedure: symbol-function? symbol
      Return '#t' if SYMBOL is a function or a method.  Otherwise return
      '#f'.
 
  -- Scheme Procedure: symbol-variable? symbol
      Return '#t' if SYMBOL is a variable.  Otherwise return '#f'.
 
  -- Scheme Procedure: symbol-value symbol [#:frame frame]
      Compute the value of SYMBOL, as a '<gdb:value>'.  For functions,
      this computes the address of the function, cast to the appropriate
      type.  If the symbol requires a frame in order to compute its
      value, then FRAME must be given.  If FRAME is not given, or if
      FRAME is invalid, then an exception is thrown.
 
  -- Scheme Procedure: lookup-symbol name [#:block block] [#:domain
           domain]
      This function searches for a symbol by name.  The search scope can
      be restricted to the parameters defined in the optional domain and
      block arguments.
 
      NAME is the name of the symbol.  It must be a string.  The optional
      BLOCK argument restricts the search to symbols visible in that
      BLOCK.  The BLOCK argument must be a '<gdb:block>' object.  If
      omitted, the block for the current frame is used.  The optional
      DOMAIN argument restricts the search to the domain type.  The
      DOMAIN argument must be a domain constant defined in the '(gdb)'
      module and described later in this chapter.
 
      The result is a list of two elements.  The first element is a
      '<gdb:symbol>' object or '#f' if the symbol is not found.  If the
      symbol is found, the second element is '#t' if the symbol is a
      field of a method's object (e.g., 'this' in C++), otherwise it is
      '#f'.  If the symbol is not found, the second element is '#f'.
 
  -- Scheme Procedure: lookup-global-symbol name [#:domain domain]
      This function searches for a global symbol by name.  The search
      scope can be restricted by the domain argument.
 
      NAME is the name of the symbol.  It must be a string.  The optional
      DOMAIN argument restricts the search to the domain type.  The
      DOMAIN argument must be a domain constant defined in the '(gdb)'
      module and described later in this chapter.
 
      The result is a '<gdb:symbol>' object or '#f' if the symbol is not
      found.
 
    The available domain categories in '<gdb:symbol>' are represented as
 constants in the '(gdb)' module:
 
 'SYMBOL_UNDEF_DOMAIN'
      This is used when a domain has not been discovered or none of the
      following domains apply.  This usually indicates an error either in
      the symbol information or in GDB's handling of symbols.
 
 'SYMBOL_VAR_DOMAIN'
      This domain contains variables, function names, typedef names and
      enum type values.
 
 'SYMBOL_STRUCT_DOMAIN'
      This domain holds struct, union and enum type names.
 
 'SYMBOL_LABEL_DOMAIN'
      This domain contains names of labels (for gotos).
 
 'SYMBOL_VARIABLES_DOMAIN'
      This domain holds a subset of the 'SYMBOLS_VAR_DOMAIN'; it contains
      everything minus functions and types.
 
 'SYMBOL_FUNCTIONS_DOMAIN'
      This domain contains all functions.
 
 'SYMBOL_TYPES_DOMAIN'
      This domain contains all types.
 
    The available address class categories in '<gdb:symbol>' are
 represented as constants in the 'gdb' module:
 
 'SYMBOL_LOC_UNDEF'
      If this is returned by address class, it indicates an error either
      in the symbol information or in GDB's handling of symbols.
 
 'SYMBOL_LOC_CONST'
      Value is constant int.
 
 'SYMBOL_LOC_STATIC'
      Value is at a fixed address.
 
 'SYMBOL_LOC_REGISTER'
      Value is in a register.
 
 'SYMBOL_LOC_ARG'
      Value is an argument.  This value is at the offset stored within
      the symbol inside the frame's argument list.
 
 'SYMBOL_LOC_REF_ARG'
      Value address is stored in the frame's argument list.  Just like
      'LOC_ARG' except that the value's address is stored at the offset,
      not the value itself.
 
 'SYMBOL_LOC_REGPARM_ADDR'
      Value is a specified register.  Just like 'LOC_REGISTER' except the
      register holds the address of the argument instead of the argument
      itself.
 
 'SYMBOL_LOC_LOCAL'
      Value is a local variable.
 
 'SYMBOL_LOC_TYPEDEF'
      Value not used.  Symbols in the domain 'SYMBOL_STRUCT_DOMAIN' all
      have this class.
 
 'SYMBOL_LOC_BLOCK'
      Value is a block.
 
 'SYMBOL_LOC_CONST_BYTES'
      Value is a byte-sequence.
 
 'SYMBOL_LOC_UNRESOLVED'
      Value is at a fixed address, but the address of the variable has to
      be determined from the minimal symbol table whenever the variable
      is referenced.
 
 'SYMBOL_LOC_OPTIMIZED_OUT'
      The value does not actually exist in the program.
 
 'SYMBOL_LOC_COMPUTED'
      The value's address is a computed location.