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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.3/] [gdb/] [macroscope.c] - Blame information for rev 1775

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

Line No. Rev Author Line
1 1181 sfurman
/* Functions for deciding which macros are currently in scope.
2
   Copyright 2002 Free Software Foundation, Inc.
3
   Contributed by Red Hat, Inc.
4
 
5
   This file is part of GDB.
6
 
7
   This program 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 2 of the License, or
10
   (at your option) any later version.
11
 
12
   This program 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 this program; if not, write to the Free Software
19
   Foundation, Inc., 59 Temple Place - Suite 330,
20
   Boston, MA 02111-1307, USA.  */
21
 
22
#include "defs.h"
23
 
24
#include "macroscope.h"
25
#include "symtab.h"
26
#include "target.h"
27
#include "frame.h"
28
#include "inferior.h"
29
 
30
 
31
struct macro_scope *
32
sal_macro_scope (struct symtab_and_line sal)
33
{
34
  struct macro_source_file *main;
35
  struct macro_scope *ms;
36
 
37
  if (! sal.symtab
38
      || ! sal.symtab->macro_table)
39
    return 0;
40
 
41
  ms = (struct macro_scope *) xmalloc (sizeof (*ms));
42
 
43
  main = macro_main (sal.symtab->macro_table);
44
  ms->file = macro_lookup_inclusion (main, sal.symtab->filename);
45
 
46
  if (! ms->file)
47
    internal_error
48
      (__FILE__, __LINE__,
49
       "\n"
50
       "the symtab `%s' refers to a preprocessor macro table which doesn't\n"
51
       "have any record of processing a file by that name.\n",
52
       sal.symtab->filename);
53
 
54
  ms->line = sal.line;
55
 
56
  return ms;
57
}
58
 
59
 
60
struct macro_scope *
61
default_macro_scope (void)
62
{
63
  struct symtab_and_line sal;
64
  struct macro_source_file *main;
65
  struct macro_scope *ms;
66
 
67
  /* If there's a selected frame, use its PC.  */
68
  if (selected_frame)
69
    sal = find_pc_line (selected_frame->pc, 0);
70
 
71
  /* If the target has any registers at all, then use its PC.  Why we
72
     would have registers but no stack, I'm not sure.  */
73
  else if (target_has_registers)
74
    sal = find_pc_line (read_pc (), 0);
75
 
76
  /* If all else fails, fall back to the current listing position.  */
77
  else
78
    {
79
      /* Don't call select_source_symtab here.  That can raise an
80
         error if symbols aren't loaded, but GDB calls the expression
81
         evaluator in all sorts of contexts.
82
 
83
         For example, commands like `set width' call the expression
84
         evaluator to evaluate their numeric arguments.  If the
85
         current language is C, then that may call this function to
86
         choose a scope for macro expansion.  If you don't have any
87
         symbol files loaded, then select_source_symtab will raise an
88
         error.  But `set width' shouldn't raise an error just because
89
         it can't decide which scope to macro-expand its argument in.  */
90
      sal.symtab = current_source_symtab;
91
      sal.line = current_source_line;
92
    }
93
 
94
  return sal_macro_scope (sal);
95
}
96
 
97
 
98
/* Look up the definition of the macro named NAME in scope at the source
99
   location given by BATON, which must be a pointer to a `struct
100
   macro_scope' structure.  */
101
struct macro_definition *
102
standard_macro_lookup (const char *name, void *baton)
103
{
104
  struct macro_scope *ms = (struct macro_scope *) baton;
105
 
106
  return macro_lookup_definition (ms->file, ms->line, name);
107
}

powered by: WebSVN 2.1.0

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