* findvar.c, value.h (symbol_read_needs_frame): New function.
* c-exp.y, m2-exp.y: Call it instead of having our own switch on the symbol's class. * valops.c (value_of_variable): Use symbol_read_needs_frame to decide whether we care about finding a frame.
This commit is contained in:
parent
1aa6938eb3
commit
443abae18c
5 changed files with 54 additions and 55 deletions
|
@ -1,3 +1,11 @@
|
||||||
|
Fri Oct 8 14:56:21 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
|
||||||
|
|
||||||
|
* findvar.c, value.h (symbol_read_needs_frame): New function.
|
||||||
|
* c-exp.y, m2-exp.y: Call it instead of having our own switch on
|
||||||
|
the symbol's class.
|
||||||
|
* valops.c (value_of_variable): Use symbol_read_needs_frame to
|
||||||
|
decide whether we care about finding a frame.
|
||||||
|
|
||||||
Fri Oct 8 02:34:21 1993 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
|
Fri Oct 8 02:34:21 1993 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
|
||||||
|
|
||||||
* blockframe.c (get_frame_block): Do not adjust pc if the frame
|
* blockframe.c (get_frame_block): Do not adjust pc if the frame
|
||||||
|
|
31
gdb/c-exp.y
31
gdb/c-exp.y
|
@ -659,41 +659,14 @@ variable: name_not_typename
|
||||||
|
|
||||||
if (sym)
|
if (sym)
|
||||||
{
|
{
|
||||||
switch (SYMBOL_CLASS (sym))
|
if (symbol_read_needs_frame (sym))
|
||||||
{
|
{
|
||||||
case LOC_REGISTER:
|
|
||||||
case LOC_ARG:
|
|
||||||
case LOC_REF_ARG:
|
|
||||||
case LOC_REGPARM:
|
|
||||||
case LOC_REGPARM_ADDR:
|
|
||||||
case LOC_LOCAL:
|
|
||||||
case LOC_LOCAL_ARG:
|
|
||||||
case LOC_BASEREG:
|
|
||||||
case LOC_BASEREG_ARG:
|
|
||||||
if (innermost_block == 0 ||
|
if (innermost_block == 0 ||
|
||||||
contained_in (block_found,
|
contained_in (block_found,
|
||||||
innermost_block))
|
innermost_block))
|
||||||
innermost_block = block_found;
|
innermost_block = block_found;
|
||||||
case LOC_UNDEF:
|
|
||||||
case LOC_CONST:
|
|
||||||
case LOC_STATIC:
|
|
||||||
case LOC_TYPEDEF:
|
|
||||||
case LOC_LABEL:
|
|
||||||
case LOC_BLOCK:
|
|
||||||
case LOC_CONST_BYTES:
|
|
||||||
case LOC_OPTIMIZED_OUT:
|
|
||||||
|
|
||||||
/* In this case the expression can
|
|
||||||
be evaluated regardless of what
|
|
||||||
frame we are in, so there is no
|
|
||||||
need to check for the
|
|
||||||
innermost_block. These cases are
|
|
||||||
listed so that gcc -Wall will
|
|
||||||
report types that may not have
|
|
||||||
been considered. */
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
write_exp_elt_opcode (OP_VAR_VALUE);
|
write_exp_elt_opcode (OP_VAR_VALUE);
|
||||||
/* We want to use the selected frame, not
|
/* We want to use the selected frame, not
|
||||||
another more inner frame which happens to
|
another more inner frame which happens to
|
||||||
|
|
|
@ -467,7 +467,7 @@ read_register (regno)
|
||||||
void
|
void
|
||||||
write_register (regno, val)
|
write_register (regno, val)
|
||||||
int regno;
|
int regno;
|
||||||
long val;
|
LONGEST val;
|
||||||
{
|
{
|
||||||
PTR buf;
|
PTR buf;
|
||||||
int size;
|
int size;
|
||||||
|
@ -518,6 +518,45 @@ supply_register (regno, val)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Will calling read_var_value or locate_var_value on SYM end
|
||||||
|
up caring what frame it is being evaluated relative to? SYM must
|
||||||
|
be non-NULL. */
|
||||||
|
int
|
||||||
|
symbol_read_needs_frame (sym)
|
||||||
|
struct symbol *sym;
|
||||||
|
{
|
||||||
|
switch (SYMBOL_CLASS (sym))
|
||||||
|
{
|
||||||
|
/* All cases listed explicitly so that gcc -Wall will detect it if
|
||||||
|
we failed to consider one. */
|
||||||
|
case LOC_REGISTER:
|
||||||
|
case LOC_ARG:
|
||||||
|
case LOC_REF_ARG:
|
||||||
|
case LOC_REGPARM:
|
||||||
|
case LOC_REGPARM_ADDR:
|
||||||
|
case LOC_LOCAL:
|
||||||
|
case LOC_LOCAL_ARG:
|
||||||
|
case LOC_BASEREG:
|
||||||
|
case LOC_BASEREG_ARG:
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
case LOC_UNDEF:
|
||||||
|
case LOC_CONST:
|
||||||
|
case LOC_STATIC:
|
||||||
|
case LOC_TYPEDEF:
|
||||||
|
|
||||||
|
case LOC_LABEL:
|
||||||
|
/* Getting the address of a label can be done independently of the block,
|
||||||
|
even if some *uses* of that address wouldn't work so well without
|
||||||
|
the right frame. */
|
||||||
|
|
||||||
|
case LOC_BLOCK:
|
||||||
|
case LOC_CONST_BYTES:
|
||||||
|
case LOC_OPTIMIZED_OUT:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Given a struct symbol for a variable,
|
/* Given a struct symbol for a variable,
|
||||||
and a stack frame id, read the value of the variable
|
and a stack frame id, read the value of the variable
|
||||||
and return a (pointer to a) struct value containing the value.
|
and return a (pointer to a) struct value containing the value.
|
||||||
|
|
27
gdb/m2-exp.y
27
gdb/m2-exp.y
|
@ -599,35 +599,14 @@ variable: NAME
|
||||||
NULL);
|
NULL);
|
||||||
if (sym)
|
if (sym)
|
||||||
{
|
{
|
||||||
switch (sym->class)
|
if (symbol_read_needs_frame (sym))
|
||||||
{
|
{
|
||||||
case LOC_REGISTER:
|
|
||||||
case LOC_ARG:
|
|
||||||
case LOC_LOCAL:
|
|
||||||
case LOC_REF_ARG:
|
|
||||||
case LOC_REGPARM:
|
|
||||||
case LOC_REGPARM_ADDR:
|
|
||||||
case LOC_LOCAL_ARG:
|
|
||||||
case LOC_BASEREG:
|
|
||||||
case LOC_BASEREG_ARG:
|
|
||||||
if (innermost_block == 0 ||
|
if (innermost_block == 0 ||
|
||||||
contained_in (block_found,
|
contained_in (block_found,
|
||||||
innermost_block))
|
innermost_block))
|
||||||
innermost_block = block_found;
|
innermost_block = block_found;
|
||||||
break;
|
|
||||||
|
|
||||||
case LOC_UNDEF:
|
|
||||||
case LOC_CONST:
|
|
||||||
case LOC_STATIC:
|
|
||||||
case LOC_TYPEDEF:
|
|
||||||
case LOC_LABEL: /* maybe should go above? */
|
|
||||||
case LOC_BLOCK:
|
|
||||||
case LOC_CONST_BYTES:
|
|
||||||
case LOC_OPTIMIZED_OUT:
|
|
||||||
/* These are listed so gcc -Wall will reveal
|
|
||||||
un-handled cases. */
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
write_exp_elt_opcode (OP_VAR_VALUE);
|
write_exp_elt_opcode (OP_VAR_VALUE);
|
||||||
/* We want to use the selected frame, not
|
/* We want to use the selected frame, not
|
||||||
another more inner frame which happens to
|
another more inner frame which happens to
|
||||||
|
|
|
@ -511,7 +511,7 @@ value_of_variable (var, b)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
fr = block_innermost_frame (b);
|
fr = block_innermost_frame (b);
|
||||||
if (fr == NULL)
|
if (fr == NULL && symbol_read_needs_frame (var))
|
||||||
{
|
{
|
||||||
if (BLOCK_FUNCTION (b) != NULL
|
if (BLOCK_FUNCTION (b) != NULL
|
||||||
&& SYMBOL_NAME (BLOCK_FUNCTION (b)) != NULL)
|
&& SYMBOL_NAME (BLOCK_FUNCTION (b)) != NULL)
|
||||||
|
|
Loading…
Add table
Reference in a new issue