* findvar.c (find_var_value): Handle &function better.

* TODO:  Document work needed on &fn and &array.
        * printcmd.c (print_address_symbolic):  New arg is the prefix
        to print if a name is printed.
        (print_address_demangle):  Honor "set print address" now.
        Use new arg above to improve spacing of output.
        * valprint.c (val_print):  When printing function pointers,
        print symbolic form too.
        * breakpoint.c (breakpoint_1):  Use new print_address_symbolic.
This commit is contained in:
John Gilmore
1991-07-14 07:48:06 +00:00
parent 116a34785a
commit 36b9d39cf4
5 changed files with 79 additions and 36 deletions

View File

@@ -3,19 +3,19 @@
This file is part of GDB.
GDB is free software; you can redistribute it and/or modify
This program 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 1, or (at your option)
any later version.
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
GDB is distributed in the hope that it will be useful,
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GDB; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include <stdio.h>
#include "defs.h"
@@ -390,10 +390,13 @@ read_var_value (var, frame)
return v;
case LOC_CONST_BYTES:
addr = SYMBOL_VALUE_ADDRESS (var);
bcopy (addr, VALUE_CONTENTS_RAW (v), len);
VALUE_LVAL (v) = not_lval;
return v;
{
char *bytes_addr;
bytes_addr = SYMBOL_VALUE_BYTES (var);
bcopy (bytes_addr, VALUE_CONTENTS_RAW (v), len);
VALUE_LVAL (v) = not_lval;
return v;
}
case LOC_STATIC:
case LOC_EXTERNAL:
@@ -631,9 +634,10 @@ value_from_register (type, regnum, frame)
return v;
}
/* Given a struct symbol for a variable,
/* Given a struct symbol for a variable or function,
and a stack frame id,
return a (pointer to a) struct value containing the variable's address. */
return a (pointer to a) struct value containing the properly typed
address. */
value
locate_var_value (var, frame)
@@ -652,7 +656,8 @@ locate_var_value (var, frame)
if (lazy_value == 0)
error ("Address of \"%s\" is unknown.", SYMBOL_NAME (var));
if (VALUE_LAZY (lazy_value))
if (VALUE_LAZY (lazy_value)
|| TYPE_CODE (type) == TYPE_CODE_FUNC)
{
addr = VALUE_ADDRESS (lazy_value);
@@ -668,6 +673,7 @@ locate_var_value (var, frame)
}
/* Address of an array is of the type of address of it's elements. */
/* FIXME, this is probably wrong now for ANSI C. */
result_type =
lookup_pointer_type (TYPE_CODE (type) == TYPE_CODE_ARRAY ?
TYPE_TARGET_TYPE (type) : type);